http://git-wip-us.apache.org/repos/asf/couchdb-jiffy/blob/11ab9738/test/jiffy_09_reg_issue_24_tests.erl
----------------------------------------------------------------------
diff --git a/test/jiffy_09_reg_issue_24_tests.erl 
b/test/jiffy_09_reg_issue_24_tests.erl
new file mode 100644
index 0000000..ca72d1b
--- /dev/null
+++ b/test/jiffy_09_reg_issue_24_tests.erl
@@ -0,0 +1,3462 @@
+% This file is part of Jiffy released under the MIT license.
+% See the LICENSE file for more information.
+
+-module(jiffy_09_reg_issue_24_tests).
+
+
+-include_lib("proper/include/proper.hrl").
+-include_lib("eunit/include/eunit.hrl").
+-include("jiffy_util.hrl").
+
+
+no_segfault_test_() ->
+    {"no segfault", [
+        ?_assert(begin jiffy:encode(big_doc(), [uescape]), true end)
+    ]}.
+
+
+big_doc() ->
+    {[{<<"_id">>,<<"_design/bookmarks">>},
+      {<<"_rev">>,<<"1-1794a8236590d2fc6c288115dc539a3d">>},
+      {<<"lib">>,
+       {[{<<"app">>,
+          <<"\nmodule.exports = {\n\n    views: require('./views'),\n    shows 
: require('./shows'),\n    rewrites: require('./rewrites'),\n    updates: 
require('./updates')\n};\n\n// Bind event handlers\n// 
require('./events')\n">>},
+         {<<"rewrites">>,
+          <<"/**\n * Rewrite settings to be exported from the design doc\n 
*/\n\nmodule.exports = [\n    {from: '/static/*', to: 'static/*'},\n    {from: 
'/bootstrap/*', to: 'bootstrap/*'},\n    {from: '/modules.js', to: 'modules.js' 
},\n    {\"from\": \"/_db/*\", \"to\": \"../../*\" },\n    {\"from\": \"/_db\", 
\"to\": \"../..\" },\n    {\"from\": \"/bookmark_lite\", \"to\" : 
\"_show/bookmark_lite\"},\n    {\"from\": \"/bookmark\", \"to\" : 
\"_show/bookmark\"},\n    {\"from\": \"/save\", \"to\" : 
\"_update/bookmark\"},\n    {\"from\": \"/click/*\", \"to\" : 
\"_update/click/*\"},\n    {\"from\": \"/archive/*\", \"to\" : 
\"_update/archive/*\"},\n    {from: '/', to: 'index.html'}\n];">>},
+         {<<"shows">>,
+          <<"var templates = 
require('handlebars').templates;\n\nexports.bookmark_lite = function(doc, req) 
{\n\n    return {\n        code: 200,\n        headers: {'content-type' : 
'text/html'},\n        body: templates['newBookmark.html']({\n            title 
: req.query.title,\n            url  : req.query.url\n        })\n    
};\n\n}\n\nexports.bookmark = function(doc, req) {\n    return {\n        code: 
200,\n        headers: {'content-type' : 'text/html'},\n        body: 
'<h2>Hellp</h2>'\n    };\n}\n\n">>},
+         {<<"updates">>,
+          <<"\nvar md5 = require('md5');\nvar querystring = 
require('querystring');\n\nexports.bookmark = function(doc, req) {\n\n    var 
details = {};\n    if (req.body && req.body.length > 0) {\n        details = 
querystring.parse(req.body);\n    }\n    if (req.query.title) details.title = 
req.query.title;\n    if (req.query.url)   details.url = req.query.url;\n\n    
if (!doc) {\n        var id = md5.hex(details.url);\n        var doc = {\n      
      _id : id,\n            type: 'com.eckoit.bookmark',\n            title : 
decodeURIComponent(details.title),\n            url : 
decodeURIComponent(details.url),\n            timestamp: new Date().getTime()\n 
       };\n        if (details.short_text) doc.short_text = 
details.short_text;\n        log(doc);\n        return [doc, 'SUCCESS']\n\n    
} else {\n\n    }\n}\n\nexports.click = function(doc, req) {\n    if 
(!doc.clicks) doc.clicks = 0;\n    doc.clicks++;\n    return [doc, 
'SUCCESS'];\n}\n\nexports.archive = function(doc, req) {\
 n    doc.archive = true;\n    return [doc, 'SUCCESS'];\n}">>},
+         {<<"views">>,
+          <<"\n\nexports.by_date = {\n    map : function(doc) {\n\n        if 
(doc.archive) return;\n\n        if (doc.type && doc.type === 
'com.eckoit.bookmark' ) {\n            var timestamp = doc.timestamp;\n         
   if (!timestamp) timestamp = new Date(0);\n            emit(timestamp, 
null);\n        }\n    }\n}\n\nexports.by_views = {\n    map : function(doc) 
{\n\n        if (doc.archive) return;\n\n        if (doc.type && doc.type === 
'com.eckoit.bookmark' ) {\n            var clicks = doc.clicks;\n            if 
(!clicks) clicks = 0;\n\n            var timestamp = doc.timestamp;\n           
 if (!timestamp) timestamp = new Date(0);\n\n            emit([clicks, 
timestamp], null);\n        }\n    }\n}\n\nexports.all_tags = {\n    map : 
function(doc) {\n        if (doc.type && doc.type == 'garden.tag') {\n          
  emit(doc.hash, null);\n        }\n    }\n}\n">>}]}},
+      {<<"underscore">>,
+       <<"//     Underscore.js 1.3.1\n//     (c) 2009-2012 Jeremy Ashkenas, 
DocumentCloud Inc.\n//     Underscore is freely distributable under the MIT 
license.\n//     Portions of Underscore are inspired or borrowed from 
Prototype,\n//     Oliver Steele's Functional, and John Resig's 
Micro-Templating.\n//     For all details and documentation:\n//     
http://documentcloud.github.com/underscore\n\n(function() {\n\n  // Baseline 
setup\n  // --------------\n\n  // Establish the root object, `window` in the 
browser, or `global` on the server.\n  var root = this;\n\n  // Save the 
previous value of the `_` variable.\n  var previousUnderscore = root._;\n\n  // 
Establish the object that gets returned to break out of a loop iteration.\n  
var breaker = {};\n\n  // Save bytes in the minified (but not gzipped) 
version:\n  var ArrayProto = Array.prototype, ObjProto = Object.prototype, 
FuncProto = Function.prototype;\n\n  // Create quick reference variables for 
speed access to core prototypes.\n
   var slice            = ArrayProto.slice,\n      unshift          = 
ArrayProto.unshift,\n      toString         = ObjProto.toString,\n      
hasOwnProperty   = ObjProto.hasOwnProperty;\n\n  // All **ECMAScript 5** native 
function implementations that we hope to use\n  // are declared here.\n  var\n  
  nativeForEach      = ArrayProto.forEach,\n    nativeMap          = 
ArrayProto.map,\n    nativeReduce       = ArrayProto.reduce,\n    
nativeReduceRight  = ArrayProto.reduceRight,\n    nativeFilter       = 
ArrayProto.filter,\n    nativeEvery        = ArrayProto.every,\n    nativeSome  
       = ArrayProto.some,\n    nativeIndexOf      = ArrayProto.indexOf,\n    
nativeLastIndexOf  = ArrayProto.lastIndexOf,\n    nativeIsArray      = 
Array.isArray,\n    nativeKeys         = Object.keys,\n    nativeBind         = 
FuncProto.bind;\n\n  // Create a safe reference to the Underscore object for 
use below.\n  var _ = function(obj) { return new wrapper(obj); };\n\n  // 
Export the Underscore object fo
 r **Node.js**, with\n  // backwards-compatibility for the old `require()` API. 
If we're in\n  // the browser, add `_` as a global object via a string 
identifier,\n  // for Closure Compiler \"advanced\" mode.\n  if (typeof exports 
!== 'undefined') {\n    if (typeof module !== 'undefined' && module.exports) 
{\n      exports = module.exports = _;\n    }\n    exports._ = _;\n  } else {\n 
   root['_'] = _;\n  }\n\n  // Current version.\n  _.VERSION = '1.3.1';\n\n  // 
Collection Functions\n  // --------------------\n\n  // The cornerstone, an 
`each` implementation, aka `forEach`.\n  // Handles objects with the built-in 
`forEach`, arrays, and raw objects.\n  // Delegates to **ECMAScript 5**'s 
native `forEach` if available.\n  var each = _.each = _.forEach = function(obj, 
iterator, context) {\n    if (obj == null) return;\n    if (nativeForEach && 
obj.forEach === nativeForEach) {\n      obj.forEach(iterator, context);\n    } 
else if (obj.length === +obj.length) {\n      for (var i = 0, l = 
 obj.length; i < l; i++) {\n        if (i in obj && iterator.call(context, 
obj[i], i, obj) === breaker) return;\n      }\n    } else {\n      for (var key 
in obj) {\n        if (_.has(obj, key)) {\n          if (iterator.call(context, 
obj[key], key, obj) === breaker) return;\n        }\n      }\n    }\n  };\n\n  
// Return the results of applying the iterator to each element.\n  // Delegates 
to **ECMAScript 5**'s native `map` if available.\n  _.map = _.collect = 
function(obj, iterator, context) {\n    var results = [];\n    if (obj == null) 
return results;\n    if (nativeMap && obj.map === nativeMap) return 
obj.map(iterator, context);\n    each(obj, function(value, index, list) {\n     
 results[results.length] = iterator.call(context, value, index, list);\n    
});\n    if (obj.length === +obj.length) results.length = obj.length;\n    
return results;\n  };\n\n  // **Reduce** builds up a single result from a list 
of values, aka `inject`,\n  // or `foldl`. Delegates to **ECMAScript 5**'s
  native `reduce` if available.\n  _.reduce = _.foldl = _.inject = 
function(obj, iterator, memo, context) {\n    var initial = arguments.length > 
2;\n    if (obj == null) obj = [];\n    if (nativeReduce && obj.reduce === 
nativeReduce) {\n      if (context) iterator = _.bind(iterator, context);\n     
 return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator);\n    }\n   
 each(obj, function(value, index, list) {\n      if (!initial) {\n        memo 
= value;\n        initial = true;\n      } else {\n        memo = 
iterator.call(context, memo, value, index, list);\n      }\n    });\n    if 
(!initial) throw new TypeError('Reduce of empty array with no initial 
value');\n    return memo;\n  };\n\n  // The right-associative version of 
reduce, also known as `foldr`.\n  // Delegates to **ECMAScript 5**'s native 
`reduceRight` if available.\n  _.reduceRight = _.foldr = function(obj, 
iterator, memo, context) {\n    var initial = arguments.length > 2;\n    if 
(obj == null) obj = [];\n    
 if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {\n      if 
(context) iterator = _.bind(iterator, context);\n      return initial ? 
obj.reduceRight(iterator, memo) : obj.reduceRight(iterator);\n    }\n    var 
reversed = _.toArray(obj).reverse();\n    if (context && !initial) iterator = 
_.bind(iterator, context);\n    return initial ? _.reduce(reversed, iterator, 
memo, context) : _.reduce(reversed, iterator);\n  };\n\n  // Return the first 
value which passes a truth test. Aliased as `detect`.\n  _.find = _.detect = 
function(obj, iterator, context) {\n    var result;\n    any(obj, 
function(value, index, list) {\n      if (iterator.call(context, value, index, 
list)) {\n        result = value;\n        return true;\n      }\n    });\n    
return result;\n  };\n\n  // Return all the elements that pass a truth test.\n  
// Delegates to **ECMAScript 5**'s native `filter` if available.\n  // Aliased 
as `select`.\n  _.filter = _.select = function(obj, iterator, context) {\n    
 var results = [];\n    if (obj == null) return results;\n    if (nativeFilter 
&& obj.filter === nativeFilter) return obj.filter(iterator, context);\n    
each(obj, function(value, index, list) {\n      if (iterator.call(context, 
value, index, list)) results[results.length] = value;\n    });\n    return 
results;\n  };\n\n  // Return all the elements for which a truth test fails.\n  
_.reject = function(obj, iterator, context) {\n    var results = [];\n    if 
(obj == null) return results;\n    each(obj, function(value, index, list) {\n   
   if (!iterator.call(context, value, index, list)) results[results.length] = 
value;\n    });\n    return results;\n  };\n\n  // Determine whether all of the 
elements match a truth test.\n  // Delegates to **ECMAScript 5**'s native 
`every` if available.\n  // Aliased as `all`.\n  _.every = _.all = 
function(obj, iterator, context) {\n    var result = true;\n    if (obj == 
null) return result;\n    if (nativeEvery && obj.every === nativeEvery) return 
obj.
 every(iterator, context);\n    each(obj, function(value, index, list) {\n      
if (!(result = result && iterator.call(context, value, index, list))) return 
breaker;\n    });\n    return result;\n  };\n\n  // Determine if at least one 
element in the object matches a truth test.\n  // Delegates to **ECMAScript 
5**'s native `some` if available.\n  // Aliased as `any`.\n  var any = _.some = 
_.any = function(obj, iterator, context) {\n    iterator || (iterator = 
_.identity);\n    var result = false;\n    if (obj == null) return result;\n    
if (nativeSome && obj.some === nativeSome) return obj.some(iterator, 
context);\n    each(obj, function(value, index, list) {\n      if (result || 
(result = iterator.call(context, value, index, list))) return breaker;\n    
});\n    return !!result;\n  };\n\n  // Determine if a given value is included 
in the array or object using `===`.\n  // Aliased as `contains`.\n  _.include = 
_.contains = function(obj, target) {\n    var found = false;\n    if (obj 
 == null) return found;\n    if (nativeIndexOf && obj.indexOf === 
nativeIndexOf) return obj.indexOf(target) != -1;\n    found = any(obj, 
function(value) {\n      return value === target;\n    });\n    return found;\n 
 };\n\n  // Invoke a method (with arguments) on every item in a collection.\n  
_.invoke = function(obj, method) {\n    var args = slice.call(arguments, 2);\n  
  return _.map(obj, function(value) {\n      return (_.isFunction(method) ? 
method || value : value[method]).apply(value, args);\n    });\n  };\n\n  // 
Convenience version of a common use case of `map`: fetching a property.\n  
_.pluck = function(obj, key) {\n    return _.map(obj, function(value){ return 
value[key]; });\n  };\n\n  // Return the maximum element or (element-based 
computation).\n  _.max = function(obj, iterator, context) {\n    if (!iterator 
&& _.isArray(obj)) return Math.max.apply(Math, obj);\n    if (!iterator && 
_.isEmpty(obj)) return -Infinity;\n    var result = {computed : -Infinity};\n   
 each(ob
 j, function(value, index, list) {\n      var computed = iterator ? 
iterator.call(context, value, index, list) : value;\n      computed >= 
result.computed && (result = {value : value, computed : computed});\n    });\n  
  return result.value;\n  };\n\n  // Return the minimum element (or 
element-based computation).\n  _.min = function(obj, iterator, context) {\n    
if (!iterator && _.isArray(obj)) return Math.min.apply(Math, obj);\n    if 
(!iterator && _.isEmpty(obj)) return Infinity;\n    var result = {computed : 
Infinity};\n    each(obj, function(value, index, list) {\n      var computed = 
iterator ? iterator.call(context, value, index, list) : value;\n      computed 
< result.computed && (result = {value : value, computed : computed});\n    
});\n    return result.value;\n  };\n\n  // Shuffle an array.\n  _.shuffle = 
function(obj) {\n    var shuffled = [], rand;\n    each(obj, function(value, 
index, list) {\n      if (index == 0) {\n        shuffled[0] = value;\n      } 
else {\n      
   rand = Math.floor(Math.random() * (index + 1));\n        shuffled[index] = 
shuffled[rand];\n        shuffled[rand] = value;\n      }\n    });\n    return 
shuffled;\n  };\n\n  // Sort the object's values by a criterion produced by an 
iterator.\n  _.sortBy = function(obj, iterator, context) {\n    return 
_.pluck(_.map(obj, function(value, index, list) {\n      return {\n        
value : value,\n        criteria : iterator.call(context, value, index, list)\n 
     };\n    }).sort(function(left, right) {\n      var a = left.criteria, b = 
right.criteria;\n      return a < b ? -1 : a > b ? 1 : 0;\n    }), 'value');\n  
};\n\n  // Groups the object's values by a criterion. Pass either a string 
attribute\n  // to group by, or a function that returns the criterion.\n  
_.groupBy = function(obj, val) {\n    var result = {};\n    var iterator = 
_.isFunction(val) ? val : function(obj) { return obj[val]; };\n    each(obj, 
function(value, index) {\n      var key = iterator(value, index);\n      (re
 sult[key] || (result[key] = [])).push(value);\n    });\n    return result;\n  
};\n\n  // Use a comparator function to figure out at what index an object 
should\n  // be inserted so as to maintain order. Uses binary search.\n  
_.sortedIndex = function(array, obj, iterator) {\n    iterator || (iterator = 
_.identity);\n    var low = 0, high = array.length;\n    while (low < high) {\n 
     var mid = (low + high) >> 1;\n      iterator(array[mid]) < iterator(obj) ? 
low = mid + 1 : high = mid;\n    }\n    return low;\n  };\n\n  // Safely 
convert anything iterable into a real, live array.\n  _.toArray = 
function(iterable) {\n    if (!iterable)                return [];\n    if 
(iterable.toArray)         return iterable.toArray();\n    if 
(_.isArray(iterable))      return slice.call(iterable);\n    if 
(_.isArguments(iterable))  return slice.call(iterable);\n    return 
_.values(iterable);\n  };\n\n  // Return the number of elements in an object.\n 
 _.size = function(obj) {\n    return _.toArr
 ay(obj).length;\n  };\n\n  // Array Functions\n  // ---------------\n\n  // 
Get the first element of an array. Passing **n** will return the first N\n  // 
values in the array. Aliased as `head`. The **guard** check allows it to work\n 
 // with `_.map`.\n  _.first = _.head = function(array, n, guard) {\n    return 
(n != null) && !guard ? slice.call(array, 0, n) : array[0];\n  };\n\n  // 
Returns everything but the last entry of the array. Especcialy useful on\n  // 
the arguments object. Passing **n** will return all the values in\n  // the 
array, excluding the last N. The **guard** check allows it to work with\n  // 
`_.map`.\n  _.initial = function(array, n, guard) {\n    return 
slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n));\n  };\n\n  
// Get the last element of an array. Passing **n** will return the last N\n  // 
values in the array. The **guard** check allows it to work with `_.map`.\n  
_.last = function(array, n, guard) {\n    if ((n != null) && !guard) {\n   
    return slice.call(array, Math.max(array.length - n, 0));\n    } else {\n    
  return array[array.length - 1];\n    }\n  };\n\n  // Returns everything but 
the first entry of the array. Aliased as `tail`.\n  // Especially useful on the 
arguments object. Passing an **index** will return\n  // the rest of the values 
in the array from that index onward. The **guard**\n  // check allows it to 
work with `_.map`.\n  _.rest = _.tail = function(array, index, guard) {\n    
return slice.call(array, (index == null) || guard ? 1 : index);\n  };\n\n  // 
Trim out all falsy values from an array.\n  _.compact = function(array) {\n    
return _.filter(array, function(value){ return !!value; });\n  };\n\n  // 
Return a completely flattened version of an array.\n  _.flatten = 
function(array, shallow) {\n    return _.reduce(array, function(memo, value) 
{\n      if (_.isArray(value)) return memo.concat(shallow ? value : 
_.flatten(value));\n      memo[memo.length] = value;\n      return memo;\n    
}, []);
 \n  };\n\n  // Return a version of the array that does not contain the 
specified value(s).\n  _.without = function(array) {\n    return 
_.difference(array, slice.call(arguments, 1));\n  };\n\n  // Produce a 
duplicate-free version of the array. If the array has already\n  // been 
sorted, you have the option of using a faster algorithm.\n  // Aliased as 
`unique`.\n  _.uniq = _.unique = function(array, isSorted, iterator) {\n    var 
initial = iterator ? _.map(array, iterator) : array;\n    var result = [];\n    
_.reduce(initial, function(memo, el, i) {\n      if (0 == i || (isSorted === 
true ? _.last(memo) != el : !_.include(memo, el))) {\n        memo[memo.length] 
= el;\n        result[result.length] = array[i];\n      }\n      return memo;\n 
   }, []);\n    return result;\n  };\n\n  // Produce an array that contains the 
union: each distinct element from all of\n  // the passed-in arrays.\n  _.union 
= function() {\n    return _.uniq(_.flatten(arguments, true));\n  };\n\n  // 
Produce a
 n array that contains every item shared between all the\n  // passed-in 
arrays. (Aliased as \"intersect\" for back-compat.)\n  _.intersection = 
_.intersect = function(array) {\n    var rest = slice.call(arguments, 1);\n    
return _.filter(_.uniq(array), function(item) {\n      return _.every(rest, 
function(other) {\n        return _.indexOf(other, item) >= 0;\n      });\n    
});\n  };\n\n  // Take the difference between one array and a number of other 
arrays.\n  // Only the elements present in just the first array will remain.\n  
_.difference = function(array) {\n    var rest = 
_.flatten(slice.call(arguments, 1));\n    return _.filter(array, 
function(value){ return !_.include(rest, value); });\n  };\n\n  // Zip together 
multiple lists into a single array -- elements that share\n  // an index go 
together.\n  _.zip = function() {\n    var args = slice.call(arguments);\n    
var length = _.max(_.pluck(args, 'length'));\n    var results = new 
Array(length);\n    for (var i = 0; i < lengt
 h; i++) results[i] = _.pluck(args, \"\" + i);\n    return results;\n  };\n\n  
// If the browser doesn't supply us with indexOf (I'm looking at you, 
**MSIE**),\n  // we need this function. Return the position of the first 
occurrence of an\n  // item in an array, or -1 if the item is not included in 
the array.\n  // Delegates to **ECMAScript 5**'s native `indexOf` if 
available.\n  // If the array is large and already in sort order, pass `true`\n 
 // for **isSorted** to use binary search.\n  _.indexOf = function(array, item, 
isSorted) {\n    if (array == null) return -1;\n    var i, l;\n    if 
(isSorted) {\n      i = _.sortedIndex(array, item);\n      return array[i] === 
item ? i : -1;\n    }\n    if (nativeIndexOf && array.indexOf === 
nativeIndexOf) return array.indexOf(item);\n    for (i = 0, l = array.length; i 
< l; i++) if (i in array && array[i] === item) return i;\n    return -1;\n  
};\n\n  // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available.\n 
 _.lastIndexOf = f
 unction(array, item) {\n    if (array == null) return -1;\n    if 
(nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) return 
array.lastIndexOf(item);\n    var i = array.length;\n    while (i--) if (i in 
array && array[i] === item) return i;\n    return -1;\n  };\n\n  // Generate an 
integer Array containing an arithmetic progression. A port of\n  // the native 
Python `range()` function. See\n  // [the Python 
documentation](http://docs.python.org/library/functions.html#range).\n  _.range 
= function(start, stop, step) {\n    if (arguments.length <= 1) {\n      stop = 
start || 0;\n      start = 0;\n    }\n    step = arguments[2] || 1;\n\n    var 
len = Math.max(Math.ceil((stop - start) / step), 0);\n    var idx = 0;\n    var 
range = new Array(len);\n\n    while(idx < len) {\n      range[idx++] = 
start;\n      start += step;\n    }\n\n    return range;\n  };\n\n  // Function 
(ahem) Functions\n  // ------------------\n\n  // Reusable constructor function 
for prototype setting.\n
   var ctor = function(){};\n\n  // Create a function bound to a given object 
(assigning `this`, and arguments,\n  // optionally). Binding with arguments is 
also known as `curry`.\n  // Delegates to **ECMAScript 5**'s native 
`Function.bind` if available.\n  // We check for `func.bind` first, to fail 
fast when `func` is undefined.\n  _.bind = function bind(func, context) {\n    
var bound, args;\n    if (func.bind === nativeBind && nativeBind) return 
nativeBind.apply(func, slice.call(arguments, 1));\n    if (!_.isFunction(func)) 
throw new TypeError;\n    args = slice.call(arguments, 2);\n    return bound = 
function() {\n      if (!(this instanceof bound)) return func.apply(context, 
args.concat(slice.call(arguments)));\n      ctor.prototype = func.prototype;\n  
    var self = new ctor;\n      var result = func.apply(self, 
args.concat(slice.call(arguments)));\n      if (Object(result) === result) 
return result;\n      return self;\n    };\n  };\n\n  // Bind all of an 
object's methods to 
 that object. Useful for ensuring that\n  // all callbacks defined on an object 
belong to it.\n  _.bindAll = function(obj) {\n    var funcs = 
slice.call(arguments, 1);\n    if (funcs.length == 0) funcs = 
_.functions(obj);\n    each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); 
});\n    return obj;\n  };\n\n  // Memoize an expensive function by storing its 
results.\n  _.memoize = function(func, hasher) {\n    var memo = {};\n    
hasher || (hasher = _.identity);\n    return function() {\n      var key = 
hasher.apply(this, arguments);\n      return _.has(memo, key) ? memo[key] : 
(memo[key] = func.apply(this, arguments));\n    };\n  };\n\n  // Delays a 
function for the given number of milliseconds, and then calls\n  // it with the 
arguments supplied.\n  _.delay = function(func, wait) {\n    var args = 
slice.call(arguments, 2);\n    return setTimeout(function(){ return 
func.apply(func, args); }, wait);\n  };\n\n  // Defers a function, scheduling 
it to run after the current call stack
  has\n  // cleared.\n  _.defer = function(func) {\n    return _.delay.apply(_, 
[func, 1].concat(slice.call(arguments, 1)));\n  };\n\n  // Returns a function, 
that, when invoked, will only be triggered at most once\n  // during a given 
window of time.\n  _.throttle = function(func, wait) {\n    var context, args, 
timeout, throttling, more;\n    var whenDone = _.debounce(function(){ more = 
throttling = false; }, wait);\n    return function() {\n      context = this; 
args = arguments;\n      var later = function() {\n        timeout = null;\n    
    if (more) func.apply(context, args);\n        whenDone();\n      };\n      
if (!timeout) timeout = setTimeout(later, wait);\n      if (throttling) {\n     
   more = true;\n      } else {\n        func.apply(context, args);\n      }\n  
    whenDone();\n      throttling = true;\n    };\n  };\n\n  // Returns a 
function, that, as long as it continues to be invoked, will not\n  // be 
triggered. The function will be called after it stops being ca
 lled for\n  // N milliseconds.\n  _.debounce = function(func, wait) {\n    var 
timeout;\n    return function() {\n      var context = this, args = 
arguments;\n      var later = function() {\n        timeout = null;\n        
func.apply(context, args);\n      };\n      clearTimeout(timeout);\n      
timeout = setTimeout(later, wait);\n    };\n  };\n\n  // Returns a function 
that will be executed at most one time, no matter how\n  // often you call it. 
Useful for lazy initialization.\n  _.once = function(func) {\n    var ran = 
false, memo;\n    return function() {\n      if (ran) return memo;\n      ran = 
true;\n      return memo = func.apply(this, arguments);\n    };\n  };\n\n  // 
Returns the first function passed as an argument to the second,\n  // allowing 
you to adjust arguments, run code before and after, and\n  // conditionally 
execute the original function.\n  _.wrap = function(func, wrapper) {\n    
return function() {\n      var args = [func].concat(slice.call(arguments, 
0));\n 
      return wrapper.apply(this, args);\n    };\n  };\n\n  // Returns a 
