var Mustache=function(){var g={},m=function(){};m.prototype={otag:"{{",ctag:"}}",pragmas:{},buffer:[],pragmas_implemented:{"IMPLICIT-ITERATOR":true},context:{},render:function(a,b,c,d){if(!d)this.context=b,this.buffer=[];if(!this.includes("",a))if(d)return a;else{this.send(a);return}var a=this.render_pragmas(a),e=this.render_section(a,b,c);e===false&&(e=this.render_tags(a,b,c,d));if(d)return e;else this.sendLines(e)},send:function(a){a!==""&&this.buffer.push(a)},sendLines:function(a){if(a)for(var a= a.split("\n"),b=0;b<a.length;b++)this.send(a[b])},render_pragmas:function(a){if(!this.includes("%",a))return a;var b=this,c=this.getCachedRegex("render_pragmas",function(a,b){return RegExp(a+"%([\\w-]+) ?([\\w]+=[\\w]+)?"+b,"g")});return a.replace(c,function(a,c,h){if(!b.pragmas_implemented[c])throw{message:"This implementation of mustache doesn't understand the '"+c+"' pragma"};b.pragmas[c]={};h&&(a=h.split("="),b.pragmas[c][a[0]]=a[1]);return""})},render_partial:function(a,b,c){a=this.trim(a);if(!c|| c[a]===void 0)throw{message:"unknown_partial '"+a+"'"};return typeof b[a]!="object"?this.render(c[a],b,c,true):this.render(c[a],b[a],c,true)},render_section:function(a,b,c){if(!this.includes("#",a)&&!this.includes("^",a))return false;var d=this,e=this.getCachedRegex("render_section",function(a,b){return RegExp("^([\\s\\S]*?)"+a+"(\\^|\\#)\\s*(.+)\\s*"+b+"\n*([\\s\\S]*?)"+a+"\\/\\s*\\3\\s*"+b+"\\s*([\\s\\S]*)$","g")});return a.replace(e,function(a,e,j,f,i,k){var a=e?d.render_tags(e,b,c,true):"",k= k?d.render(k,b,c,true):"",l,f=d.find(f,b);j==="^"?l=!f||d.is_array(f)&&f.length===0?d.render(i,b,c,true):"":j==="#"&&(l=d.is_array(f)?d.map(f,function(a){return d.render(i,d.create_context(a),c,true)}).join(""):d.is_object(f)?d.render(i,d.create_context(f),c,true):typeof f==="function"?f.call(b,i,function(a){return d.render(a,b,c,true)}):f?d.render(i,b,c,true):"");return a+l+k})},render_tags:function(a,b,c,d){for(var e=this,h=function(){return e.getCachedRegex("render_tags",function(a,b){return RegExp(a+ "(=|!|>|\\{|%)?([^\\/#\\^]+?)\\1?"+b+"+","g")})},g=h(),j=function(a,d,f){switch(d){case "!":return"";case "=":return e.set_delimiters(f),g=h(),"";case ">":return e.render_partial(f,b,c);case "{":return e.find(f,b);default:return e.escape(e.find(f,b))}},a=a.split("\n"),f=0;f<a.length;f++)a[f]=a[f].replace(g,j,this),d||this.send(a[f]);if(d)return a.join("\n")},set_delimiters:function(a){a=a.split(" ");this.otag=this.escape_regex(a[0]);this.ctag=this.escape_regex(a[1])},escape_regex:function(a){if(!arguments.callee.sRE)arguments.callee.sRE= RegExp("(\\/|\\.|\\*|\\+|\\?|\\||\\(|\\)|\\[|\\]|\\{|\\}|\\\\)","g");return a.replace(arguments.callee.sRE,"\\$1")},find:function(a,b){function c(a){return a===false||a===0||a}var a=this.trim(a),d;a.match(/([a-z_]+)\./ig)?d=c(this.walk_context(a,b)):c(b[a])?d=b[a]:c(this.context[a])&&(d=this.context[a]);return typeof d==="function"?d.apply(b):d!==void 0?d:""},walk_context:function(a,b){for(var c=a.split("."),d=b[c[0]]!=void 0?b:this.context,e=d[c.shift()];e!=void 0&&c.length>0;)d=e,e=e[c.shift()]; return typeof e==="function"?e.apply(d):e},includes:function(a,b){return b.indexOf(this.otag+a)!=-1},escape:function(a){return String(a===null?"":a).replace(/&(?!\w+;)|["'<>\\]/g,function(a){switch(a){case "&":return"&amp;";case '"':return"&quot;";case "'":return"&#39;";case "<":return"&lt;";case ">":return"&gt;";default:return a}})},create_context:function(a){if(this.is_object(a))return a;else{var b=".";if(this.pragmas["IMPLICIT-ITERATOR"])b=this.pragmas["IMPLICIT-ITERATOR"].iterator;var c={};c[b]= a;return c}},is_object:function(a){return a&&typeof a=="object"},is_array:function(a){return Object.prototype.toString.call(a)==="[object Array]"},trim:function(a){return a.replace(/^\s*|\s*$/g,"")},map:function(a,b){if(typeof a.map=="function")return a.map(b);else{for(var c=[],d=a.length,e=0;e<d;e++)c.push(b(a[e]));return c}},getCachedRegex:function(a,b){var c=g[this.otag];c||(c=g[this.otag]={});var d=c[this.ctag];d||(d=c[this.ctag]={});(c=d[a])||(c=d[a]=b(this.otag,this.ctag));return c}};return{name:"mustache.js", version:"0.4.0-dev",to_html:function(a,b,c,d){var e=new m;if(d)e.send=d;e.render(a,b||{},c);if(!d)return e.buffer.join("\n")}}}();