function that is the composition of a list of functions, each\n  // consuming 
the return value of the function that follows.\n  _.compose = function() {\n    
var funcs = arguments;\n    return function() {\n      var args = arguments;\n  
    for (var i = funcs.length - 1; i >= 0; i--) {\n        args = 
[funcs[i].apply(this, args)];\n      }\n      return args[0];\n    };\n  };\n\n 
 // Returns a function that will only be executed after being called N times.\n 
 _.after = function(times, func) {\n    if (times <= 0) return func();\n    
return function() {\n      if (--times < 1) { return func.apply(this, 
arguments); }\n    };\n  };\n\n  // Object Functions\n  // ----------------\n\n 
 // Retrieve the names of an object's properties.\n  // Delegates to 
**ECMAScript 5**'s native `Object.keys`\n  _.keys = nativeKeys || function(obj) 
{\n    if (obj !== Object(obj)) throw new TypeError('Invalid object');\n    var 
keys = 
 [];\n    for (var key in obj) if (_.has(obj, key)) keys[keys.length] = key;\n  
  return keys;\n  };\n\n  // Retrieve the values of an object's properties.\n  
_.values = function(obj) {\n    return _.map(obj, _.identity);\n  };\n\n  // 
Return a sorted list of the function names available on the object.\n  // 
Aliased as `methods`\n  _.functions = _.methods = function(obj) {\n    var 
names = [];\n    for (var key in obj) {\n      if (_.isFunction(obj[key])) 
names.push(key);\n    }\n    return names.sort();\n  };\n\n  // Extend a given 
object with all the properties in passed-in object(s).\n  _.extend = 
function(obj) {\n    each(slice.call(arguments, 1), function(source) {\n      
for (var prop in source) {\n        obj[prop] = source[prop];\n      }\n    
});\n    return obj;\n  };\n\n  // Fill in a given object with default 
properties.\n  _.defaults = function(obj) {\n    each(slice.call(arguments, 1), 
function(source) {\n      for (var prop in source) {\n        if (obj[prop] == 
null) 
 obj[prop] = source[prop];\n      }\n    });\n    return obj;\n  };\n\n  // 
Create a (shallow-cloned) duplicate of an object.\n  _.clone = function(obj) 
{\n    if (!_.isObject(obj)) return obj;\n    return _.isArray(obj) ? 
obj.slice() : _.extend({}, obj);\n  };\n\n  // Invokes interceptor with the 
obj, and then returns obj.\n  // The primary purpose of this method is to \"tap 
into\" a method chain, in\n  // order to perform operations on intermediate 
results within the chain.\n  _.tap = function(obj, interceptor) {\n    
interceptor(obj);\n    return obj;\n  };\n\n  // Internal recursive comparison 
function.\n  function eq(a, b, stack) {\n    // Identical objects are equal. `0 
=== -0`, but they aren't identical.\n    // See the Harmony `egal` proposal: 
http://wiki.ecmascript.org/doku.php?id=harmony:egal.\n    if (a === b) return a 
!== 0 || 1 / a == 1 / b;\n    // A strict comparison is necessary because `null 
== undefined`.\n    if (a == null || b == null) return a === b;\n    // Unwr
 ap any wrapped objects.\n    if (a._chain) a = a._wrapped;\n    if (b._chain) 
b = b._wrapped;\n    // Invoke a custom `isEqual` method if one is provided.\n  
  if (a.isEqual && _.isFunction(a.isEqual)) return a.isEqual(b);\n    if 
(b.isEqual && _.isFunction(b.isEqual)) return b.isEqual(a);\n    // Compare 
`[[Class]]` names.\n    var className = toString.call(a);\n    if (className != 
toString.call(b)) return false;\n    switch (className) {\n      // Strings, 
numbers, dates, and booleans are compared by value.\n      case '[object 
String]':\n        // Primitives and their corresponding object wrappers are 
equivalent; thus, `\"5\"` is\n        // equivalent to `new String(\"5\")`.\n   
     return a == String(b);\n      case '[object Number]':\n        // `NaN`s 
are equivalent, but non-reflexive. An `egal` comparison is performed for\n      
  // other numeric values.\n        return a != +a ? b != +b : (a == 0 ? 1 / a 
== 1 / b : a == +b);\n      case '[object Date]':\n      case '[ob
 ject Boolean]':\n        // Coerce dates and booleans to numeric primitive 
values. Dates are compared by their\n        // millisecond representations. 
Note that invalid dates with millisecond representations\n        // of `NaN` 
are not equivalent.\n        return +a == +b;\n      // RegExps are compared by 
their source patterns and flags.\n      case '[object RegExp]':\n        return 
a.source == b.source &&\n               a.global == b.global &&\n               
a.multiline == b.multiline &&\n               a.ignoreCase == b.ignoreCase;\n   
 }\n    if (typeof a != 'object' || typeof b != 'object') return false;\n    // 
Assume equality for cyclic structures. The algorithm for detecting cyclic\n    
// structures is adapted from ES 5.1 section 15.12.3, abstract operation 
`JO`.\n    var length = stack.length;\n    while (length--) {\n      // Linear 
search. Performance is inversely proportional to the number of\n      // unique 
nested structures.\n      if (stack[length] == a) return
  true;\n    }\n    // Add the first object to the stack of traversed 
objects.\n    stack.push(a);\n    var size = 0, result = true;\n    // 
Recursively compare objects and arrays.\n    if (className == '[object Array]') 
{\n      // Compare array lengths to determine if a deep comparison is 
necessary.\n      size = a.length;\n      result = size == b.length;\n      if 
(result) {\n        // Deep compare the contents, ignoring non-numeric 
properties.\n        while (size--) {\n          // Ensure commutative equality 
for sparse arrays.\n          if (!(result = size in a == size in b && 
eq(a[size], b[size], stack))) break;\n        }\n      }\n    } else {\n      
// Objects with different constructors are not equivalent.\n      if 
('constructor' in a != 'constructor' in b || a.constructor != b.constructor) 
return false;\n      // Deep compare objects.\n      for (var key in a) {\n     
   if (_.has(a, key)) {\n          // Count the expected number of 
properties.\n          size++;\n  
         // Deep compare each member.\n          if (!(result = _.has(b, key) 
&& eq(a[key], b[key], stack))) break;\n        }\n      }\n      // Ensure that 
both objects contain the same number of properties.\n      if (result) {\n      
  for (key in b) {\n          if (_.has(b, key) && !(size--)) break;\n        
}\n        result = !size;\n      }\n    }\n    // Remove the first object from 
the stack of traversed objects.\n    stack.pop();\n    return result;\n  }\n\n  
// Perform a deep comparison to check if two objects are equal.\n  _.isEqual = 
function(a, b) {\n    return eq(a, b, []);\n  };\n\n  // Is a given array, 
string, or object empty?\n  // An \"empty\" object has no enumerable 
own-properties.\n  _.isEmpty = function(obj) {\n    if (_.isArray(obj) || 
_.isString(obj)) return obj.length === 0;\n    for (var key in obj) if 
(_.has(obj, key)) return false;\n    return true;\n  };\n\n  // Is a given 
value a DOM element?\n  _.isElement = function(obj) {\n    return !!(obj && obj
 .nodeType == 1);\n  };\n\n  // Is a given value an array?\n  // Delegates to 
ECMA5's native Array.isArray\n  _.isArray = nativeIsArray || function(obj) {\n  
  return toString.call(obj) == '[object Array]';\n  };\n\n  // Is a given 
variable an object?\n  _.isObject = function(obj) {\n    return obj === 
Object(obj);\n  };\n\n  // Is a given variable an arguments object?\n  
_.isArguments = function(obj) {\n    return toString.call(obj) == '[object 
Arguments]';\n  };\n  if (!_.isArguments(arguments)) {\n    _.isArguments = 
function(obj) {\n      return !!(obj && _.has(obj, 'callee'));\n    };\n  }\n\n 
 // Is a given value a function?\n  _.isFunction = function(obj) {\n    return 
toString.call(obj) == '[object Function]';\n  };\n\n  // Is a given value a 
string?\n  _.isString = function(obj) {\n    return toString.call(obj) == 
'[object String]';\n  };\n\n  // Is a given value a number?\n  _.isNumber = 
function(obj) {\n    return toString.call(obj) == '[object Number]';\n  };\n\n  
// Is t
 he given value `NaN`?\n  _.isNaN = function(obj) {\n    // `NaN` is the only 
value for which `===` is not reflexive.\n    return obj !== obj;\n  };\n\n  // 
Is a given value a boolean?\n  _.isBoolean = function(obj) {\n    return obj 
=== true || obj === false || toString.call(obj) == '[object Boolean]';\n  
};\n\n  // Is a given value a date?\n  _.isDate = function(obj) {\n    return 
toString.call(obj) == '[object Date]';\n  };\n\n  // Is the given value a 
regular expression?\n  _.isRegExp = function(obj) {\n    return 
toString.call(obj) == '[object RegExp]';\n  };\n\n  // Is a given value equal 
to null?\n  _.isNull = function(obj) {\n    return obj === null;\n  };\n\n  // 
Is a given variable undefined?\n  _.isUndefined = function(obj) {\n    return 
obj === void 0;\n  };\n\n  // Has own property?\n  _.has = function(obj, key) 
{\n    return hasOwnProperty.call(obj, key);\n  };\n\n  // Utility Functions\n  
// -----------------\n\n  // Run Underscore.js in *noConflict* mode, returning 
th
 e `_` variable to its\n  // previous owner. Returns a reference to the 
Underscore object.\n  _.noConflict = function() {\n    root._ = 
previousUnderscore;\n    return this;\n  };\n\n  // Keep the identity function 
around for default iterators.\n  _.identity = function(value) {\n    return 
value;\n  };\n\n  // Run a function **n** times.\n  _.times = function (n, 
iterator, context) {\n    for (var i = 0; i < n; i++) iterator.call(context, 
i);\n  };\n\n  // Escape a string for HTML interpolation.\n  _.escape = 
function(string) {\n    return (''+string).replace(/&/g, '&amp;').replace(/</g, 
'&lt;').replace(/>/g, '&gt;').replace(/\"/g, '&quot;').replace(/'/g, 
'&#x27;').replace(/\\//g,'&#x2F;');\n  };\n\n  // Add your own custom functions 
to the Underscore object, ensuring that\n  // they're correctly added to the 
OOP wrapper as well.\n  _.mixin = function(obj) {\n    each(_.functions(obj), 
function(name){\n      addToWrapper(name, _[name] = obj[name]);\n    });\n  
};\n\n  // Generate a u
 nique integer id (unique within the entire client session).\n  // Useful for 
temporary DOM ids.\n  var idCounter = 0;\n  _.uniqueId = function(prefix) {\n   
 var id = idCounter++;\n    return prefix ? prefix + id : id;\n  };\n\n  // By 
default, Underscore uses ERB-style template delimiters, change the\n  // 
following template settings to use alternative delimiters.\n  
_.templateSettings = {\n    evaluate    : /<%([\\s\\S]+?)%>/g,\n    interpolate 
: /<%=([\\s\\S]+?)%>/g,\n    escape      : /<%-([\\s\\S]+?)%>/g\n  };\n\n  // 
When customizing `templateSettings`, if you don't want to define an\n  // 
interpolation, evaluation or escaping regex, we need one that is\n  // 
guaranteed not to match.\n  var noMatch = /.^/;\n\n  // Within an 
interpolation, evaluation, or escaping, remove HTML escaping\n  // that had 
been previously added.\n  var unescape = function(code) {\n    return 
code.replace(/\\\\\\\\/g, '\\\\').replace(/\\\\'/g, \"'\");\n  };\n\n  // 
JavaScript micro-templating, similar 
 to John Resig's implementation.\n  // Underscore templating handles arbitrary 
delimiters, preserves whitespace,\n  // and correctly escapes quotes within 
interpolated code.\n  _.template = function(str, data) {\n    var c  = 
_.templateSettings;\n    var tmpl = 'var 
__p=[],print=function(){__p.push.apply(__p,arguments);};' +\n      
'with(obj||{}){__p.push(\\'' +\n      str.replace(/\\\\/g, '\\\\\\\\')\n        
 .replace(/'/g, \"\\\\'\")\n         .replace(c.escape || noMatch, 
function(match, code) {\n           return \"',_.escape(\" + unescape(code) + 
\"),'\";\n         })\n         .replace(c.interpolate || noMatch, 
function(match, code) {\n           return \"',\" + unescape(code) + \",'\";\n  
       })\n         .replace(c.evaluate || noMatch, function(match, code) {\n   
        return \"');\" + unescape(code).replace(/[\\r\\n\\t]/g, ' ') + 
\";__p.push('\";\n         })\n         .replace(/\\r/g, '\\\\r')\n         
.replace(/\\n/g, '\\\\n')\n         .replace(/\\t/g, '\\\\t')\n  
        + \"');}return __p.join('');\";\n    var func = new Function('obj', 
'_', tmpl);\n    if (data) return func(data, _);\n    return function(data) {\n 
     return func.call(this, data, _);\n    };\n  };\n\n  // Add a \"chain\" 
function, which will delegate to the wrapper.\n  _.chain = function(obj) {\n    
return _(obj).chain();\n  };\n\n  // The OOP Wrapper\n  // ---------------\n\n  
// If Underscore is called as a function, it returns a wrapped object that\n  
// can be used OO-style. This wrapper holds altered versions of all the\n  // 
underscore functions. Wrapped objects may be chained.\n  var wrapper = 
function(obj) { this._wrapped = obj; };\n\n  // Expose `wrapper.prototype` as 
`_.prototype`\n  _.prototype = wrapper.prototype;\n\n  // Helper function to 
continue chaining intermediate results.\n  var result = function(obj, chain) 
{\n    return chain ? _(obj).chain() : obj;\n  };\n\n  // A method to easily 
add functions to the OOP wrapper.\n  var addToWrapper = function(name,
  func) {\n    wrapper.prototype[name] = function() {\n      var args = 
slice.call(arguments);\n      unshift.call(args, this._wrapped);\n      return 
result(func.apply(_, args), this._chain);\n    };\n  };\n\n  // Add all of the 
Underscore functions to the wrapper object.\n  _.mixin(_);\n\n  // Add all 
mutator Array functions to the wrapper.\n  each(['pop', 'push', 'reverse', 
'shift', 'sort', 'splice', 'unshift'], function(name) {\n    var method = 
ArrayProto[name];\n    wrapper.prototype[name] = function() {\n      var 
wrapped = this._wrapped;\n      method.apply(wrapped, arguments);\n      var 
length = wrapped.length;\n      if ((name == 'shift' || name == 'splice') && 
length === 0) delete wrapped[0];\n      return result(wrapped, this._chain);\n  
  };\n  });\n\n  // Add all accessor Array functions to the wrapper.\n  
each(['concat', 'join', 'slice'], function(name) {\n    var method = 
ArrayProto[name];\n    wrapper.prototype[name] = function() {\n      return 
result(method.apply(
 this._wrapped, arguments), this._chain);\n    };\n  });\n\n  // Start chaining 
a wrapped Underscore object.\n  wrapper.prototype.chain = function() {\n    
this._chain = true;\n    return this;\n  };\n\n  // Extracts the result from a 
wrapped and chained object.\n  wrapper.prototype.value = function() {\n    
return this._wrapped;\n  };\n\n}).call(this);\n">>},
+      {<<"async">>,
+       <<"/*global setTimeout: false, console: false */\n(function () {\n\n    
var async = {};\n\n    // global on the server, window in the browser\n    var 
root = this,\n        previous_async = root.async;\n\n    if (typeof module !== 
'undefined' && module.exports) {\n        module.exports = async;\n    }\n    
else {\n        root.async = async;\n    }\n\n    async.noConflict = function 
() {\n        root.async = previous_async;\n        return async;\n    };\n\n   
 //// cross-browser compatiblity functions ////\n\n    var _forEach = function 
(arr, iterator) {\n        if (arr.forEach) {\n            return 
arr.forEach(iterator);\n        }\n        for (var i = 0; i < arr.length; i += 
1) {\n            iterator(arr[i], i, arr);\n        }\n    };\n\n    var _map 
= function (arr, iterator) {\n        if (arr.map) {\n            return 
arr.map(iterator);\n        }\n        var results = [];\n        _forEach(arr, 
function (x, i, a) {\n            results.push(iterator(x, i, a));
 \n        });\n        return results;\n    };\n\n    var _reduce = function 
(arr, iterator, memo) {\n        if (arr.reduce) {\n            return 
arr.reduce(iterator, memo);\n        }\n        _forEach(arr, function (x, i, 
a) {\n            memo = iterator(memo, x, i, a);\n        });\n        return 
memo;\n    };\n\n    var _keys = function (obj) {\n        if (Object.keys) {\n 
           return Object.keys(obj);\n        }\n        var keys = [];\n        
for (var k in obj) {\n            if (obj.hasOwnProperty(k)) {\n                
keys.push(k);\n            }\n        }\n        return keys;\n    };\n\n    
var _indexOf = function (arr, item) {\n        if (arr.indexOf) {\n            
return arr.indexOf(item);\n        }\n        for (var i = 0; i < arr.length; i 
+= 1) {\n            if (arr[i] === item) {\n                return i;\n        
    }\n        }\n        return -1;\n    };\n\n    //// exported async module 
functions ////\n\n    //// nextTick implementation with b
 rowser-compatible fallback ////\n    if (typeof process === 'undefined' || 
!(process.nextTick)) {\n        async.nextTick = function (fn) {\n            
setTimeout(fn, 0);\n        };\n    }\n    else {\n        async.nextTick = 
process.nextTick;\n    }\n\n    async.forEach = function (arr, iterator, 
callback) {\n        if (!arr.length) {\n            return callback();\n       
 }\n        var completed = 0;\n        _forEach(arr, function (x) {\n          
  iterator(x, function (err) {\n                if (err) {\n                    
callback(err);\n                    callback = function () {};\n                
}\n                else {\n                    completed += 1;\n                
    if (completed === arr.length) {\n                        callback();\n      
              }\n                }\n            });\n        });\n    };\n\n    
async.forEachSeries = function (arr, iterator, callback) {\n        if 
(!arr.length) {\n            return callback();\n        }\n    
     var completed = 0;\n        var iterate = function () {\n            
iterator(arr[completed], function (err) {\n                if (err) {\n         
           callback(err);\n                    callback = function () {};\n     
           }\n                else {\n                    completed += 1;\n     
               if (completed === arr.length) {\n                        
callback();\n                    }\n                    else {\n                
        iterate();\n                    }\n                }\n            });\n 
       };\n        iterate();\n    };\n    \n    async.forEachLimit = function 
(arr, limit, iterator, callback) {\n        if (!arr.length || limit <= 0) {\n  
          return callback(); \n        }\n        var completed = 0;\n        
var started = 0;\n        var running = 0;\n        \n        (function 
replenish () {\n          if (completed === arr.length) {\n              return 
callback();\n          }\n          \n          while (running 
 < limit && started < arr.length) {\n            iterator(arr[started], 
function (err) {\n              if (err) {\n                  callback(err);\n  
                callback = function () {};\n              }\n              else 
{\n                  completed += 1;\n                  running -= 1;\n         
         if (completed === arr.length) {\n                      callback();\n   
               }\n                  else {\n                      
replenish();\n                  }\n              }\n            });\n           
 started += 1;\n            running += 1;\n          }\n        })();\n    
};\n\n\n    var doParallel = function (fn) {\n        return function () {\n    
        var args = Array.prototype.slice.call(arguments);\n            return 
fn.apply(null, [async.forEach].concat(args));\n        };\n    };\n    var 
doSeries = function (fn) {\n        return function () {\n            var args 
= Array.prototype.slice.call(arguments);\n            return fn.apply(nul
 l, [async.forEachSeries].concat(args));\n        };\n    };\n\n\n    var 
_asyncMap = function (eachfn, arr, iterator, callback) {\n        var results = 
[];\n        arr = _map(arr, function (x, i) {\n            return {index: i, 
value: x};\n        });\n        eachfn(arr, function (x, callback) {\n         
   iterator(x.value, function (err, v) {\n                results[x.index] = 
v;\n                callback(err);\n            });\n        }, function (err) 
{\n            callback(err, results);\n        });\n    };\n    async.map = 
doParallel(_asyncMap);\n    async.mapSeries = doSeries(_asyncMap);\n\n\n    // 
reduce only has a series version, as doing reduce in parallel won't\n    // 
work in many situations.\n    async.reduce = function (arr, memo, iterator, 
callback) {\n        async.forEachSeries(arr, function (x, callback) {\n        
    iterator(memo, x, function (err, v) {\n                memo = v;\n          
      callback(err);\n            });\n        }, function (er
 r) {\n            callback(err, memo);\n        });\n    };\n    // inject 
alias\n    async.inject = async.reduce;\n    // foldl alias\n    async.foldl = 
async.reduce;\n\n    async.reduceRight = function (arr, memo, iterator, 
callback) {\n        var reversed = _map(arr, function (x) {\n            
return x;\n        }).reverse();\n        async.reduce(reversed, memo, 
iterator, callback);\n    };\n    // foldr alias\n    async.foldr = 
async.reduceRight;\n\n    var _filter = function (eachfn, arr, iterator, 
callback) {\n        var results = [];\n        arr = _map(arr, function (x, i) 
{\n            return {index: i, value: x};\n        });\n        eachfn(arr, 
function (x, callback) {\n            iterator(x.value, function (v) {\n        
        if (v) {\n                    results.push(x);\n                }\n     
           callback();\n            });\n        }, function (err) {\n          
  callback(_map(results.sort(function (a, b) {\n                return a.index 
- b.inde
 x;\n            }), function (x) {\n                return x.value;\n          
  }));\n        });\n    };\n    async.filter = doParallel(_filter);\n    
async.filterSeries = doSeries(_filter);\n    // select alias\n    async.select 
= async.filter;\n    async.selectSeries = async.filterSeries;\n\n    var 
_reject = function (eachfn, arr, iterator, callback) {\n        var results = 
[];\n        arr = _map(arr, function (x, i) {\n            return {index: i, 
value: x};\n        });\n        eachfn(arr, function (x, callback) {\n         
   iterator(x.value, function (v) {\n                if (!v) {\n                
    results.push(x);\n                }\n                callback();\n          
  });\n        }, function (err) {\n            
callback(_map(results.sort(function (a, b) {\n                return a.index - 
b.index;\n            }), function (x) {\n                return x.value;\n     
       }));\n        });\n    };\n    async.reject = doParallel(_reject);\n    
async.reje
 ctSeries = doSeries(_reject);\n\n    var _detect = function (eachfn, arr, 
iterator, main_callback) {\n        eachfn(arr, function (x, callback) {\n      
      iterator(x, function (result) {\n                if (result) {\n          
          main_callback(x);\n                    main_callback = function () 
{};\n                }\n                else {\n                    
callback();\n                }\n            });\n        }, function (err) {\n  
          main_callback();\n        });\n    };\n    async.detect = 
doParallel(_detect);\n    async.detectSeries = doSeries(_detect);\n\n    
async.some = function (arr, iterator, main_callback) {\n        
async.forEach(arr, function (x, callback) {\n            iterator(x, function 
(v) {\n                if (v) {\n                    main_callback(true);\n     
               main_callback = function () {};\n                }\n             
   callback();\n            });\n        }, function (err) {\n            
main_callback(false);
 \n        });\n    };\n    // any alias\n    async.any = async.some;\n\n    
async.every = function (arr, iterator, main_callback) {\n        
async.forEach(arr, function (x, callback) {\n            iterator(x, function 
(v) {\n                if (!v) {\n                    main_callback(false);\n   
                 main_callback = function () {};\n                }\n           
     callback();\n            });\n        }, function (err) {\n            
main_callback(true);\n        });\n    };\n    // all alias\n    async.all = 
async.every;\n\n    async.sortBy = function (arr, iterator, callback) {\n       
 async.map(arr, function (x, callback) {\n            iterator(x, function 
(err, criteria) {\n                if (err) {\n                    
callback(err);\n                }\n                else {\n                    
callback(null, {value: x, criteria: criteria});\n                }\n            
});\n        }, function (err, results) {\n            if (err) {\n             
   r
 eturn callback(err);\n            }\n            else {\n                var 
fn = function (left, right) {\n                    var a = left.criteria, b = 
right.criteria;\n                    return a < b ? -1 : a > b ? 1 : 0;\n       
         };\n                callback(null, _map(results.sort(fn), function (x) 
{\n                    return x.value;\n                }));\n            }\n   
     });\n    };\n\n    async.auto = function (tasks, callback) {\n        
callback = callback || function () {};\n        var keys = _keys(tasks);\n      
  if (!keys.length) {\n            return callback(null);\n        }\n\n        
var results = {};\n\n        var listeners = [];\n        var addListener = 
function (fn) {\n            listeners.unshift(fn);\n        };\n        var 
removeListener = function (fn) {\n            for (var i = 0; i < 
listeners.length; i += 1) {\n                if (listeners[i] === fn) {\n       
             listeners.splice(i, 1);\n                    return;\n 
                }\n            }\n        };\n        var taskComplete = 
function () {\n            _forEach(listeners, function (fn) {\n                
fn();\n            });\n        };\n\n        addListener(function () {\n       
     if (_keys(results).length === keys.length) {\n                
callback(null, results);\n            }\n        });\n\n        _forEach(keys, 
function (k) {\n            var task = (tasks[k] instanceof Function) ? 
[tasks[k]]: tasks[k];\n            var taskCallback = function (err) {\n        
        if (err) {\n                    callback(err);\n                    // 
stop subsequent errors hitting callback multiple times\n                    
callback = function () {};\n                }\n                else {\n         
           var args = Array.prototype.slice.call(arguments, 1);\n               
     if (args.length <= 1) {\n                        args = args[0];\n         
           }\n                    results[k] = args;\n                  
   taskComplete();\n                }\n            };\n            var requires 
= task.slice(0, Math.abs(task.length - 1)) || [];\n            var ready = 
function () {\n                return _reduce(requires, function (a, x) {\n     
               return (a && results.hasOwnProperty(x));\n                }, 
true);\n            };\n            if (ready()) {\n                
task[task.length - 1](taskCallback, results);\n            }\n            else 
{\n                var listener = function () {\n                    if 
(ready()) {\n                        removeListener(listener);\n                
        task[task.length - 1](taskCallback, results);\n                    }\n  
              };\n                addListener(listener);\n            }\n       
 });\n    };\n\n    async.waterfall = function (tasks, callback) {\n        if 
(!tasks.length) {\n            return callback();\n        }\n        callback 
= callback || function () {};\n        var wrapIterator = function (it
 erator) {\n            return function (err) {\n                if (err) {\n   
                 callback(err);\n                    callback = function () 
{};\n                }\n                else {\n                    var args = 
Array.prototype.slice.call(arguments, 1);\n                    var next = 
iterator.next();\n                    if (next) {\n                        
args.push(wrapIterator(next));\n                    }\n                    else 
{\n                        args.push(callback);\n                    }\n        
            async.nextTick(function () {\n                        
iterator.apply(null, args);\n                    });\n                }\n       
     };\n        };\n        wrapIterator(async.iterator(tasks))();\n    };\n\n 
   async.parallel = function (tasks, callback) {\n        callback = callback 
|| function () {};\n        if (tasks.constructor === Array) {\n            
async.map(tasks, function (fn, callback) {\n                if (fn) {\n   
                  fn(function (err) {\n                        var args = 
Array.prototype.slice.call(arguments, 1);\n                        if 
(args.length <= 1) {\n                            args = args[0];\n             
           }\n                        callback.call(null, err, args);\n         
           });\n                }\n            }, callback);\n        }\n       
 else {\n            var results = {};\n            async.forEach(_keys(tasks), 
function (k, callback) {\n                tasks[k](function (err) {\n           
         var args = Array.prototype.slice.call(arguments, 1);\n                 
   if (args.length <= 1) {\n                        args = args[0];\n           
         }\n                    results[k] = args;\n                    
callback(err);\n                });\n            }, function (err) {\n          
      callback(err, results);\n            });\n        }\n    };\n\n    
async.series = function (tasks, callback) {\n        callback = callb
 ack || function () {};\n        if (tasks.constructor === Array) {\n           
 async.mapSeries(tasks, function (fn, callback) {\n                if (fn) {\n  
                  fn(function (err) {\n                        var args = 
Array.prototype.slice.call(arguments, 1);\n                        if 
(args.length <= 1) {\n                            args = args[0];\n             
           }\n                        callback.call(null, err, args);\n         
           });\n                }\n            }, callback);\n        }\n       
 else {\n            var results = {};\n            
async.forEachSeries(_keys(tasks), function (k, callback) {\n                
tasks[k](function (err) {\n                    var args = 
Array.prototype.slice.call(arguments, 1);\n                    if (args.length 
<= 1) {\n                        args = args[0];\n                    }\n       
             results[k] = args;\n                    callback(err);\n           
     });\n            }, func
 tion (err) {\n                callback(err, results);\n            });\n       
 }\n    };\n\n    async.iterator = function (tasks) {\n        var makeCallback 
= function (index) {\n            var fn = function () {\n                if 
(tasks.length) {\n                    tasks[index].apply(null, arguments);\n    
            }\n                return fn.next();\n            };\n            
fn.next = function () {\n                return (index < tasks.length - 1) ? 
makeCallback(index + 1): null;\n            };\n            return fn;\n        
};\n        return makeCallback(0);\n    };\n\n    async.apply = function (fn) 
{\n        var args = Array.prototype.slice.call(arguments, 1);\n        return 
function () {\n            return fn.apply(\n                null, 
args.concat(Array.prototype.slice.call(arguments))\n            );\n        
};\n    };\n\n    var _concat = function (eachfn, arr, fn, callback) {\n        
var r = [];\n        eachfn(arr, function (x, cb) {\n           
  fn(x, function (err, y) {\n                r = r.concat(y || []);\n           
     cb(err);\n            });\n        }, function (err) {\n            
callback(err, r);\n        });\n    };\n    async.concat = 
doParallel(_concat);\n    async.concatSeries = doSeries(_concat);\n\n    
async.whilst = function (test, iterator, callback) {\n        if (test()) {\n   
         iterator(function (err) {\n                if (err) {\n                
    return callback(err);\n                }\n                
async.whilst(test, iterator, callback);\n            });\n        }\n        
else {\n            callback();\n        }\n    };\n\n    async.until = 
function (test, iterator, callback) {\n        if (!test()) {\n            
iterator(function (err) {\n                if (err) {\n                    
return callback(err);\n                }\n                async.until(test, 
iterator, callback);\n            });\n        }\n        else {\n            
callback();\n        }\n    };\n\n    
 async.queue = function (worker, concurrency) {\n        var workers = 0;\n     
   var q = {\n            tasks: [],\n            concurrency: concurrency,\n   
         saturated: null,\n            empty: null,\n            drain: null,\n 
           push: function (data, callback) {\n                
q.tasks.push({data: data, callback: callback});\n                if(q.saturated 
&& q.tasks.length == concurrency) q.saturated();\n                
async.nextTick(q.process);\n            },\n            process: function () 
{\n                if (workers < q.concurrency && q.tasks.length) {\n           
         var task = q.tasks.shift();\n                    if(q.empty && 
q.tasks.length == 0) q.empty();\n                    workers += 1;\n            
        worker(task.data, function () {\n                        workers -= 
1;\n                        if (task.callback) {\n                            
task.callback.apply(task, arguments);\n                        }\n              
       
    if(q.drain && q.tasks.length + workers == 0) q.drain();\n                   
     q.process();\n                    });\n                }\n            },\n 
           length: function () {\n                return q.tasks.length;\n      
      },\n            running: function () {\n                return workers;\n 
           }\n        };\n        return q;\n    };\n\n    var _console_fn = 
function (name) {\n        return function (fn) {\n            var args = 
Array.prototype.slice.call(arguments, 1);\n            fn.apply(null, 
args.concat([function (err) {\n                var args = 
Array.prototype.slice.call(arguments, 1);\n                if (typeof console 
!== 'undefined') {\n                    if (err) {\n                        if 
(console.error) {\n                            console.error(err);\n            
            }\n                    }\n                    else if 
(console[name]) {\n                        _forEach(args, function (x) {\n      
                
       console[name](x);\n                        });\n                    }\n  
              }\n            }]));\n        };\n    };\n    async.log = 
_console_fn('log');\n    async.dir = _console_fn('dir');\n    /*async.info = 
_console_fn('info');\n    async.warn = _console_fn('warn');\n    async.error = 
_console_fn('error');*/\n\n    async.memoize = function (fn, hasher) {\n        
var memo = {};\n        var queues = {};\n        hasher = hasher || function 
(x) {\n            return x;\n        };\n        var memoized = function () 
{\n            var args = Array.prototype.slice.call(arguments);\n            
var callback = args.pop();\n            var key = hasher.apply(null, args);\n   
         if (key in memo) {\n                callback.apply(null, memo[key]);\n 
           }\n            else if (key in queues) {\n                
queues[key].push(callback);\n            }\n            else {\n                
queues[key] = [callback];\n                fn.apply(null, args.conca
 t([function () {\n                    memo[key] = arguments;\n                 
   var q = queues[key];\n                    delete queues[key];\n              
      for (var i = 0, l = q.length; i < l; i++) {\n                      
q[i].apply(null, arguments);\n                    }\n                }]));\n    
        }\n        };\n        memoized.unmemoized = fn;\n        return 
memoized;\n    };\n\n    async.unmemoize = function (fn) {\n      return 
function () {\n        return (fn.unmemoized || fn).apply(null, arguments);\n   
   }\n    };\n\n}());\n">>},
+      {<<"handlebars">>,
+       
<<47,47,32,108,105,98,47,104,97,110,100,108,101,98,97,114,115,47,98,97,115,
+         
101,46,106,115,10,118,97,114,32,72,97,110,100,108,101,98,97,114,115,32,
+         
61,32,123,125,59,10,10,72,97,110,100,108,101,98,97,114,115,46,86,69,82,
+         
83,73,79,78,32,61,32,34,49,46,48,46,98,101,116,97,46,50,34,59,10,10,72,
+         
97,110,100,108,101,98,97,114,115,46,104,101,108,112,101,114,115,32,32,61,
+         
32,123,125,59,10,72,97,110,100,108,101,98,97,114,115,46,112,97,114,116,
+         
105,97,108,115,32,61,32,123,125,59,10,10,72,97,110,100,108,101,98,97,114,
+         
115,46,114,101,103,105,115,116,101,114,72,101,108,112,101,114,32,61,32,
+         
102,117,110,99,116,105,111,110,40,110,97,109,101,44,32,102,110,44,32,105,
+         110,118,101,114,115,101,41,32,123,10,32,32,105,102,40,105,110,118,101,
+         
114,115,101,41,32,123,32,102,110,46,110,111,116,32,61,32,105,110,118,101,
+         114,115,101,59,32,125,10,32,32,116,104,105,115,46,104,101,108,112,101,
+         
114,115,91,110,97,109,101,93,32,61,32,102,110,59,10,125,59,10,10,72,97,
+         
110,100,108,101,98,97,114,115,46,114,101,103,105,115,116,101,114,80,97,
+         
114,116,105,97,108,32,61,32,102,117,110,99,116,105,111,110,40,110,97,109,
+         
101,44,32,115,116,114,41,32,123,10,32,32,116,104,105,115,46,112,97,114,
+         
116,105,97,108,115,91,110,97,109,101,93,32,61,32,115,116,114,59,10,125,
+         
59,10,10,72,97,110,100,108,101,98,97,114,115,46,114,101,103,105,115,116,
+         
101,114,72,101,108,112,101,114,40,39,104,101,108,112,101,114,77,105,115,
+         
115,105,110,103,39,44,32,102,117,110,99,116,105,111,110,40,97,114,103,41,
+         
32,123,10,32,32,105,102,40,97,114,103,117,109,101,110,116,115,46,108,101,
+         
110,103,116,104,32,61,61,61,32,50,41,32,123,10,32,32,32,32,114,101,116,
+         117,114,110,32,117,110,100,101,102,105,110,101,100,59,10,32,32,125,32,
+         
101,108,115,101,32,123,10,32,32,32,32,116,104,114,111,119,32,110,101,119,
+         
32,69,114,114,111,114,40,34,67,111,117,108,100,32,110,111,116,32,102,105,
+         
110,100,32,112,114,111,112,101,114,116,121,32,39,34,32,43,32,97,114,103,
+         32,43,32,34,39,34,41,59,10,32,32,125,10,125,41,59,10,10,72,97,110,100,
+         
108,101,98,97,114,115,46,114,101,103,105,115,116,101,114,72,101,108,112,
+         101,114,40,39,98,108,111,99,107,72,101,108,112,101,114,77,105,115,115,
+         105,110,103,39,44,32,102,117,110,99,116,105,111,110,40,99,111,110,116,
+         
101,120,116,44,32,111,112,116,105,111,110,115,41,32,123,10,32,32,118,97,
+         
114,32,105,110,118,101,114,115,101,32,61,32,111,112,116,105,111,110,115,
+         
46,105,110,118,101,114,115,101,32,124,124,32,102,117,110,99,116,105,111,
+         
110,40,41,32,123,125,44,32,102,110,32,61,32,111,112,116,105,111,110,115,
+         
46,102,110,59,10,10,10,32,32,118,97,114,32,114,101,116,32,61,32,34,34,59,
+         
10,32,32,118,97,114,32,116,121,112,101,32,61,32,79,98,106,101,99,116,46,
+         
112,114,111,116,111,116,121,112,101,46,116,111,83,116,114,105,110,103,46,
+         
99,97,108,108,40,99,111,110,116,101,120,116,41,59,10,10,32,32,105,102,40,
+         
116,121,112,101,32,61,61,61,32,34,91,111,98,106,101,99,116,32,70,117,110,
+         
99,116,105,111,110,93,34,41,32,123,10,32,32,32,32,99,111,110,116,101,120,
+         
116,32,61,32,99,111,110,116,101,120,116,40,41,59,10,32,32,125,10,10,32,
+         
32,105,102,40,99,111,110,116,101,120,116,32,61,61,61,32,116,114,117,101,
+         
41,32,123,10,32,32,32,32,114,101,116,117,114,110,32,102,110,40,116,104,
+         
105,115,41,59,10,32,32,125,32,101,108,115,101,32,105,102,40,99,111,110,
+         
116,101,120,116,32,61,61,61,32,102,97,108,115,101,32,124,124,32,99,111,
+         
110,116,101,120,116,32,61,61,32,110,117,108,108,41,32,123,10,32,32,32,32,
+         114,101,116,117,114,110,32,105,110,118,101,114,115,101,40,116,104,105,
+         
115,41,59,10,32,32,125,32,101,108,115,101,32,105,102,40,116,121,112,101,
+         
32,61,61,61,32,34,91,111,98,106,101,99,116,32,65,114,114,97,121,93,34,41,
+         
32,123,10,32,32,32,32,105,102,40,99,111,110,116,101,120,116,46,108,101,
+         
110,103,116,104,32,62,32,48,41,32,123,10,32,32,32,32,32,32,102,111,114,
+         40,118,97,114,32,105,61,48,44,32,106,61,99,111,110,116,101,120,116,46,
+         
108,101,110,103,116,104,59,32,105,60,106,59,32,105,43,43,41,32,123,10,32,
+         
32,32,32,32,32,32,32,114,101,116,32,61,32,114,101,116,32,43,32,102,110,
+         
40,99,111,110,116,101,120,116,91,105,93,41,59,10,32,32,32,32,32,32,125,
+         10,32,32,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,32,32,114,
+         
101,116,32,61,32,105,110,118,101,114,115,101,40,116,104,105,115,41,59,10,
+         
32,32,32,32,125,10,32,32,32,32,114,101,116,117,114,110,32,114,101,116,59,
+         10,32,32,125,32,101,108,115,101,32,123,10,32,32,32,32,114,101,116,117,
+         
114,110,32,102,110,40,99,111,110,116,101,120,116,41,59,10,32,32,125,10,
+         
125,41,59,10,10,72,97,110,100,108,101,98,97,114,115,46,114,101,103,105,
+         
115,116,101,114,72,101,108,112,101,114,40,39,101,97,99,104,39,44,32,102,
+         
117,110,99,116,105,111,110,40,99,111,110,116,101,120,116,44,32,111,112,
+         116,105,111,110,115,41,32,123,10,32,32,118,97,114,32,102,110,32,61,32,
+         
111,112,116,105,111,110,115,46,102,110,44,32,105,110,118,101,114,115,101,
+         
32,61,32,111,112,116,105,111,110,115,46,105,110,118,101,114,115,101,59,
+         
10,32,32,118,97,114,32,114,101,116,32,61,32,34,34,59,10,10,32,32,105,102,
+         
40,99,111,110,116,101,120,116,32,38,38,32,99,111,110,116,101,120,116,46,
+         
108,101,110,103,116,104,32,62,32,48,41,32,123,10,32,32,32,32,102,111,114,
+         40,118,97,114,32,105,61,48,44,32,106,61,99,111,110,116,101,120,116,46,
+         
108,101,110,103,116,104,59,32,105,60,106,59,32,105,43,43,41,32,123,10,32,
+         
32,32,32,32,32,114,101,116,32,61,32,114,101,116,32,43,32,102,110,40,99,
+         
111,110,116,101,120,116,91,105,93,41,59,10,32,32,32,32,125,10,32,32,125,
+         32,101,108,115,101,32,123,10,32,32,32,32,114,101,116,32,61,32,105,110,
+         
118,101,114,115,101,40,116,104,105,115,41,59,10,32,32,125,10,32,32,114,
+         
101,116,117,114,110,32,114,101,116,59,10,125,41,59,10,10,72,97,110,100,
+         
108,101,98,97,114,115,46,114,101,103,105,115,116,101,114,72,101,108,112,
+         
101,114,40,39,105,102,39,44,32,102,117,110,99,116,105,111,110,40,99,111,
+         
110,116,101,120,116,44,32,111,112,116,105,111,110,115,41,32,123,10,32,32,
+         
105,102,40,33,99,111,110,116,101,120,116,32,124,124,32,72,97,110,100,108,
+         
101,98,97,114,115,46,85,116,105,108,115,46,105,115,69,109,112,116,121,40,
+         
99,111,110,116,101,120,116,41,41,32,123,10,32,32,32,32,114,101,116,117,
+         
114,110,32,111,112,116,105,111,110,115,46,105,110,118,101,114,115,101,40,
+         
116,104,105,115,41,59,10,32,32,125,32,101,108,115,101,32,123,10,32,32,32,
+         
32,114,101,116,117,114,110,32,111,112,116,105,111,110,115,46,102,110,40,
+         
116,104,105,115,41,59,10,32,32,125,10,125,41,59,10,10,72,97,110,100,108,
+         
101,98,97,114,115,46,114,101,103,105,115,116,101,114,72,101,108,112,101,
+         114,40,39,117,110,108,101,115,115,39,44,32,102,117,110,99,116,105,111,
+         
110,40,99,111,110,116,101,120,116,44,32,111,112,116,105,111,110,115,41,
+         
32,123,10,32,32,118,97,114,32,102,110,32,61,32,111,112,116,105,111,110,
+         115,46,102,110,44,32,105,110,118,101,114,115,101,32,61,32,111,112,116,
+         
105,111,110,115,46,105,110,118,101,114,115,101,59,10,32,32,111,112,116,
+         
105,111,110,115,46,102,110,32,61,32,105,110,118,101,114,115,101,59,10,32,
+         
32,111,112,116,105,111,110,115,46,105,110,118,101,114,115,101,32,61,32,
+         
102,110,59,10,10,32,32,114,101,116,117,114,110,32,72,97,110,100,108,101,
+         
98,97,114,115,46,104,101,108,112,101,114,115,91,39,105,102,39,93,46,99,
+         
97,108,108,40,116,104,105,115,44,32,99,111,110,116,101,120,116,44,32,111,
+         
112,116,105,111,110,115,41,59,10,125,41,59,10,10,72,97,110,100,108,101,
+         
98,97,114,115,46,114,101,103,105,115,116,101,114,72,101,108,112,101,114,
+         
40,39,119,105,116,104,39,44,32,102,117,110,99,116,105,111,110,40,99,111,
+         
110,116,101,120,116,44,32,111,112,116,105,111,110,115,41,32,123,10,32,32,
+         
114,101,116,117,114,110,32,111,112,116,105,111,110,115,46,102,110,40,99,
+         
111,110,116,101,120,116,41,59,10,125,41,59,10,59,10,47,47,32,108,105,98,
+         47,104,97,110,100,108,101,98,97,114,115,47,99,111,109,112,105,108,101,
+         
114,47,112,97,114,115,101,114,46,106,115,10,47,42,32,74,105,115,111,110,
+         
32,103,101,110,101,114,97,116,101,100,32,112,97,114,115,101,114,32,42,47,
+         10,118,97,114,32,104,97,110,100,108,101,98,97,114,115,32,61,32,40,102,
+         
117,110,99,116,105,111,110,40,41,123,10,10,118,97,114,32,112,97,114,115,
+         
101,114,32,61,32,123,116,114,97,99,101,58,32,102,117,110,99,116,105,111,
+         
110,32,116,114,97,99,101,40,41,32,123,32,125,44,10,121,121,58,32,123,125,
+         
44,10,115,121,109,98,111,108,115,95,58,32,123,34,101,114,114,111,114,34,
+         
58,50,44,34,114,111,111,116,34,58,51,44,34,112,114,111,103,114,97,109,34,
+         
58,52,44,34,69,79,70,34,58,53,44,34,115,116,97,116,101,109,101,110,116,
+         
115,34,58,54,44,34,115,105,109,112,108,101,73,110,118,101,114,115,101,34,
+         58,55,44,34,115,116,97,116,101,109,101,110,116,34,58,56,44,34,111,112,
+         
101,110,73,110,118,101,114,115,101,34,58,57,44,34,99,108,111,115,101,66,
+         
108,111,99,107,34,58,49,48,44,34,111,112,101,110,66,108,111,99,107,34,58,
+         
49,49,44,34,109,117,115,116,97,99,104,101,34,58,49,50,44,34,112,97,114,
+         
116,105,97,108,34,58,49,51,44,34,67,79,78,84,69,78,84,34,58,49,52,44,34,
+         
67,79,77,77,69,78,84,34,58,49,53,44,34,79,80,69,78,95,66,76,79,67,75,34,
+         
58,49,54,44,34,105,110,77,117,115,116,97,99,104,101,34,58,49,55,44,34,67,
+         
76,79,83,69,34,58,49,56,44,34,79,80,69,78,95,73,78,86,69,82,83,69,34,58,
+         
49,57,44,34,79,80,69,78,95,69,78,68,66,76,79,67,75,34,58,50,48,44,34,112,
+         
97,116,104,34,58,50,49,44,34,79,80,69,78,34,58,50,50,44,34,79,80,69,78,
+         
95,85,78,69,83,67,65,80,69,68,34,58,50,51,44,34,79,80,69,78,95,80,65,82,
+         84,73,65,76,34,58,50,52,44,34,112,97,114,97,109,115,34,58,50,53,44,34,
+         
104,97,115,104,34,58,50,54,44,34,112,97,114,97,109,34,58,50,55,44,34,83,
+         
84,82,73,78,71,34,58,50,56,44,34,73,78,84,69,71,69,82,34,58,50,57,44,34,
+         
66,79,79,76,69,65,78,34,58,51,48,44,34,104,97,115,104,83,101,103,109,101,
+         
110,116,115,34,58,51,49,44,34,104,97,115,104,83,101,103,109,101,110,116,
+         
34,58,51,50,44,34,73,68,34,58,51,51,44,34,69,81,85,65,76,83,34,58,51,52,
+         
44,34,112,97,116,104,83,101,103,109,101,110,116,115,34,58,51,53,44,34,83,
+         69,80,34,58,51,54,44,34,36,97,99,99,101,112,116,34,58,48,44,34,36,101,
+         
110,100,34,58,49,125,44,10,116,101,114,109,105,110,97,108,115,95,58,32,
+         
123,50,58,34,101,114,114,111,114,34,44,53,58,34,69,79,70,34,44,49,52,58,
+         
34,67,79,78,84,69,78,84,34,44,49,53,58,34,67,79,77,77,69,78,84,34,44,49,
+         
54,58,34,79,80,69,78,95,66,76,79,67,75,34,44,49,56,58,34,67,76,79,83,69,
+         
34,44,49,57,58,34,79,80,69,78,95,73,78,86,69,82,83,69,34,44,50,48,58,34,
+         
79,80,69,78,95,69,78,68,66,76,79,67,75,34,44,50,50,58,34,79,80,69,78,34,
+         
44,50,51,58,34,79,80,69,78,95,85,78,69,83,67,65,80,69,68,34,44,50,52,58,
+         
34,79,80,69,78,95,80,65,82,84,73,65,76,34,44,50,56,58,34,83,84,82,73,78,
+         
71,34,44,50,57,58,34,73,78,84,69,71,69,82,34,44,51,48,58,34,66,79,79,76,
+         
69,65,78,34,44,51,51,58,34,73,68,34,44,51,52,58,34,69,81,85,65,76,83,34,
+         
44,51,54,58,34,83,69,80,34,125,44,10,112,114,111,100,117,99,116,105,111,
+         
110,115,95,58,32,91,48,44,91,51,44,50,93,44,91,52,44,51,93,44,91,52,44,
+         
49,93,44,91,52,44,48,93,44,91,54,44,49,93,44,91,54,44,50,93,44,91,56,44,
+         
51,93,44,91,56,44,51,93,44,91,56,44,49,93,44,91,56,44,49,93,44,91,56,44,
+         
49,93,44,91,56,44,49,93,44,91,49,49,44,51,93,44,91,57,44,51,93,44,91,49,
+         
48,44,51,93,44,91,49,50,44,51,93,44,91,49,50,44,51,93,44,91,49,51,44,51,
+         
93,44,91,49,51,44,52,93,44,91,55,44,50,93,44,91,49,55,44,51,93,44,91,49,
+         
55,44,50,93,44,91,49,55,44,50,93,44,91,49,55,44,49,93,44,91,50,53,44,50,
+         
93,44,91,50,53,44,49,93,44,91,50,55,44,49,93,44,91,50,55,44,49,93,44,91,
+         
50,55,44,49,93,44,91,50,55,44,49,93,44,91,50,54,44,49,93,44,91,51,49,44,
+         
50,93,44,91,51,49,44,49,93,44,91,51,50,44,51,93,44,91,51,50,44,51,93,44,
+         
91,51,50,44,51,93,44,91,51,50,44,51,93,44,91,50,49,44,49,93,44,91,51,53,
+         
44,51,93,44,91,51,53,44,49,93,93,44,10,112,101,114,102,111,114,109,65,99,
+         
116,105,111,110,58,32,102,117,110,99,116,105,111,110,32,97,110,111,110,
+         121,109,111,117,115,40,121,121,116,101,120,116,44,121,121,108,101,110,
+         
103,44,121,121,108,105,110,101,110,111,44,121,121,44,121,121,115,116,97,
+         
116,101,44,36,36,44,95,36,41,32,123,10,10,118,97,114,32,36,48,32,61,32,
+         36,36,46,108,101,110,103,116,104,32,45,32,49,59,10,115,119,105,116,99,
+         
104,32,40,121,121,115,116,97,116,101,41,32,123,10,99,97,115,101,32,49,58,
+         
32,114,101,116,117,114,110,32,36,36,91,36,48,45,49,93,32,10,98,114,101,
+         97,107,59,10,99,97,115,101,32,50,58,32,116,104,105,115,46,36,32,61,32,
+         
110,101,119,32,121,121,46,80,114,111,103,114,97,109,78,111,100,101,40,36,
+         
36,91,36,48,45,50,93,44,32,36,36,91,36,48,93,41,32,10,98,114,101,97,107,
+         
59,10,99,97,115,101,32,51,58,32,116,104,105,115,46,36,32,61,32,110,101,
+         
119,32,121,121,46,80,114,111,103,114,97,109,78,111,100,101,40,36,36,91,
+         
36,48,93,41,32,10,98,114,101,97,107,59,10,99,97,115,101,32,52,58,32,116,
+         
104,105,115,46,36,32,61,32,110,101,119,32,121,121,46,80,114,111,103,114,
+         97,109,78,111,100,101,40,91,93,41,32,10,98,114,101,97,107,59,10,99,97,
+         
115,101,32,53,58,32,116,104,105,115,46,36,32,61,32,91,36,36,91,36,48,93,
+         
93,32,10,98,114,101,97,107,59,10,99,97,115,101,32,54,58,32,36,36,91,36,
+         
48,45,49,93,46,112,117,115,104,40,36,36,91,36,48,93,41,59,32,116,104,105,
+         
115,46,36,32,61,32,36,36,91,36,48,45,49,93,32,10,98,114,101,97,107,59,10,
+         
99,97,115,101,32,55,58,32,116,104,105,115,46,36,32,61,32,110,101,119,32,
+         
121,121,46,73,110,118,101,114,115,101,78,111,100,101,40,36,36,91,36,48,
+         
45,50,93,44,32,36,36,91,36,48,45,49,93,44,32,36,36,91,36,48,93,41,32,10,
+         
98,114,101,97,107,59,10,99,97,115,101,32,56,58,32,116,104,105,115,46,36,
+         
32,61,32,110,101,119,32,121,121,46,66,108,111,99,107,78,111,100,101,40,
+         
36,36,91,36,48,45,50,93,44,32,36,36,91,36,48,45,49,93,44,32,36,36,91,36,
+         
48,93,41,32,10,98,114,101,97,107,59,10,99,97,115,101,32,57,58,32,116,104,
+         
105,115,46,36,32,61,32,36,36,91,36,48,93,32,10,98,114,101,97,107,59,10,
+         
99,97,115,101,32,49,48,58,32,116,104,105,115,46,36,32,61,32,36,36,91,36,
+         
48,93,32,10,98,114,101,97,107,59,10,99,97,115,101,32,49,49,58,32,116,104,
+         
105,115,46,36,32,61,32,110,101,119,32,121,121,46,67,111,110,116,101,110,
+         
116,78,111,100,101,40,36,36,91,36,48,93,41,32,10,98,114,101,97,107,59,10,
+         
99,97,115,101,32,49,50,58,32,116,104,105,115,46,36,32,61,32,110,101,119,
+         
32,121,121,46,67,111,109,109,101,110,116,78,111,100,101,40,36,36,91,36,
+         
48,93,41,32,10,98,114,101,97,107,59,10,99,97,115,101,32,49,51,58,32,116,
+         
104,105,115,46,36,32,61,32,110,101,119,32,121,121,46,77,117,115,116,97,
+         
99,104,101,78,111,100,101,40,36,36,91,36,48,45,49,93,91,48,93,44,32,36,
+         
36,91,36,48,45,49,93,91,49,93,41,32,10,98,114,101,97,107,59,10,99,97,115,
+         
101,32,49,52,58,32,116,104,105,115,46,36,32,61,32,110,101,119,32,121,121,
+         
46,77,117,115,116,97,99,104,101,78,111,100,101,40,36,36,91,36,48,45,49,
+         
93,91,48,93,44,32,36,36,91,36,48,45,49,93,91,49,93,41,32,10,98,114,101,
+         
97,107,59,10,99,97,115,101,32,49,53,58,32,116,104,105,115,46,36,32,61,32,
+         
36,36,91,36,48,45,49,93,32,10,98,114,101,97,107,59,10,99,97,115,101,32,
+         
49,54,58,32,116,104,105,115,46,36,32,61,32,110,101,119,32,121,121,46,77,
+         
117,115,116,97,99,104,101,78,111,100,101,40,36,36,91,36,48,45,49,93,91,
+         
48,93,44,32,36,36,91,36,48,45,49,93,91,49,93,41,32,10,98,114,101,97,107,
+         59,10,99,97,115,101,32,49,55,58,32,116,104,105,115,46,36,32,61,32,110,
+         
101,119,32,121,121,46,77,117,115,116,97,99,104,101,78,111,100,101,40,36,
+         
36,91,36,48,45,49,93,91,48,93,44,32,36,36,91,36,48,45,49,93,91,49,93,44,
+         
32,116,114,117,101,41,32,10,98,114,101,97,107,59,10,99,97,115,101,32,49,
+         
56,58,32,116,104,105,115,46,36,32,61,32,110,101,119,32,121,121,46,80,97,
+         
114,116,105,97,108,78,111,100,101,40,36,36,91,36,48,45,49,93,41,32,10,98,
+         
114,101,97,107,59,10,99,97,115,101,32,49,57,58,32,116,104,105,115,46,36,
+         
32,61,32,110,101,119,32,121,121,46,80,97,114,116,105,97,108,78,111,100,
+         
101,40,36,36,91,36,48,45,50,93,44,32,36,36,91,36,48,45,49,93,41,32,10,98,
+         
114,101,97,107,59,10,99,97,115,101,32,50,48,58,32,10,98,114,101,97,107,
+         
59,10,99,97,115,101,32,50,49,58,32,116,104,105,115,46,36,32,61,32,91,91,
+         
36,36,91,36,48,45,50,93,93,46,99,111,110,99,97,116,40,36,36,91,36,48,45,
+         
49,93,41,44,32,36,36,91,36,48,93,93,32,10,98,114,101,97,107,59,10,99,97,
+         
115,101,32,50,50,58,32,116,104,105,115,46,36,32,61,32,91,91,36,36,91,36,
+         
48,45,49,93,93,46,99,111,110,99,97,116,40,36,36,91,36,48,93,41,44,32,110,
+         
117,108,108,93,32,10,98,114,101,97,107,59,10,99,97,115,101,32,50,51,58,
+         
32,116,104,105,115,46,36,32,61,32,91,91,36,36,91,36,48,45,49,93,93,44,32,
+         
36,36,91,36,48,93,93,32,10,98,114,101,97,107,59,10,99,97,115,101,32,50,
+         
52,58,32,116,104,105,115,46,36,32,61,32,91,91,36,36,91,36,48,93,93,44,32,
+         
110,117,108,108,93,32,10,98,114,101,97,107,59,10,99,97,115,101,32,50,53,
+         
58,32,36,36,91,36,48,45,49,93,46,112,117,115,104,40,36,36,91,36,48,93,41,
+         
59,32,116,104,105,115,46,36,32,61,32,36,36,91,36,48,45,49,93,59,32,10,98,
+         
114,101,97,107,59,10,99,97,115,101,32,50,54,58,32,116,104,105,115,46,36,
+         
32,61,32,91,36,36,91,36,48,93,93,32,10,98,114,101,97,107,59,10,99,97,115,
+         
101,32,50,55,58,32,116,104,105,115,46,36,32,61,32,36,36,91,36,48,93,32,
+         
10,98,114,101,97,107,59,10,99,97,115,101,32,50,56,58,32,116,104,105,115,
+         
46,36,32,61,32,110,101,119,32,121,121,46,83,116,114,105,110,103,78,111,
+         
100,101,40,36,36,91,36,48,93,41,32,10,98,114,101,97,107,59,10,99,97,115,
+         
101,32,50,57,58,32,116,104,105,115,46,36,32,61,32,110,101,119,32,121,121,
+         
46,73,110,116,101,103,101,114,78,111,100,101,40,36,36,91,36,48,93,41,32,
+         
10,98,114,101,97,107,59,10,99,97,115,101,32,51,48,58,32,116,104,105,115,
+         46,36,32,61,32,110,101,119,32,121,121,46,66,111,111,108,101,97,110,78,
+         
111,100,101,40,36,36,91,36,48,93,41,32,10,98,114,101,97,107,59,10,99,97,
+         
115,101,32,51,49,58,32,116,104,105,115,46,36,32,61,32,110,101,119,32,121,
+         
121,46,72,97,115,104,78,111,100,101,40,36,36,91,36,48,93,41,32,10,98,114,
+         
101,97,107,59,10,99,97,115,101,32,51,50,58,32,36,36,91,36,48,45,49,93,46,
+         
112,117,115,104,40,36,36,91,36,48,93,41,59,32,116,104,105,115,46,36,32,
+         61,32,36,36,91,36,48,45,49,93,32,10,98,114,101,97,107,59,10,99,97,115,
+         
101,32,51,51,58,32,116,104,105,115,46,36,32,61,32,91,36,36,91,36,48,93,
+         93,32,10,98,114,101,97,107,59,10,99,97,115,101,32,51,52,58,32,116,104,
+         
105,115,46,36,32,61,32,91,36,36,91,36,48,45,50,93,44,32,36,36,91,36,48,
+         
93,93,32,10,98,114,101,97,107,59,10,99,97,115,101,32,51,53,58,32,116,104,
+         
105,115,46,36,32,61,32,91,36,36,91,36,48,45,50,93,44,32,110,101,119,32,
+         
121,121,46,83,116,114,105,110,103,78,111,100,101,40,36,36,91,36,48,93,41,
+         93,32,10,98,114,101,97,107,59,10,99,97,115,101,32,51,54,58,32,116,104,
+         
105,115,46,36,32,61,32,91,36,36,91,36,48,45,50,93,44,32,110,101,119,32,
+         
121,121,46,73,110,116,101,103,101,114,78,111,100,101,40,36,36,91,36,48,
+         
93,41,93,32,10,98,114,101,97,107,59,10,99,97,115,101,32,51,55,58,32,116,
+         
104,105,115,46,36,32,61,32,91,36,36,91,36,48,45,50,93,44,32,110,101,119,
+         
32,121,121,46,66,111,111,108,101,97,110,78,111,100,101,40,36,36,91,36,48,
+         
93,41,93,32,10,98,114,101,97,107,59,10,99,97,115,101,32,51,56,58,32,116,
+         
104,105,115,46,36,32,61,32,110,101,119,32,121,121,46,73,100,78,111,100,
+         
101,40,36,36,91,36,48,93,41,32,10,98,114,101,97,107,59,10,99,97,115,101,
+         
32,51,57,58,32,36,36,91,36,48,45,50,93,46,112,117,115,104,40,36,36,91,36,
+         
48,93,41,59,32,116,104,105,115,46,36,32,61,32,36,36,91,36,48,45,50,93,59,
+         
32,10,98,114,101,97,107,59,10,99,97,115,101,32,52,48,58,32,116,104,105,
+         
115,46,36,32,61,32,91,36,36,91,36,48,93,93,32,10,98,114,101,97,107,59,10,
+         
125,10,125,44,10,116,97,98,108,101,58,32,91,123,51,58,49,44,52,58,50,44,
+         
53,58,91,50,44,52,93,44,54,58,51,44,56,58,52,44,57,58,53,44,49,49,58,54,
+         
44,49,50,58,55,44,49,51,58,56,44,49,52,58,91,49,44,57,93,44,49,53,58,91,
+         
49,44,49,48,93,44,49,54,58,91,49,44,49,50,93,44,49,57,58,91,49,44,49,49,
+         
93,44,50,50,58,91,49,44,49,51,93,44,50,51,58,91,49,44,49,52,93,44,50,52,
+         
58,91,49,44,49,53,93,125,44,123,49,58,91,51,93,125,44,123,53,58,91,49,44,
+         
49,54,93,125,44,123,53,58,91,50,44,51,93,44,55,58,49,55,44,56,58,49,56,
+         
44,57,58,53,44,49,49,58,54,44,49,50,58,55,44,49,51,58,56,44,49,52,58,91,
+         
49,44,57,93,44,49,53,58,91,49,44,49,48,93,44,49,54,58,91,49,44,49,50,93,
+         
44,49,57,58,91,49,44,49,57,93,44,50,48,58,91,50,44,51,93,44,50,50,58,91,
+         
49,44,49,51,93,44,50,51,58,91,49,44,49,52,93,44,50,52,58,91,49,44,49,53,
+         
93,125,44,123,53,58,91,50,44,53,93,44,49,52,58,91,50,44,53,93,44,49,53,
+         
58,91,50,44,53,93,44,49,54,58,91,50,44,53,93,44,49,57,58,91,50,44,53,93,
+         
44,50,48,58,91,50,44,53,93,44,50,50,58,91,50,44,53,93,44,50,51,58,91,50,
+         
44,53,93,44,50,52,58,91,50,44,53,93,125,44,123,52,58,50,48,44,54,58,51,
+         
44,56,58,52,44,57,58,53,44,49,49,58,54,44,49,50,58,55,44,49,51,58,56,44,
+         
49,52,58,91,49,44,57,93,44,49,53,58,91,49,44,49,48,93,44,49,54,58,91,49,
+         
44,49,50,93,44,49,57,58,91,49,44,49,49,93,44,50,48,58,91,50,44,52,93,44,
+         
50,50,58,91,49,44,49,51,93,44,50,51,58,91,49,44,49,52,93,44,50,52,58,91,
+         
49,44,49,53,93,125,44,123,52,58,50,49,44,54,58,51,44,56,58,52,44,57,58,
+         
53,44,49,49,58,54,44,49,50,58,55,44,49,51,58,56,44,49,52,58,91,49,44,57,
+         
93,44,49,53,58,91,49,44,49,48,93,44,49,54,58,91,49,44,49,50,93,44,49,57,
+         
58,91,49,44,49,49,93,44,50,48,58,91,50,44,52,93,44,50,50,58,91,49,44,49,
+         
51,93,44,50,51,58,91,49,44,49,52,93,44,50,52,58,91,49,44,49,53,93,125,44,
+         
123,53,58,91,50,44,57,93,44,49,52,58,91,50,44,57,93,44,49,53,58,91,50,44,
+         
57,93,44,49,54,58,91,50,44,57,93,44,49,57,58,91,50,44,57,93,44,50,48,58,
+         
91,50,44,57,93,44,50,50,58,91,50,44,57,93,44,50,51,58,91,50,44,57,93,44,
+         
50,52,58,91,50,44,57,93,125,44,123,53,58,91,50,44,49,48,93,44,49,52,58,
+         
91,50,44,49,48,93,44,49,53,58,91,50,44,49,48,93,44,49,54,58,91,50,44,49,
+         
48,93,44,49,57,58,91,50,44,49,48,93,44,50,48,58,91,50,44,49,48,93,44,50,
+         
50,58,91,50,44,49,48,93,44,50,51,58,91,50,44,49,48,93,44,50,52,58,91,50,
+         
44,49,48,93,125,44,123,53,58,91,50,44,49,49,93,44,49,52,58,91,50,44,49,
+         
49,93,44,49,53,58,91,50,44,49,49,93,44,49,54,58,91,50,44,49,49,93,44,49,
+         
57,58,91,50,44,49,49,93,44,50,48,58,91,50,44,49,49,93,44,50,50,58,91,50,
+         
44,49,49,93,44,50,51,58,91,50,44,49,49,93,44,50,52,58,91,50,44,49,49,93,
+         
125,44,123,53,58,91,50,44,49,50,93,44,49,52,58,91,50,44,49,50,93,44,49,
+         
53,58,91,50,44,49,50,93,44,49,54,58,91,50,44,49,50,93,44,49,57,58,91,50,
+         
44,49,50,93,44,50,48,58,91,50,44,49,50,93,44,50,50,58,91,50,44,49,50,93,
+         
44,50,51,58,91,50,44,49,50,93,44,50,52,58,91,50,44,49,50,93,125,44,123,
+         
49,55,58,50,50,44,50,49,58,50,51,44,51,51,58,91,49,44,50,53,93,44,51,53,
+         
58,50,52,125,44,123,49,55,58,50,54,44,50,49,58,50,51,44,51,51,58,91,49,
+         
44,50,53,93,44,51,53,58,50,52,125,44,123,49,55,58,50,55,44,50,49,58,50,
+         
51,44,51,51,58,91,49,44,50,53,93,44,51,53,58,50,52,125,44,123,49,55,58,
+         
50,56,44,50,49,58,50,51,44,51,51,58,91,49,44,50,53,93,44,51,53,58,50,52,
+         
125,44,123,50,49,58,50,57,44,51,51,58,91,49,44,50,53,93,44,51,53,58,50,
+         
52,125,44,123,49,58,91,50,44,49,93,125,44,123,54,58,51,48,44,56,58,52,44,
+         
57,58,53,44,49,49,58,54,44,49,50,58,55,44,49,51,58,56,44,49,52,58,91,49,
+         
44,57,93,44,49,53,58,91,49,44,49,48,93,44,49,54,58,91,49,44,49,50,93,44,
+         
49,57,58,91,49,44,49,49,93,44,50,50,58,91,49,44,49,51,93,44,50,51,58,91,
+         
49,44,49,52,93,44,50,52,58,91,49,44,49,53,93,125,44,123,53,58,91,50,44,
+         
54,93,44,49,52,58,91,50,44,54,93,44,49,53,58,91,50,44,54,93,44,49,54,58,
+         
91,50,44,54,93,44,49,57,58,91,50,44,54,93,44,50,48,58,91,50,44,54,93,44,
+         
50,50,58,91,50,44,54,93,44,50,51,58,91,50,44,54,93,44,50,52,58,91,50,44,
+         
54,93,125,44,123,49,55,58,50,50,44,49,56,58,91,49,44,51,49,93,44,50,49,
+         
58,50,51,44,51,51,58,91,49,44,50,53,93,44,51,53,58,50,52,125,44,123,49,
+         
48,58,51,50,44,50,48,58,91,49,44,51,51,93,125,44,123,49,48,58,51,52,44,
+         
50,48,58,91,49,44,51,51,93,125,44,123,49,56,58,91,49,44,51,53,93,125,44,
+         
123,49,56,58,91,50,44,50,52,93,44,50,49,58,52,48,44,50,53,58,51,54,44,50,
+         
54,58,51,55,44,50,55,58,51,56,44,50,56,58,91,49,44,52,49,93,44,50,57,58,
+         
91,49,44,52,50,93,44,51,48,58,91,49,44,52,51,93,44,51,49,58,51,57,44,51,
+         
50,58,52,52,44,51,51,58,91,49,44,52,53,93,44,51,53,58,50,52,125,44,123,
+         
49,56,58,91,50,44,51,56,93,44,50,56,58,91,50,44,51,56,93,44,50,57,58,91,
+         
50,44,51,56,93,44,51,48,58,91,50,44,51,56,93,44,51,51,58,91,50,44,51,56,
+         
93,44,51,54,58,91,49,44,52,54,93,125,44,123,49,56,58,91,50,44,52,48,93,
+         
44,50,56,58,91,50,44,52,48,93,44,50,57,58,91,50,44,52,48,93,44,51,48,58,
+         
91,50,44,52,48,93,44,51,51,58,91,50,44,52,48,93,44,51,54,58,91,50,44,52,
+         
48,93,125,44,123,49,56,58,91,49,44,52,55,93,125,44,123,49,56,58,91,49,44,
+         
52,56,93,125,44,123,49,56,58,91,49,44,52,57,93,125,44,123,49,56,58,91,49,
+         
44,53,48,93,44,50,49,58,53,49,44,51,51,58,91,49,44,50,53,93,44,51,53,58,
+         
50,52,125,44,123,53,58,91,50,44,50,93,44,56,58,49,56,44,57,58,53,44,49,
+         49,58,54,44,49,50,58,55,44,49,51,58,

<TRUNCATED>

Reply via email to