HEX
Server: Apache/2.4.41 (Ubuntu)
System: Linux wordpress-ubuntu-s-2vcpu-4gb-fra1-01 5.4.0-169-generic #187-Ubuntu SMP Thu Nov 23 14:52:28 UTC 2023 x86_64
User: root (0)
PHP: 7.4.33
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: //proc/1526/task/1529/cwd/tana/frontend/node_modules/nunjucks/browser/nunjucks.min.js.map
{"version":3,"sources":["../webpack/universalModuleDefinition","../webpack/bootstrap f3bbc00b542dc1957ab7","../nunjucks/src/lib.js","../nunjucks/src/object.js","../nunjucks/src/runtime.js","../nunjucks/src/nodes.js","../nunjucks/src/compiler.js","../nunjucks/src/loader.js","../nunjucks/src/environment.js","../nunjucks/src/parser.js","../nunjucks/src/lexer.js","../nunjucks/src/web-loaders.js","../nunjucks/index.js","../node_modules/asap/browser-asap.js","../node_modules/asap/browser-raw.js","../node_modules/webpack/buildin/global.js","../node_modules/a-sync-waterfall/index.js","../nunjucks/src/transformer.js","../nunjucks/src/filters.js","../nunjucks/src/precompiled-loader.js","../nunjucks/src/tests.js","../nunjucks/src/globals.js","../nunjucks/src/express-app.js","../nunjucks/src/precompile.js","../nunjucks/src/precompile-global.js","../nunjucks/src/jinja-compat.js"],"names":["root","factory","exports","module","define","amd","self","this","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","ArrayProto","Array","ObjProto","escapeMap","&","\"","'","<",">","escapeRegex","hasOwnProp","obj","k","lookupEscape","ch","TemplateError","message","lineno","colno","err","cause","getStack","Error","setPrototypeOf","writable","value","captureStackTrace","constructor","stackDescriptor","getOwnPropertyDescriptor","stack","firstUpdate","Update","path","msg","isFunction","toString","isArray","isString","isObject","toArray","slice","indexOf","arr","searchElement","fromIndex","keys_","push","_prettifyError","withInternals","old","create","escape","val","replace","groupBy","result","iterator","length","key","without","array","contains","arguments","index","repeat","char_","str","each","func","context","forEach","map","results","asyncIter","iter","cb","next","asyncFor","keys","len","_entries","_values","_assign","extend","obj1","obj2","inOperator","lib","Obj","init","apply","props","cls","parent","prop","tmp","res","subclass","_cls","_createClass","extendClass","arrayFrom","from","supportsIterators","Symbol","Frame","isolateWrites","variables","topLevel","set","resolveUp","parts","split","frame","resolve","id","undefined","lookup","forWrite","pop","isKeywordArgs","numArgs","args","SafeString","String","valueOf","makeMacro","argNames","kwargNames","_this","_len","macroArgs","_key","argCount","kwargs","lastArg","getKeywordArgs","arg","makeKeywordArgs","__keywords","suppressValue","autoescape","ensureDefined","memberLookup","_len2","_key2","contextOrFrameLookup","callWrap","handleError","error","copySafeness","dest","target","markSafe","type","ret","asyncEach","dimen","item","asyncAll","outputArr","finished","done","output","join","fromIterator","traverseAndCheck","Node","findAll","_arguments","fields","field","_this2","NodeList","children","child","iterFields","_this3","Value","nodes","_Node2","addChild","node","Root","Literal","Group","ArrayNode","Pair","Dict","LookupVal","If","IfAsync","InlineIf","For","AsyncEach","AsyncAll","Macro","Caller","Import","FromImport","template","names","withContext","_Node3","FunCall","Filter","FilterAsync","KeywordArgs","Block","Super","Extends","Include","Set","Switch","Case","Output","Capture","TemplateData","UnaryOp","BinOp","In","Is","Or","And","Not","Add","Concat","Sub","Mul","Div","FloorDiv","Mod","Pow","Neg","Pos","Compare","CompareOperand","CallExtension","ext","contentArgs","extName","__name","CallExtensionAsync","print","indent","inline","lines","line","process","stdout","write","nl","printNodes","typename","fieldName","JSON","stringify","_ref","parser","transformer","compareOps","==","===","!=","!==","<=",">=","Compiler","templateName","throwOnUndefined","codebuf","lastId","buffer","bufferStack","_scopeClosers","inBlock","fail","_pushBuffer","_tmpid","_emit","_popBuffer","code","_emitLine","_emitLines","_emitFuncBegin","_emitFuncEnd","noReturn","_closeScopeLevels","_addScopeLevel","_withScopedSyntax","_makeCallback","_templateName","_compileChildren","compile","_compileAggregate","startChar","endChar","_compileExpression","assertType","types","some","t","compileCallExtension","async","_this4","compileCallExtensionAsync","compileNodeList","compileLiteral","compileSymbol","v","compileGroup","compileArray","compileDict","compilePair","compileInlineIf","cond","body","else_","compileIn","left","right","compileIs","_binOpEmitter","compileOr","compileAnd","compileAdd","compileConcat","compileSub","compileMul","compileDiv","compileMod","compileNot","compileFloorDiv","compilePow","compileNeg","compilePos","compileCompare","_this5","expr","ops","op","compileLookupVal","_getNodeName","compileFunCall","compileFilter","compileFilterAsync","symbol","compileKeywordArgs","compileSet","_this6","ids","targets","charAt","compileSwitch","_this7","cases","default","compileIf","_this8","compileIfAsync","_emitLoopBindings","_this9","b","compileFor","_this10","u","tid","_node$name$children","_compileAsyncLoop","parallel","_this11","asyncMethod","arrayLen","buf","compileAsyncEach","compileAsyncAll","_compileMacro","_this12","funcId","keepFrame","currFrame","realNames","concat","pair","bufferId","compileMacro","compileCaller","_compileGetTemplate","eagerCompile","ignoreMissing","parentTemplateId","parentName","eagerCompileArg","ignoreMissingArg","compileImport","compileFromImport","_this13","importedId","nameNode","alias","compileBlock","compileSuper","blockName","compileExtends","compileInclude","id2","compileTemplateData","compileCapture","_this14","compileOutput","_this15","compileRoot","_this16","blockNames","blocks","block","tmpFrame","_compile","getCode","src","asyncFilters","extensions","opts","processedSrc","preprocess","filter","f","reduce","processor","transform","parse","_Obj","Loader","_proto","on","listeners","emit","listener","to","dirname","isRelative","filename","asap","waterfall","compiler","filters","FileSystemLoader","WebLoader","PrecompiledLoader","tests","globals","globalRuntime","expressApp","callbackAsap","noopTmplSrc","env","runtime","e","Environment","loaders","dev","trimBlocks","lstripBlocks","window","nunjucksPrecompiled","unshift","initCache","extensionsList","addFilter","_ref2","test","addTest","loader","cache","addExtension","extension","removeExtension","getExtension","hasExtension","addGlobal","getGlobal","wrapped","getFilter","getTest","resolveTemplate","getTemplate","syncResult","that","tmpl","raw","Template","handle","getSource","info","newTmpl","noCache","express","app","render","ctx","renderString","tasks","callback","forceAsync","Context","exported","addBlock","setVariable","getVariables","getBlock","getSuper","idx","blk","addExport","getExported","tmplProps","tmplStr","compiled","parentFrame","didError","rootRenderFunc","source","Function","_getBlocks","lexer","Parser","tokens","peeked","breakOnBlocks","dropLeadingWhitespace","nextToken","withWhitespace","tok","TOKEN_WHITESPACE","peekToken","pushToken","skip","expect","skipValue","skipSymbol","TOKEN_SYMBOL","advanceAfterBlockEnd","TOKEN_BLOCK_END","advanceAfterVariableEnd","TOKEN_VARIABLE_END","tags","VARIABLE_END","parseFor","endBlock","forTok","parsePrimary","TOKEN_COMMA","prim","parseExpression","parseUntilBlocks","parseMacro","macroTok","parseSignature","parseCall","callTok","callerArgs","macroCall","callerName","callerNode","parseWithContext","parseImport","importTok","parseFrom","fromTok","nextTok","parseBlock","tag","parseExtends","parseInclude","parseIf","parseSet","TOKEN_OPERATOR","parseSwitch","defaultCase","col","parseStatement","parseRaw","parseFilterStatement","tagName","endTagName","rawBlockRegex","RegExp","rawLevel","matches","begun","_extractRegex","all","pre","backN","parsePostfix","TOKEN_LEFT_PAREN","TOKEN_LEFT_BRACKET","parseAggregate","parseInlineIf","parseOr","condNode","bodyNode","parseAnd","node2","parseNot","parseIn","parseIs","invert","parseCompare","not","parseConcat","parseAdd","TOKEN_TILDE","parseSub","parseMul","parseDiv","parseFloorDiv","parseMod","parsePow","parseUnary","noFilters","parseFilter","noPostfix","TOKEN_STRING","TOKEN_INT","parseInt","TOKEN_FLOAT","parseFloat","TOKEN_BOOLEAN","TOKEN_NONE","TOKEN_REGEX","flags","parseFilterName","parseFilterArgs","TOKEN_PIPE","filterTok","TOKEN_LEFT_CURLY","TOKEN_RIGHT_PAREN","TOKEN_RIGHT_BRACKET","TOKEN_RIGHT_CURLY","TOKEN_COLON","tolerant","noParens","checkComma","prev","parseNodes","TOKEN_DATA","data","nextVal","TOKEN_BLOCK_START","TOKEN_VARIABLE_START","VARIABLE_START","TOKEN_COMMENT","COMMENT_START","COMMENT_END","parseAsRoot","lex","BLOCK_START","BLOCK_END","token","Tokenizer","in_code","blockStart","blockEnd","variableStart","variableEnd","commentStart","commentEnd","cur","current","isFinished","_parseString","_extract","_extractString","forward","back","forwardN","regexBody","previous","POSSIBLE_FLAGS","regexFlags","complexOps","curComplex","_extractUntil","whitespaceChars","match","beginChars","inComment","_matches","lastLine","delimiter","charString","_extractMatching","breakOnMatch","first","regex","currentStr","lastIndexOf","substr","TOKEN_SPECIAL","baseURL","_Loader","useCache","fetch","content","status","url","ajax","XMLHttpRequest","loading","onreadystatechange","readyState","responseText","Date","getTime","open","send","precompile","installJinjaCompat","configure","templatesPath","TemplateLoader","watch","web","reset","precompileString","rawAsap","freeTasks","pendingErrors","requestErrorThrow","makeRequestCallFromTimer","shift","task","rawTask","RawTask","onerror","queue","requestFlush","capacity","flush","currentIndex","scan","newLength","toggle","observer","scope","global","BrowserMutationObserver","MutationObserver","WebKitMutationObserver","timeoutHandle","setTimeout","handleTimer","intervalHandle","setInterval","clearTimeout","clearInterval","document","createTextNode","observe","characterData","g","eval","__WEBPACK_AMD_DEFINE_RESULT__","executeSync","splice","executeAsync","fn","setImmediate","nextTick","_isArray","maybeArray","wrapIterator","makeCallback","makeIterator","sym","gensym","mapCOW","walk","ast","depthFirst","astT","propsT","depthWalk","_liftFilters","walked","descNode","cps","convertStatements","blockNode","hasSuper","liftSuper","liftFilters","r","normalize","defaultValue","isNaN","num","capitalize","toLowerCase","toUpperCase","list","trim","abs","Math","batch","linecount","fillWith","center","width","spaces","post","def","bool","dictsort","caseSensitive","by","si","sort","t1","t2","a","dump","safe","forceescape","groupby","attr","indentfirst","sp","del","last","Map","size","lower","nl2br","random","floor","rejectattr","selectattr","new_","maxCount","originalStr","nextIndex","pos","count","substring","reverse","round","precision","method","factor","pow","ceil","slices","sliceLength","extra","offset","start","end","currSlice","sum","reversed","caseSens","x","y","string","striptags","input","preserveLinebreaks","trimmedInput","title","words","word","truncate","killwords","orig","upper","urlencode","enc","encodeURIComponent","puncRe","emailRe","httpHttpsRe","wwwRe","tldRe","urlize","nofollow","Infinity","noFollowAttr","possibleUrl","shortUrl","wordcount","float","int","compiledTemplates","precompiled","callable","defined","divisibleby","one","two","escaped","equalto","eq","sameas","even","falsy","ge","greaterthan","gt","le","lessthan","lt","ne","null","number","odd","truthy","iterable","mapping","range","stop","step","cycler","items","joiner","sep","NunjucksView","defaultEngine","extname","fs","precompileGlobal","patterns","pattern","wrapper","_precompile","pathStats","existsSync","statSync","templates","isFile","readFileSync","isDirectory","addTemplates","dir","readdirSync","file","filepath","subpath","stat","exclude","include","force","console","out","asFunction","orig_Compiler_assertType","orig_Parser_parseAggregate","orig_contextOrFrameLookup","orig_memberLookup","getTokensState","Slice","compileSlice","origState","errState","rethrow","isSlice","ARRAY_MEMBERS","append","element","remove","find","insert","elem","OBJECT_MEMBERS","values","has_key","popitem","setdefault","update","iteritems","itervalues","iterkeys","bind"],"mappings":"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","file":"nunjucks.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"nunjucks\"] = factory();\n\telse\n\t\troot[\"nunjucks\"] = factory();\n})(typeof self !== 'undefined' ? self : this, function() {\nreturn \n\n\n// WEBPACK FOOTER //\n// webpack/universalModuleDefinition"," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 11);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap f3bbc00b542dc1957ab7","'use strict';\n\nvar ArrayProto = Array.prototype;\nvar ObjProto = Object.prototype;\n\nvar escapeMap = {\n  '&': '&amp;',\n  '\"': '&quot;',\n  '\\'': '&#39;',\n  '<': '&lt;',\n  '>': '&gt;'\n};\n\nvar escapeRegex = /[&\"'<>]/g;\n\nvar exports = module.exports = {};\n\nfunction hasOwnProp(obj, k) {\n  return ObjProto.hasOwnProperty.call(obj, k);\n}\n\nexports.hasOwnProp = hasOwnProp;\n\nfunction lookupEscape(ch) {\n  return escapeMap[ch];\n}\n\nfunction _prettifyError(path, withInternals, err) {\n  if (!err.Update) {\n    // not one of ours, cast it\n    err = new exports.TemplateError(err);\n  }\n  err.Update(path);\n\n  // Unless they marked the dev flag, show them a trace from here\n  if (!withInternals) {\n    const old = err;\n    err = new Error(old.message);\n    err.name = old.name;\n  }\n\n  return err;\n}\n\nexports._prettifyError = _prettifyError;\n\nfunction TemplateError(message, lineno, colno) {\n  var err;\n  var cause;\n\n  if (message instanceof Error) {\n    cause = message;\n    message = `${cause.name}: ${cause.message}`;\n  }\n\n  if (Object.setPrototypeOf) {\n    err = new Error(message);\n    Object.setPrototypeOf(err, TemplateError.prototype);\n  } else {\n    err = this;\n    Object.defineProperty(err, 'message', {\n      enumerable: false,\n      writable: true,\n      value: message,\n    });\n  }\n\n  Object.defineProperty(err, 'name', {\n    value: 'Template render error',\n  });\n\n  if (Error.captureStackTrace) {\n    Error.captureStackTrace(err, this.constructor);\n  }\n\n  let getStack;\n\n  if (cause) {\n    const stackDescriptor = Object.getOwnPropertyDescriptor(cause, 'stack');\n    getStack = stackDescriptor && (stackDescriptor.get || (() => stackDescriptor.value));\n    if (!getStack) {\n      getStack = () => cause.stack;\n    }\n  } else {\n    const stack = (new Error(message)).stack;\n    getStack = (() => stack);\n  }\n\n  Object.defineProperty(err, 'stack', {\n    get: () => getStack.call(err),\n  });\n\n  Object.defineProperty(err, 'cause', {\n    value: cause\n  });\n\n  err.lineno = lineno;\n  err.colno = colno;\n  err.firstUpdate = true;\n\n  err.Update = function Update(path) {\n    let msg = '(' + (path || 'unknown path') + ')';\n\n    // only show lineno + colno next to path of template\n    // where error occurred\n    if (this.firstUpdate) {\n      if (this.lineno && this.colno) {\n        msg += ` [Line ${this.lineno}, Column ${this.colno}]`;\n      } else if (this.lineno) {\n        msg += ` [Line ${this.lineno}]`;\n      }\n    }\n\n    msg += '\\n ';\n    if (this.firstUpdate) {\n      msg += ' ';\n    }\n\n    this.message = msg + (this.message || '');\n    this.firstUpdate = false;\n    return this;\n  };\n\n  return err;\n}\n\n\nif (Object.setPrototypeOf) {\n  Object.setPrototypeOf(TemplateError.prototype, Error.prototype);\n} else {\n  TemplateError.prototype = Object.create(Error.prototype, {\n    constructor: {\n      value: TemplateError,\n    },\n  });\n}\n\nexports.TemplateError = TemplateError;\n\nfunction escape(val) {\n  return val.replace(escapeRegex, lookupEscape);\n}\n\nexports.escape = escape;\n\nfunction isFunction(obj) {\n  return ObjProto.toString.call(obj) === '[object Function]';\n}\n\nexports.isFunction = isFunction;\n\nfunction isArray(obj) {\n  return ObjProto.toString.call(obj) === '[object Array]';\n}\n\nexports.isArray = isArray;\n\nfunction isString(obj) {\n  return ObjProto.toString.call(obj) === '[object String]';\n}\n\nexports.isString = isString;\n\nfunction isObject(obj) {\n  return ObjProto.toString.call(obj) === '[object Object]';\n}\n\nexports.isObject = isObject;\n\nfunction groupBy(obj, val) {\n  const result = {};\n  const iterator = isFunction(val) ? val : (o) => o[val];\n  for (let i = 0; i < obj.length; i++) {\n    const value = obj[i];\n    const key = iterator(value, i);\n    (result[key] || (result[key] = [])).push(value);\n  }\n  return result;\n}\n\nexports.groupBy = groupBy;\n\nfunction toArray(obj) {\n  return Array.prototype.slice.call(obj);\n}\n\nexports.toArray = toArray;\n\nfunction without(array) {\n  const result = [];\n  if (!array) {\n    return result;\n  }\n  const length = array.length;\n  const contains = toArray(arguments).slice(1);\n  let index = -1;\n\n  while (++index < length) {\n    if (indexOf(contains, array[index]) === -1) {\n      result.push(array[index]);\n    }\n  }\n  return result;\n}\n\nexports.without = without;\n\nfunction repeat(char_, n) {\n  var str = '';\n  for (let i = 0; i < n; i++) {\n    str += char_;\n  }\n  return str;\n}\n\nexports.repeat = repeat;\n\nfunction each(obj, func, context) {\n  if (obj == null) {\n    return;\n  }\n\n  if (ArrayProto.forEach && obj.forEach === ArrayProto.forEach) {\n    obj.forEach(func, context);\n  } else if (obj.length === +obj.length) {\n    for (let i = 0, l = obj.length; i < l; i++) {\n      func.call(context, obj[i], i, obj);\n    }\n  }\n}\n\nexports.each = each;\n\nfunction map(obj, func) {\n  var results = [];\n  if (obj == null) {\n    return results;\n  }\n\n  if (ArrayProto.map && obj.map === ArrayProto.map) {\n    return obj.map(func);\n  }\n\n  for (let i = 0; i < obj.length; i++) {\n    results[results.length] = func(obj[i], i);\n  }\n\n  if (obj.length === +obj.length) {\n    results.length = obj.length;\n  }\n\n  return results;\n}\n\nexports.map = map;\n\nfunction asyncIter(arr, iter, cb) {\n  let i = -1;\n\n  function next() {\n    i++;\n\n    if (i < arr.length) {\n      iter(arr[i], i, next, cb);\n    } else {\n      cb();\n    }\n  }\n\n  next();\n}\n\nexports.asyncIter = asyncIter;\n\nfunction asyncFor(obj, iter, cb) {\n  const keys = keys_(obj || {});\n  const len = keys.length;\n  let i = -1;\n\n  function next() {\n    i++;\n    const k = keys[i];\n\n    if (i < len) {\n      iter(k, obj[k], i, len, next);\n    } else {\n      cb();\n    }\n  }\n\n  next();\n}\n\nexports.asyncFor = asyncFor;\n\nfunction indexOf(arr, searchElement, fromIndex) {\n  return Array.prototype.indexOf.call(arr || [], searchElement, fromIndex);\n}\n\nexports.indexOf = indexOf;\n\nfunction keys_(obj) {\n  /* eslint-disable no-restricted-syntax */\n  const arr = [];\n  for (let k in obj) {\n    if (hasOwnProp(obj, k)) {\n      arr.push(k);\n    }\n  }\n  return arr;\n}\n\nexports.keys = keys_;\n\nfunction _entries(obj) {\n  return keys_(obj).map((k) => [k, obj[k]]);\n}\n\nexports._entries = _entries;\n\nfunction _values(obj) {\n  return keys_(obj).map((k) => obj[k]);\n}\n\nexports._values = _values;\n\nfunction extend(obj1, obj2) {\n  obj1 = obj1 || {};\n  keys_(obj2).forEach(k => {\n    obj1[k] = obj2[k];\n  });\n  return obj1;\n}\n\nexports._assign = exports.extend = extend;\n\nfunction inOperator(key, val) {\n  if (isArray(val) || isString(val)) {\n    return val.indexOf(key) !== -1;\n  } else if (isObject(val)) {\n    return key in val;\n  }\n  throw new Error('Cannot use \"in\" operator to search for \"'\n    + key + '\" in unexpected types.');\n}\n\nexports.inOperator = inOperator;\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/lib.js","'use strict';\n\n// A simple class system, more documentation to come\nconst lib = require('./lib');\n\nfunction parentWrap(parent, prop) {\n  if (typeof parent !== 'function' || typeof prop !== 'function') {\n    return prop;\n  }\n  return function wrap() {\n    // Save the current parent method\n    const tmp = this.parent;\n\n    // Set parent to the previous method, call, and restore\n    this.parent = parent;\n    const res = prop.apply(this, arguments);\n    this.parent = tmp;\n\n    return res;\n  };\n}\n\nfunction extendClass(cls, name, props) {\n  props = props || {};\n\n  lib.keys(props).forEach(k => {\n    props[k] = parentWrap(cls.prototype[k], props[k]);\n  });\n\n  class subclass extends cls {\n    get typename() {\n      return name;\n    }\n  }\n\n  lib._assign(subclass.prototype, props);\n\n  return subclass;\n}\n\nclass Obj {\n  constructor(...args) {\n    // Unfortunately necessary for backwards compatibility\n    this.init(...args);\n  }\n\n  init() {}\n\n  get typename() {\n    return this.constructor.name;\n  }\n\n  static extend(name, props) {\n    if (typeof name === 'object') {\n      props = name;\n      name = 'anonymous';\n    }\n    return extendClass(this, name, props);\n  }\n}\n\nmodule.exports = Obj;\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/object.js","'use strict';\n\nvar lib = require('./lib');\nvar arrayFrom = Array.from;\nvar supportsIterators = (\n  typeof Symbol === 'function' && Symbol.iterator && typeof arrayFrom === 'function'\n);\n\n\n// Frames keep track of scoping both at compile-time and run-time so\n// we know how to access variables. Block tags can introduce special\n// variables, for example.\nclass Frame {\n  constructor(parent, isolateWrites) {\n    this.variables = {};\n    this.parent = parent;\n    this.topLevel = false;\n    // if this is true, writes (set) should never propagate upwards past\n    // this frame to its parent (though reads may).\n    this.isolateWrites = isolateWrites;\n  }\n\n  set(name, val, resolveUp) {\n    // Allow variables with dots by automatically creating the\n    // nested structure\n    var parts = name.split('.');\n    var obj = this.variables;\n    var frame = this;\n\n    if (resolveUp) {\n      if ((frame = this.resolve(parts[0], true))) {\n        frame.set(name, val);\n        return;\n      }\n    }\n\n    for (let i = 0; i < parts.length - 1; i++) {\n      const id = parts[i];\n\n      if (!obj[id]) {\n        obj[id] = {};\n      }\n      obj = obj[id];\n    }\n\n    obj[parts[parts.length - 1]] = val;\n  }\n\n  get(name) {\n    var val = this.variables[name];\n    if (val !== undefined) {\n      return val;\n    }\n    return null;\n  }\n\n  lookup(name) {\n    var p = this.parent;\n    var val = this.variables[name];\n    if (val !== undefined) {\n      return val;\n    }\n    return p && p.lookup(name);\n  }\n\n  resolve(name, forWrite) {\n    var p = (forWrite && this.isolateWrites) ? undefined : this.parent;\n    var val = this.variables[name];\n    if (val !== undefined) {\n      return this;\n    }\n    return p && p.resolve(name);\n  }\n\n  push(isolateWrites) {\n    return new Frame(this, isolateWrites);\n  }\n\n  pop() {\n    return this.parent;\n  }\n}\n\nfunction makeMacro(argNames, kwargNames, func) {\n  return (...macroArgs) => {\n    var argCount = numArgs(macroArgs);\n    var args;\n    var kwargs = getKeywordArgs(macroArgs);\n\n    if (argCount > argNames.length) {\n      args = macroArgs.slice(0, argNames.length);\n\n      // Positional arguments that should be passed in as\n      // keyword arguments (essentially default values)\n      macroArgs.slice(args.length, argCount).forEach((val, i) => {\n        if (i < kwargNames.length) {\n          kwargs[kwargNames[i]] = val;\n        }\n      });\n      args.push(kwargs);\n    } else if (argCount < argNames.length) {\n      args = macroArgs.slice(0, argCount);\n\n      for (let i = argCount; i < argNames.length; i++) {\n        const arg = argNames[i];\n\n        // Keyword arguments that should be passed as\n        // positional arguments, i.e. the caller explicitly\n        // used the name of a positional arg\n        args.push(kwargs[arg]);\n        delete kwargs[arg];\n      }\n      args.push(kwargs);\n    } else {\n      args = macroArgs;\n    }\n\n    return func.apply(this, args);\n  };\n}\n\nfunction makeKeywordArgs(obj) {\n  obj.__keywords = true;\n  return obj;\n}\n\nfunction isKeywordArgs(obj) {\n  return obj && Object.prototype.hasOwnProperty.call(obj, '__keywords');\n}\n\nfunction getKeywordArgs(args) {\n  var len = args.length;\n  if (len) {\n    const lastArg = args[len - 1];\n    if (isKeywordArgs(lastArg)) {\n      return lastArg;\n    }\n  }\n  return {};\n}\n\nfunction numArgs(args) {\n  var len = args.length;\n  if (len === 0) {\n    return 0;\n  }\n\n  const lastArg = args[len - 1];\n  if (isKeywordArgs(lastArg)) {\n    return len - 1;\n  } else {\n    return len;\n  }\n}\n\n// A SafeString object indicates that the string should not be\n// autoescaped. This happens magically because autoescaping only\n// occurs on primitive string objects.\nfunction SafeString(val) {\n  if (typeof val !== 'string') {\n    return val;\n  }\n\n  this.val = val;\n  this.length = val.length;\n}\n\nSafeString.prototype = Object.create(String.prototype, {\n  length: {\n    writable: true,\n    configurable: true,\n    value: 0\n  }\n});\nSafeString.prototype.valueOf = function valueOf() {\n  return this.val;\n};\nSafeString.prototype.toString = function toString() {\n  return this.val;\n};\n\nfunction copySafeness(dest, target) {\n  if (dest instanceof SafeString) {\n    return new SafeString(target);\n  }\n  return target.toString();\n}\n\nfunction markSafe(val) {\n  var type = typeof val;\n\n  if (type === 'string') {\n    return new SafeString(val);\n  } else if (type !== 'function') {\n    return val;\n  } else {\n    return function wrapSafe(args) {\n      var ret = val.apply(this, arguments);\n\n      if (typeof ret === 'string') {\n        return new SafeString(ret);\n      }\n\n      return ret;\n    };\n  }\n}\n\nfunction suppressValue(val, autoescape) {\n  val = (val !== undefined && val !== null) ? val : '';\n\n  if (autoescape && !(val instanceof SafeString)) {\n    val = lib.escape(val.toString());\n  }\n\n  return val;\n}\n\nfunction ensureDefined(val, lineno, colno) {\n  if (val === null || val === undefined) {\n    throw new lib.TemplateError(\n      'attempted to output null or undefined value',\n      lineno + 1,\n      colno + 1\n    );\n  }\n  return val;\n}\n\nfunction memberLookup(obj, val) {\n  if (obj === undefined || obj === null) {\n    return undefined;\n  }\n\n  if (typeof obj[val] === 'function') {\n    return (...args) => obj[val].apply(obj, args);\n  }\n\n  return obj[val];\n}\n\nfunction callWrap(obj, name, context, args) {\n  if (!obj) {\n    throw new Error('Unable to call `' + name + '`, which is undefined or falsey');\n  } else if (typeof obj !== 'function') {\n    throw new Error('Unable to call `' + name + '`, which is not a function');\n  }\n\n  return obj.apply(context, args);\n}\n\nfunction contextOrFrameLookup(context, frame, name) {\n  var val = frame.lookup(name);\n  return (val !== undefined) ?\n    val :\n    context.lookup(name);\n}\n\nfunction handleError(error, lineno, colno) {\n  if (error.lineno) {\n    return error;\n  } else {\n    return new lib.TemplateError(error, lineno, colno);\n  }\n}\n\nfunction asyncEach(arr, dimen, iter, cb) {\n  if (lib.isArray(arr)) {\n    const len = arr.length;\n\n    lib.asyncIter(arr, function iterCallback(item, i, next) {\n      switch (dimen) {\n        case 1:\n          iter(item, i, len, next);\n          break;\n        case 2:\n          iter(item[0], item[1], i, len, next);\n          break;\n        case 3:\n          iter(item[0], item[1], item[2], i, len, next);\n          break;\n        default:\n          item.push(i, len, next);\n          iter.apply(this, item);\n      }\n    }, cb);\n  } else {\n    lib.asyncFor(arr, function iterCallback(key, val, i, len, next) {\n      iter(key, val, i, len, next);\n    }, cb);\n  }\n}\n\nfunction asyncAll(arr, dimen, func, cb) {\n  var finished = 0;\n  var len;\n  var outputArr;\n\n  function done(i, output) {\n    finished++;\n    outputArr[i] = output;\n\n    if (finished === len) {\n      cb(null, outputArr.join(''));\n    }\n  }\n\n  if (lib.isArray(arr)) {\n    len = arr.length;\n    outputArr = new Array(len);\n\n    if (len === 0) {\n      cb(null, '');\n    } else {\n      for (let i = 0; i < arr.length; i++) {\n        const item = arr[i];\n\n        switch (dimen) {\n          case 1:\n            func(item, i, len, done);\n            break;\n          case 2:\n            func(item[0], item[1], i, len, done);\n            break;\n          case 3:\n            func(item[0], item[1], item[2], i, len, done);\n            break;\n          default:\n            item.push(i, len, done);\n            func.apply(this, item);\n        }\n      }\n    }\n  } else {\n    const keys = lib.keys(arr || {});\n    len = keys.length;\n    outputArr = new Array(len);\n\n    if (len === 0) {\n      cb(null, '');\n    } else {\n      for (let i = 0; i < keys.length; i++) {\n        const k = keys[i];\n        func(k, arr[k], i, len, done);\n      }\n    }\n  }\n}\n\nfunction fromIterator(arr) {\n  if (typeof arr !== 'object' || arr === null || lib.isArray(arr)) {\n    return arr;\n  } else if (supportsIterators && Symbol.iterator in arr) {\n    return arrayFrom(arr);\n  } else {\n    return arr;\n  }\n}\n\nmodule.exports = {\n  Frame: Frame,\n  makeMacro: makeMacro,\n  makeKeywordArgs: makeKeywordArgs,\n  numArgs: numArgs,\n  suppressValue: suppressValue,\n  ensureDefined: ensureDefined,\n  memberLookup: memberLookup,\n  contextOrFrameLookup: contextOrFrameLookup,\n  callWrap: callWrap,\n  handleError: handleError,\n  isArray: lib.isArray,\n  keys: lib.keys,\n  SafeString: SafeString,\n  copySafeness: copySafeness,\n  markSafe: markSafe,\n  asyncEach: asyncEach,\n  asyncAll: asyncAll,\n  inOperator: lib.inOperator,\n  fromIterator: fromIterator\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/runtime.js","'use strict';\n\nconst Obj = require('./object');\n\nfunction traverseAndCheck(obj, type, results) {\n  if (obj instanceof type) {\n    results.push(obj);\n  }\n\n  if (obj instanceof Node) {\n    obj.findAll(type, results);\n  }\n}\n\nclass Node extends Obj {\n  init(lineno, colno, ...args) {\n    this.lineno = lineno;\n    this.colno = colno;\n\n    this.fields.forEach((field, i) => {\n      // The first two args are line/col numbers, so offset by 2\n      var val = arguments[i + 2];\n\n      // Fields should never be undefined, but null. It makes\n      // testing easier to normalize values.\n      if (val === undefined) {\n        val = null;\n      }\n\n      this[field] = val;\n    });\n  }\n\n  findAll(type, results) {\n    results = results || [];\n\n    if (this instanceof NodeList) {\n      this.children.forEach(child => traverseAndCheck(child, type, results));\n    } else {\n      this.fields.forEach(field => traverseAndCheck(this[field], type, results));\n    }\n\n    return results;\n  }\n\n  iterFields(func) {\n    this.fields.forEach((field) => {\n      func(this[field], field);\n    });\n  }\n}\n\n// Abstract nodes\nclass Value extends Node {\n  get typename() { return 'Value'; }\n  get fields() {\n    return ['value'];\n  }\n}\n\n// Concrete nodes\nclass NodeList extends Node {\n  get typename() { return 'NodeList'; }\n  get fields() { return ['children']; }\n\n  init(lineno, colno, nodes) {\n    super.init(lineno, colno, nodes || []);\n  }\n\n  addChild(node) {\n    this.children.push(node);\n  }\n}\n\nconst Root = NodeList.extend('Root');\nconst Literal = Value.extend('Literal');\nconst Symbol = Value.extend('Symbol');\nconst Group = NodeList.extend('Group');\nconst ArrayNode = NodeList.extend('Array');\nconst Pair = Node.extend('Pair', { fields: ['key', 'value'] });\nconst Dict = NodeList.extend('Dict');\nconst LookupVal = Node.extend('LookupVal', { fields: ['target', 'val'] });\nconst If = Node.extend('If', { fields: ['cond', 'body', 'else_'] });\nconst IfAsync = If.extend('IfAsync');\nconst InlineIf = Node.extend('InlineIf', { fields: ['cond', 'body', 'else_'] });\nconst For = Node.extend('For', { fields: ['arr', 'name', 'body', 'else_'] });\nconst AsyncEach = For.extend('AsyncEach');\nconst AsyncAll = For.extend('AsyncAll');\nconst Macro = Node.extend('Macro', { fields: ['name', 'args', 'body'] });\nconst Caller = Macro.extend('Caller');\nconst Import = Node.extend('Import', { fields: ['template', 'target', 'withContext'] });\n\nclass FromImport extends Node {\n  get typename() { return 'FromImport'; }\n  get fields() { return ['template', 'names', 'withContext']; }\n\n  init(lineno, colno, template, names, withContext) {\n    super.init(lineno, colno, template, names || new NodeList(), withContext);\n  }\n}\n\nconst FunCall = Node.extend('FunCall', { fields: ['name', 'args'] });\nconst Filter = FunCall.extend('Filter');\nconst FilterAsync = Filter.extend('FilterAsync', { fields: ['name', 'args', 'symbol'] });\nconst KeywordArgs = Dict.extend('KeywordArgs');\nconst Block = Node.extend('Block', { fields: ['name', 'body'] });\nconst Super = Node.extend('Super', { fields: ['blockName', 'symbol'] });\nconst TemplateRef = Node.extend('TemplateRef', { fields: ['template'] });\nconst Extends = TemplateRef.extend('Extends');\nconst Include = Node.extend('Include', { fields: ['template', 'ignoreMissing'] });\nconst Set = Node.extend('Set', { fields: ['targets', 'value'] });\nconst Switch = Node.extend('Switch', { fields: ['expr', 'cases', 'default'] });\nconst Case = Node.extend('Case', { fields: ['cond', 'body'] });\nconst Output = NodeList.extend('Output');\nconst Capture = Node.extend('Capture', { fields: ['body'] });\nconst TemplateData = Literal.extend('TemplateData');\nconst UnaryOp = Node.extend('UnaryOp', { fields: ['target'] });\nconst BinOp = Node.extend('BinOp', { fields: ['left', 'right'] });\nconst In = BinOp.extend('In');\nconst Is = BinOp.extend('Is');\nconst Or = BinOp.extend('Or');\nconst And = BinOp.extend('And');\nconst Not = UnaryOp.extend('Not');\nconst Add = BinOp.extend('Add');\nconst Concat = BinOp.extend('Concat');\nconst Sub = BinOp.extend('Sub');\nconst Mul = BinOp.extend('Mul');\nconst Div = BinOp.extend('Div');\nconst FloorDiv = BinOp.extend('FloorDiv');\nconst Mod = BinOp.extend('Mod');\nconst Pow = BinOp.extend('Pow');\nconst Neg = UnaryOp.extend('Neg');\nconst Pos = UnaryOp.extend('Pos');\nconst Compare = Node.extend('Compare', { fields: ['expr', 'ops'] });\nconst CompareOperand = Node.extend('CompareOperand', { fields: ['expr', 'type'] });\nconst CallExtension = Node.extend('CallExtension', {\n  init(ext, prop, args, contentArgs) {\n    this.parent();\n    this.extName = ext.__name || ext;\n    this.prop = prop;\n    this.args = args || new NodeList();\n    this.contentArgs = contentArgs || [];\n    this.autoescape = ext.autoescape;\n  },\n  fields: ['extName', 'prop', 'args', 'contentArgs']\n});\nconst CallExtensionAsync = CallExtension.extend('CallExtensionAsync');\n\n// This is hacky, but this is just a debugging function anyway\nfunction print(str, indent, inline) {\n  var lines = str.split('\\n');\n\n  lines.forEach((line, i) => {\n    if (line && ((inline && i > 0) || !inline)) {\n      process.stdout.write((' ').repeat(indent));\n    }\n    const nl = (i === lines.length - 1) ? '' : '\\n';\n    process.stdout.write(`${line}${nl}`);\n  });\n}\n\n// Print the AST in a nicely formatted tree format for debuggin\nfunction printNodes(node, indent) {\n  indent = indent || 0;\n\n  print(node.typename + ': ', indent);\n\n  if (node instanceof NodeList) {\n    print('\\n');\n    node.children.forEach((n) => {\n      printNodes(n, indent + 2);\n    });\n  } else if (node instanceof CallExtension) {\n    print(`${node.extName}.${node.prop}\\n`);\n\n    if (node.args) {\n      printNodes(node.args, indent + 2);\n    }\n\n    if (node.contentArgs) {\n      node.contentArgs.forEach((n) => {\n        printNodes(n, indent + 2);\n      });\n    }\n  } else {\n    let nodes = [];\n    let props = null;\n\n    node.iterFields((val, fieldName) => {\n      if (val instanceof Node) {\n        nodes.push([fieldName, val]);\n      } else {\n        props = props || {};\n        props[fieldName] = val;\n      }\n    });\n\n    if (props) {\n      print(JSON.stringify(props, null, 2) + '\\n', null, true);\n    } else {\n      print('\\n');\n    }\n\n    nodes.forEach(([fieldName, n]) => {\n      print(`[${fieldName}] =>`, indent + 2);\n      printNodes(n, indent + 4);\n    });\n  }\n}\n\nmodule.exports = {\n  Node: Node,\n  Root: Root,\n  NodeList: NodeList,\n  Value: Value,\n  Literal: Literal,\n  Symbol: Symbol,\n  Group: Group,\n  Array: ArrayNode,\n  Pair: Pair,\n  Dict: Dict,\n  Output: Output,\n  Capture: Capture,\n  TemplateData: TemplateData,\n  If: If,\n  IfAsync: IfAsync,\n  InlineIf: InlineIf,\n  For: For,\n  AsyncEach: AsyncEach,\n  AsyncAll: AsyncAll,\n  Macro: Macro,\n  Caller: Caller,\n  Import: Import,\n  FromImport: FromImport,\n  FunCall: FunCall,\n  Filter: Filter,\n  FilterAsync: FilterAsync,\n  KeywordArgs: KeywordArgs,\n  Block: Block,\n  Super: Super,\n  Extends: Extends,\n  Include: Include,\n  Set: Set,\n  Switch: Switch,\n  Case: Case,\n  LookupVal: LookupVal,\n  BinOp: BinOp,\n  In: In,\n  Is: Is,\n  Or: Or,\n  And: And,\n  Not: Not,\n  Add: Add,\n  Concat: Concat,\n  Sub: Sub,\n  Mul: Mul,\n  Div: Div,\n  FloorDiv: FloorDiv,\n  Mod: Mod,\n  Pow: Pow,\n  Neg: Neg,\n  Pos: Pos,\n  Compare: Compare,\n  CompareOperand: CompareOperand,\n\n  CallExtension: CallExtension,\n  CallExtensionAsync: CallExtensionAsync,\n\n  printNodes: printNodes\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/nodes.js","'use strict';\n\nconst parser = require('./parser');\nconst transformer = require('./transformer');\nconst nodes = require('./nodes');\nconst {TemplateError} = require('./lib');\nconst {Frame} = require('./runtime');\nconst Obj = require('./object');\n\n// These are all the same for now, but shouldn't be passed straight\n// through\nconst compareOps = {\n  '==': '==',\n  '===': '===',\n  '!=': '!=',\n  '!==': '!==',\n  '<': '<',\n  '>': '>',\n  '<=': '<=',\n  '>=': '>='\n};\n\nclass Compiler extends Obj {\n  init(templateName, throwOnUndefined) {\n    this.templateName = templateName;\n    this.codebuf = [];\n    this.lastId = 0;\n    this.buffer = null;\n    this.bufferStack = [];\n    this._scopeClosers = '';\n    this.inBlock = false;\n    this.throwOnUndefined = throwOnUndefined;\n  }\n\n  fail(msg, lineno, colno) {\n    if (lineno !== undefined) {\n      lineno += 1;\n    }\n    if (colno !== undefined) {\n      colno += 1;\n    }\n\n    throw new TemplateError(msg, lineno, colno);\n  }\n\n  _pushBuffer() {\n    const id = this._tmpid();\n    this.bufferStack.push(this.buffer);\n    this.buffer = id;\n    this._emit(`var ${this.buffer} = \"\";`);\n    return id;\n  }\n\n  _popBuffer() {\n    this.buffer = this.bufferStack.pop();\n  }\n\n  _emit(code) {\n    this.codebuf.push(code);\n  }\n\n  _emitLine(code) {\n    this._emit(code + '\\n');\n  }\n\n  _emitLines(...lines) {\n    lines.forEach((line) => this._emitLine(line));\n  }\n\n  _emitFuncBegin(name) {\n    this.buffer = 'output';\n    this._scopeClosers = '';\n    this._emitLine('function ' + name + '(env, context, frame, runtime, cb) {');\n    this._emitLine('var lineno = null;');\n    this._emitLine('var colno = null;');\n    this._emitLine('var ' + this.buffer + ' = \"\";');\n    this._emitLine('try {');\n  }\n\n  _emitFuncEnd(noReturn) {\n    if (!noReturn) {\n      this._emitLine('cb(null, ' + this.buffer + ');');\n    }\n\n    this._closeScopeLevels();\n    this._emitLine('} catch (e) {');\n    this._emitLine('  cb(runtime.handleError(e, lineno, colno));');\n    this._emitLine('}');\n    this._emitLine('}');\n    this.buffer = null;\n  }\n\n  _addScopeLevel() {\n    this._scopeClosers += '})';\n  }\n\n  _closeScopeLevels() {\n    this._emitLine(this._scopeClosers + ';');\n    this._scopeClosers = '';\n  }\n\n  _withScopedSyntax(func) {\n    var _scopeClosers = this._scopeClosers;\n    this._scopeClosers = '';\n\n    func.call(this);\n\n    this._closeScopeLevels();\n    this._scopeClosers = _scopeClosers;\n  }\n\n  _makeCallback(res) {\n    var err = this._tmpid();\n\n    return 'function(' + err + (res ? ',' + res : '') + ') {\\n' +\n      'if(' + err + ') { cb(' + err + '); return; }';\n  }\n\n  _tmpid() {\n    this.lastId++;\n    return 't_' + this.lastId;\n  }\n\n  _templateName() {\n    return this.templateName == null ? 'undefined' : JSON.stringify(this.templateName);\n  }\n\n  _compileChildren(node, frame) {\n    node.children.forEach((child) => {\n      this.compile(child, frame);\n    });\n  }\n\n  _compileAggregate(node, frame, startChar, endChar) {\n    if (startChar) {\n      this._emit(startChar);\n    }\n\n    node.children.forEach((child, i) => {\n      if (i > 0) {\n        this._emit(',');\n      }\n\n      this.compile(child, frame);\n    });\n\n    if (endChar) {\n      this._emit(endChar);\n    }\n  }\n\n  _compileExpression(node, frame) {\n    // TODO: I'm not really sure if this type check is worth it or\n    // not.\n    this.assertType(\n      node,\n      nodes.Literal,\n      nodes.Symbol,\n      nodes.Group,\n      nodes.Array,\n      nodes.Dict,\n      nodes.FunCall,\n      nodes.Caller,\n      nodes.Filter,\n      nodes.LookupVal,\n      nodes.Compare,\n      nodes.InlineIf,\n      nodes.In,\n      nodes.Is,\n      nodes.And,\n      nodes.Or,\n      nodes.Not,\n      nodes.Add,\n      nodes.Concat,\n      nodes.Sub,\n      nodes.Mul,\n      nodes.Div,\n      nodes.FloorDiv,\n      nodes.Mod,\n      nodes.Pow,\n      nodes.Neg,\n      nodes.Pos,\n      nodes.Compare,\n      nodes.NodeList\n    );\n    this.compile(node, frame);\n  }\n\n  assertType(node, ...types) {\n    if (!types.some(t => node instanceof t)) {\n      this.fail(`assertType: invalid type: ${node.typename}`, node.lineno, node.colno);\n    }\n  }\n\n  compileCallExtension(node, frame, async) {\n    var args = node.args;\n    var contentArgs = node.contentArgs;\n    var autoescape = typeof node.autoescape === 'boolean' ? node.autoescape : true;\n\n    if (!async) {\n      this._emit(`${this.buffer} += runtime.suppressValue(`);\n    }\n\n    this._emit(`env.getExtension(\"${node.extName}\")[\"${node.prop}\"](`);\n    this._emit('context');\n\n    if (args || contentArgs) {\n      this._emit(',');\n    }\n\n    if (args) {\n      if (!(args instanceof nodes.NodeList)) {\n        this.fail('compileCallExtension: arguments must be a NodeList, ' +\n          'use `parser.parseSignature`');\n      }\n\n      args.children.forEach((arg, i) => {\n        // Tag arguments are passed normally to the call. Note\n        // that keyword arguments are turned into a single js\n        // object as the last argument, if they exist.\n        this._compileExpression(arg, frame);\n\n        if (i !== args.children.length - 1 || contentArgs.length) {\n          this._emit(',');\n        }\n      });\n    }\n\n    if (contentArgs.length) {\n      contentArgs.forEach((arg, i) => {\n        if (i > 0) {\n          this._emit(',');\n        }\n\n        if (arg) {\n          this._emitLine('function(cb) {');\n          this._emitLine('if(!cb) { cb = function(err) { if(err) { throw err; }}}');\n          const id = this._pushBuffer();\n\n          this._withScopedSyntax(() => {\n            this.compile(arg, frame);\n            this._emitLine(`cb(null, ${id});`);\n          });\n\n          this._popBuffer();\n          this._emitLine(`return ${id};`);\n          this._emitLine('}');\n        } else {\n          this._emit('null');\n        }\n      });\n    }\n\n    if (async) {\n      const res = this._tmpid();\n      this._emitLine(', ' + this._makeCallback(res));\n      this._emitLine(\n        `${this.buffer} += runtime.suppressValue(${res}, ${autoescape} && env.opts.autoescape);`);\n      this._addScopeLevel();\n    } else {\n      this._emit(')');\n      this._emit(`, ${autoescape} && env.opts.autoescape);\\n`);\n    }\n  }\n\n  compileCallExtensionAsync(node, frame) {\n    this.compileCallExtension(node, frame, true);\n  }\n\n  compileNodeList(node, frame) {\n    this._compileChildren(node, frame);\n  }\n\n  compileLiteral(node) {\n    if (typeof node.value === 'string') {\n      let val = node.value.replace(/\\\\/g, '\\\\\\\\');\n      val = val.replace(/\"/g, '\\\\\"');\n      val = val.replace(/\\n/g, '\\\\n');\n      val = val.replace(/\\r/g, '\\\\r');\n      val = val.replace(/\\t/g, '\\\\t');\n      this._emit(`\"${val}\"`);\n    } else if (node.value === null) {\n      this._emit('null');\n    } else {\n      this._emit(node.value.toString());\n    }\n  }\n\n  compileSymbol(node, frame) {\n    var name = node.value;\n    var v = frame.lookup(name);\n\n    if (v) {\n      this._emit(v);\n    } else {\n      this._emit('runtime.contextOrFrameLookup(' +\n        'context, frame, \"' + name + '\")');\n    }\n  }\n\n  compileGroup(node, frame) {\n    this._compileAggregate(node, frame, '(', ')');\n  }\n\n  compileArray(node, frame) {\n    this._compileAggregate(node, frame, '[', ']');\n  }\n\n  compileDict(node, frame) {\n    this._compileAggregate(node, frame, '{', '}');\n  }\n\n  compilePair(node, frame) {\n    var key = node.key;\n    var val = node.value;\n\n    if (key instanceof nodes.Symbol) {\n      key = new nodes.Literal(key.lineno, key.colno, key.value);\n    } else if (!(key instanceof nodes.Literal &&\n      typeof key.value === 'string')) {\n      this.fail('compilePair: Dict keys must be strings or names',\n        key.lineno,\n        key.colno);\n    }\n\n    this.compile(key, frame);\n    this._emit(': ');\n    this._compileExpression(val, frame);\n  }\n\n  compileInlineIf(node, frame) {\n    this._emit('(');\n    this.compile(node.cond, frame);\n    this._emit('?');\n    this.compile(node.body, frame);\n    this._emit(':');\n    if (node.else_ !== null) {\n      this.compile(node.else_, frame);\n    } else {\n      this._emit('\"\"');\n    }\n    this._emit(')');\n  }\n\n  compileIn(node, frame) {\n    this._emit('runtime.inOperator(');\n    this.compile(node.left, frame);\n    this._emit(',');\n    this.compile(node.right, frame);\n    this._emit(')');\n  }\n\n  compileIs(node, frame) {\n    // first, we need to try to get the name of the test function, if it's a\n    // callable (i.e., has args) and not a symbol.\n    var right = node.right.name\n      ? node.right.name.value\n      // otherwise go with the symbol value\n      : node.right.value;\n    this._emit('env.getTest(\"' + right + '\").call(context, ');\n    this.compile(node.left, frame);\n    // compile the arguments for the callable if they exist\n    if (node.right.args) {\n      this._emit(',');\n      this.compile(node.right.args, frame);\n    }\n    this._emit(') === true');\n  }\n\n  _binOpEmitter(node, frame, str) {\n    this.compile(node.left, frame);\n    this._emit(str);\n    this.compile(node.right, frame);\n  }\n\n  // ensure concatenation instead of addition\n  // by adding empty string in between\n  compileOr(node, frame) {\n    return this._binOpEmitter(node, frame, ' || ');\n  }\n\n  compileAnd(node, frame) {\n    return this._binOpEmitter(node, frame, ' && ');\n  }\n\n  compileAdd(node, frame) {\n    return this._binOpEmitter(node, frame, ' + ');\n  }\n\n  compileConcat(node, frame) {\n    return this._binOpEmitter(node, frame, ' + \"\" + ');\n  }\n\n  compileSub(node, frame) {\n    return this._binOpEmitter(node, frame, ' - ');\n  }\n\n  compileMul(node, frame) {\n    return this._binOpEmitter(node, frame, ' * ');\n  }\n\n  compileDiv(node, frame) {\n    return this._binOpEmitter(node, frame, ' / ');\n  }\n\n  compileMod(node, frame) {\n    return this._binOpEmitter(node, frame, ' % ');\n  }\n\n  compileNot(node, frame) {\n    this._emit('!');\n    this.compile(node.target, frame);\n  }\n\n  compileFloorDiv(node, frame) {\n    this._emit('Math.floor(');\n    this.compile(node.left, frame);\n    this._emit(' / ');\n    this.compile(node.right, frame);\n    this._emit(')');\n  }\n\n  compilePow(node, frame) {\n    this._emit('Math.pow(');\n    this.compile(node.left, frame);\n    this._emit(', ');\n    this.compile(node.right, frame);\n    this._emit(')');\n  }\n\n  compileNeg(node, frame) {\n    this._emit('-');\n    this.compile(node.target, frame);\n  }\n\n  compilePos(node, frame) {\n    this._emit('+');\n    this.compile(node.target, frame);\n  }\n\n  compileCompare(node, frame) {\n    this.compile(node.expr, frame);\n\n    node.ops.forEach((op) => {\n      this._emit(` ${compareOps[op.type]} `);\n      this.compile(op.expr, frame);\n    });\n  }\n\n  compileLookupVal(node, frame) {\n    this._emit('runtime.memberLookup((');\n    this._compileExpression(node.target, frame);\n    this._emit('),');\n    this._compileExpression(node.val, frame);\n    this._emit(')');\n  }\n\n  _getNodeName(node) {\n    switch (node.typename) {\n      case 'Symbol':\n        return node.value;\n      case 'FunCall':\n        return 'the return value of (' + this._getNodeName(node.name) + ')';\n      case 'LookupVal':\n        return this._getNodeName(node.target) + '[\"' +\n          this._getNodeName(node.val) + '\"]';\n      case 'Literal':\n        return node.value.toString();\n      default:\n        return '--expression--';\n    }\n  }\n\n  compileFunCall(node, frame) {\n    // Keep track of line/col info at runtime by settings\n    // variables within an expression. An expression in javascript\n    // like (x, y, z) returns the last value, and x and y can be\n    // anything\n    this._emit('(lineno = ' + node.lineno +\n      ', colno = ' + node.colno + ', ');\n\n    this._emit('runtime.callWrap(');\n    // Compile it as normal.\n    this._compileExpression(node.name, frame);\n\n    // Output the name of what we're calling so we can get friendly errors\n    // if the lookup fails.\n    this._emit(', \"' + this._getNodeName(node.name).replace(/\"/g, '\\\\\"') + '\", context, ');\n\n    this._compileAggregate(node.args, frame, '[', '])');\n\n    this._emit(')');\n  }\n\n  compileFilter(node, frame) {\n    var name = node.name;\n    this.assertType(name, nodes.Symbol);\n    this._emit('env.getFilter(\"' + name.value + '\").call(context, ');\n    this._compileAggregate(node.args, frame);\n    this._emit(')');\n  }\n\n  compileFilterAsync(node, frame) {\n    var name = node.name;\n    var symbol = node.symbol.value;\n\n    this.assertType(name, nodes.Symbol);\n\n    frame.set(symbol, symbol);\n\n    this._emit('env.getFilter(\"' + name.value + '\").call(context, ');\n    this._compileAggregate(node.args, frame);\n    this._emitLine(', ' + this._makeCallback(symbol));\n\n    this._addScopeLevel();\n  }\n\n  compileKeywordArgs(node, frame) {\n    this._emit('runtime.makeKeywordArgs(');\n    this.compileDict(node, frame);\n    this._emit(')');\n  }\n\n  compileSet(node, frame) {\n    var ids = [];\n\n    // Lookup the variable names for each identifier and create\n    // new ones if necessary\n    node.targets.forEach((target) => {\n      var name = target.value;\n      var id = frame.lookup(name);\n\n      if (id === null || id === undefined) {\n        id = this._tmpid();\n\n        // Note: This relies on js allowing scope across\n        // blocks, in case this is created inside an `if`\n        this._emitLine('var ' + id + ';');\n      }\n\n      ids.push(id);\n    });\n\n    if (node.value) {\n      this._emit(ids.join(' = ') + ' = ');\n      this._compileExpression(node.value, frame);\n      this._emitLine(';');\n    } else {\n      this._emit(ids.join(' = ') + ' = ');\n      this.compile(node.body, frame);\n      this._emitLine(';');\n    }\n\n    node.targets.forEach((target, i) => {\n      var id = ids[i];\n      var name = target.value;\n\n      // We are running this for every var, but it's very\n      // uncommon to assign to multiple vars anyway\n      this._emitLine(`frame.set(\"${name}\", ${id}, true);`);\n\n      this._emitLine('if(frame.topLevel) {');\n      this._emitLine(`context.setVariable(\"${name}\", ${id});`);\n      this._emitLine('}');\n\n      if (name.charAt(0) !== '_') {\n        this._emitLine('if(frame.topLevel) {');\n        this._emitLine(`context.addExport(\"${name}\", ${id});`);\n        this._emitLine('}');\n      }\n    });\n  }\n\n  compileSwitch(node, frame) {\n    this._emit('switch (');\n    this.compile(node.expr, frame);\n    this._emit(') {');\n    node.cases.forEach((c, i) => {\n      this._emit('case ');\n      this.compile(c.cond, frame);\n      this._emit(': ');\n      this.compile(c.body, frame);\n      // preserve fall-throughs\n      if (c.body.children.length) {\n        this._emitLine('break;');\n      }\n    });\n    if (node.default) {\n      this._emit('default:');\n      this.compile(node.default, frame);\n    }\n    this._emit('}');\n  }\n\n  compileIf(node, frame, async) {\n    this._emit('if(');\n    this._compileExpression(node.cond, frame);\n    this._emitLine(') {');\n\n    this._withScopedSyntax(() => {\n      this.compile(node.body, frame);\n\n      if (async) {\n        this._emit('cb()');\n      }\n    });\n\n    if (node.else_) {\n      this._emitLine('}\\nelse {');\n\n      this._withScopedSyntax(() => {\n        this.compile(node.else_, frame);\n\n        if (async) {\n          this._emit('cb()');\n        }\n      });\n    } else if (async) {\n      this._emitLine('}\\nelse {');\n      this._emit('cb()');\n    }\n\n    this._emitLine('}');\n  }\n\n  compileIfAsync(node, frame) {\n    this._emit('(function(cb) {');\n    this.compileIf(node, frame, true);\n    this._emit('})(' + this._makeCallback());\n    this._addScopeLevel();\n  }\n\n  _emitLoopBindings(node, arr, i, len) {\n    const bindings = [\n      {name: 'index', val: `${i} + 1`},\n      {name: 'index0', val: i},\n      {name: 'revindex', val: `${len} - ${i}`},\n      {name: 'revindex0', val: `${len} - ${i} - 1`},\n      {name: 'first', val: `${i} === 0`},\n      {name: 'last', val: `${i} === ${len} - 1`},\n      {name: 'length', val: len},\n    ];\n\n    bindings.forEach((b) => {\n      this._emitLine(`frame.set(\"loop.${b.name}\", ${b.val});`);\n    });\n  }\n\n  compileFor(node, frame) {\n    // Some of this code is ugly, but it keeps the generated code\n    // as fast as possible. ForAsync also shares some of this, but\n    // not much.\n\n    const i = this._tmpid();\n    const len = this._tmpid();\n    const arr = this._tmpid();\n    frame = frame.push();\n\n    this._emitLine('frame = frame.push();');\n\n    this._emit(`var ${arr} = `);\n    this._compileExpression(node.arr, frame);\n    this._emitLine(';');\n\n    this._emit(`if(${arr}) {`);\n    this._emitLine(arr + ' = runtime.fromIterator(' + arr + ');');\n\n    // If multiple names are passed, we need to bind them\n    // appropriately\n    if (node.name instanceof nodes.Array) {\n      this._emitLine(`var ${i};`);\n\n      // The object could be an arroy or object. Note that the\n      // body of the loop is duplicated for each condition, but\n      // we are optimizing for speed over size.\n      this._emitLine(`if(runtime.isArray(${arr})) {`);\n      this._emitLine(`var ${len} = ${arr}.length;`);\n      this._emitLine(`for(${i}=0; ${i} < ${arr}.length; ${i}++) {`);\n\n      // Bind each declared var\n      node.name.children.forEach((child, u) => {\n        var tid = this._tmpid();\n        this._emitLine(`var ${tid} = ${arr}[${i}][${u}];`);\n        this._emitLine(`frame.set(\"${child}\", ${arr}[${i}][${u}]);`);\n        frame.set(node.name.children[u].value, tid);\n      });\n\n      this._emitLoopBindings(node, arr, i, len);\n      this._withScopedSyntax(() => {\n        this.compile(node.body, frame);\n      });\n      this._emitLine('}');\n\n      this._emitLine('} else {');\n      // Iterate over the key/values of an object\n      const [key, val] = node.name.children;\n      const k = this._tmpid();\n      const v = this._tmpid();\n      frame.set(key.value, k);\n      frame.set(val.value, v);\n\n      this._emitLine(`${i} = -1;`);\n      this._emitLine(`var ${len} = runtime.keys(${arr}).length;`);\n      this._emitLine(`for(var ${k} in ${arr}) {`);\n      this._emitLine(`${i}++;`);\n      this._emitLine(`var ${v} = ${arr}[${k}];`);\n      this._emitLine(`frame.set(\"${key.value}\", ${k});`);\n      this._emitLine(`frame.set(\"${val.value}\", ${v});`);\n\n      this._emitLoopBindings(node, arr, i, len);\n      this._withScopedSyntax(() => {\n        this.compile(node.body, frame);\n      });\n      this._emitLine('}');\n\n      this._emitLine('}');\n    } else {\n      // Generate a typical array iteration\n      const v = this._tmpid();\n      frame.set(node.name.value, v);\n\n      this._emitLine(`var ${len} = ${arr}.length;`);\n      this._emitLine(`for(var ${i}=0; ${i} < ${arr}.length; ${i}++) {`);\n      this._emitLine(`var ${v} = ${arr}[${i}];`);\n      this._emitLine(`frame.set(\"${node.name.value}\", ${v});`);\n\n      this._emitLoopBindings(node, arr, i, len);\n\n      this._withScopedSyntax(() => {\n        this.compile(node.body, frame);\n      });\n\n      this._emitLine('}');\n    }\n\n    this._emitLine('}');\n    if (node.else_) {\n      this._emitLine('if (!' + len + ') {');\n      this.compile(node.else_, frame);\n      this._emitLine('}');\n    }\n\n    this._emitLine('frame = frame.pop();');\n  }\n\n  _compileAsyncLoop(node, frame, parallel) {\n    // This shares some code with the For tag, but not enough to\n    // worry about. This iterates across an object asynchronously,\n    // but not in parallel.\n\n    var i = this._tmpid();\n    var len = this._tmpid();\n    var arr = this._tmpid();\n    var asyncMethod = parallel ? 'asyncAll' : 'asyncEach';\n    frame = frame.push();\n\n    this._emitLine('frame = frame.push();');\n\n    this._emit('var ' + arr + ' = runtime.fromIterator(');\n    this._compileExpression(node.arr, frame);\n    this._emitLine(');');\n\n    if (node.name instanceof nodes.Array) {\n      const arrayLen = node.name.children.length;\n      this._emit(`runtime.${asyncMethod}(${arr}, ${arrayLen}, function(`);\n\n      node.name.children.forEach((name) => {\n        this._emit(`${name.value},`);\n      });\n\n      this._emit(i + ',' + len + ',next) {');\n\n      node.name.children.forEach((name) => {\n        const id = name.value;\n        frame.set(id, id);\n        this._emitLine(`frame.set(\"${id}\", ${id});`);\n      });\n    } else {\n      const id = node.name.value;\n      this._emitLine(`runtime.${asyncMethod}(${arr}, 1, function(${id}, ${i}, ${len},next) {`);\n      this._emitLine('frame.set(\"' + id + '\", ' + id + ');');\n      frame.set(id, id);\n    }\n\n    this._emitLoopBindings(node, arr, i, len);\n\n    this._withScopedSyntax(() => {\n      let buf;\n      if (parallel) {\n        buf = this._pushBuffer();\n      }\n\n      this.compile(node.body, frame);\n      this._emitLine('next(' + i + (buf ? ',' + buf : '') + ');');\n\n      if (parallel) {\n        this._popBuffer();\n      }\n    });\n\n    const output = this._tmpid();\n    this._emitLine('}, ' + this._makeCallback(output));\n    this._addScopeLevel();\n\n    if (parallel) {\n      this._emitLine(this.buffer + ' += ' + output + ';');\n    }\n\n    if (node.else_) {\n      this._emitLine('if (!' + arr + '.length) {');\n      this.compile(node.else_, frame);\n      this._emitLine('}');\n    }\n\n    this._emitLine('frame = frame.pop();');\n  }\n\n  compileAsyncEach(node, frame) {\n    this._compileAsyncLoop(node, frame);\n  }\n\n  compileAsyncAll(node, frame) {\n    this._compileAsyncLoop(node, frame, true);\n  }\n\n  _compileMacro(node, frame) {\n    var args = [];\n    var kwargs = null;\n    var funcId = 'macro_' + this._tmpid();\n    var keepFrame = (frame !== undefined);\n\n    // Type check the definition of the args\n    node.args.children.forEach((arg, i) => {\n      if (i === node.args.children.length - 1 && arg instanceof nodes.Dict) {\n        kwargs = arg;\n      } else {\n        this.assertType(arg, nodes.Symbol);\n        args.push(arg);\n      }\n    });\n\n    const realNames = [...args.map((n) => `l_${n.value}`), 'kwargs'];\n\n    // Quoted argument names\n    const argNames = args.map((n) => `\"${n.value}\"`);\n    const kwargNames = ((kwargs && kwargs.children) || []).map((n) => `\"${n.key.value}\"`);\n\n    // We pass a function to makeMacro which destructures the\n    // arguments so support setting positional args with keywords\n    // args and passing keyword args as positional args\n    // (essentially default values). See runtime.js.\n    let currFrame;\n    if (keepFrame) {\n      currFrame = frame.push(true);\n    } else {\n      currFrame = new Frame();\n    }\n    this._emitLines(\n      `var ${funcId} = runtime.makeMacro(`,\n      `[${argNames.join(', ')}], `,\n      `[${kwargNames.join(', ')}], `,\n      `function (${realNames.join(', ')}) {`,\n      'var callerFrame = frame;',\n      'frame = ' + ((keepFrame) ? 'frame.push(true);' : 'new runtime.Frame();'),\n      'kwargs = kwargs || {};',\n      'if (Object.prototype.hasOwnProperty.call(kwargs, \"caller\")) {',\n      'frame.set(\"caller\", kwargs.caller); }');\n\n    // Expose the arguments to the template. Don't need to use\n    // random names because the function\n    // will create a new run-time scope for us\n    args.forEach((arg) => {\n      this._emitLine(`frame.set(\"${arg.value}\", l_${arg.value});`);\n      currFrame.set(arg.value, `l_${arg.value}`);\n    });\n\n    // Expose the keyword arguments\n    if (kwargs) {\n      kwargs.children.forEach((pair) => {\n        const name = pair.key.value;\n        this._emit(`frame.set(\"${name}\", `);\n        this._emit(`Object.prototype.hasOwnProperty.call(kwargs, \"${name}\")`);\n        this._emit(` ? kwargs[\"${name}\"] : `);\n        this._compileExpression(pair.value, currFrame);\n        this._emit(');');\n      });\n    }\n\n    const bufferId = this._pushBuffer();\n\n    this._withScopedSyntax(() => {\n      this.compile(node.body, currFrame);\n    });\n\n    this._emitLine('frame = ' + ((keepFrame) ? 'frame.pop();' : 'callerFrame;'));\n    this._emitLine(`return new runtime.SafeString(${bufferId});`);\n    this._emitLine('});');\n    this._popBuffer();\n\n    return funcId;\n  }\n\n  compileMacro(node, frame) {\n    var funcId = this._compileMacro(node);\n\n    // Expose the macro to the templates\n    var name = node.name.value;\n    frame.set(name, funcId);\n\n    if (frame.parent) {\n      this._emitLine(`frame.set(\"${name}\", ${funcId});`);\n    } else {\n      if (node.name.value.charAt(0) !== '_') {\n        this._emitLine(`context.addExport(\"${name}\");`);\n      }\n      this._emitLine(`context.setVariable(\"${name}\", ${funcId});`);\n    }\n  }\n\n  compileCaller(node, frame) {\n    // basically an anonymous \"macro expression\"\n    this._emit('(function (){');\n    const funcId = this._compileMacro(node, frame);\n    this._emit(`return ${funcId};})()`);\n  }\n\n  _compileGetTemplate(node, frame, eagerCompile, ignoreMissing) {\n    const parentTemplateId = this._tmpid();\n    const parentName = this._templateName();\n    const cb = this._makeCallback(parentTemplateId);\n    const eagerCompileArg = (eagerCompile) ? 'true' : 'false';\n    const ignoreMissingArg = (ignoreMissing) ? 'true' : 'false';\n    this._emit('env.getTemplate(');\n    this._compileExpression(node.template, frame);\n    this._emitLine(`, ${eagerCompileArg}, ${parentName}, ${ignoreMissingArg}, ${cb}`);\n    return parentTemplateId;\n  }\n\n  compileImport(node, frame) {\n    const target = node.target.value;\n    const id = this._compileGetTemplate(node, frame, false, false);\n    this._addScopeLevel();\n\n    this._emitLine(id + '.getExported(' +\n      (node.withContext ? 'context.getVariables(), frame, ' : '') +\n      this._makeCallback(id));\n    this._addScopeLevel();\n\n    frame.set(target, id);\n\n    if (frame.parent) {\n      this._emitLine(`frame.set(\"${target}\", ${id});`);\n    } else {\n      this._emitLine(`context.setVariable(\"${target}\", ${id});`);\n    }\n  }\n\n  compileFromImport(node, frame) {\n    const importedId = this._compileGetTemplate(node, frame, false, false);\n    this._addScopeLevel();\n\n    this._emitLine(importedId + '.getExported(' +\n      (node.withContext ? 'context.getVariables(), frame, ' : '') +\n      this._makeCallback(importedId));\n    this._addScopeLevel();\n\n    node.names.children.forEach((nameNode) => {\n      var name;\n      var alias;\n      var id = this._tmpid();\n\n      if (nameNode instanceof nodes.Pair) {\n        name = nameNode.key.value;\n        alias = nameNode.value.value;\n      } else {\n        name = nameNode.value;\n        alias = name;\n      }\n\n      this._emitLine(`if(Object.prototype.hasOwnProperty.call(${importedId}, \"${name}\")) {`);\n      this._emitLine(`var ${id} = ${importedId}.${name};`);\n      this._emitLine('} else {');\n      this._emitLine(`cb(new Error(\"cannot import '${name}'\")); return;`);\n      this._emitLine('}');\n\n      frame.set(alias, id);\n\n      if (frame.parent) {\n        this._emitLine(`frame.set(\"${alias}\", ${id});`);\n      } else {\n        this._emitLine(`context.setVariable(\"${alias}\", ${id});`);\n      }\n    });\n  }\n\n  compileBlock(node) {\n    var id = this._tmpid();\n\n    // If we are executing outside a block (creating a top-level\n    // block), we really don't want to execute its code because it\n    // will execute twice: once when the child template runs and\n    // again when the parent template runs. Note that blocks\n    // within blocks will *always* execute immediately *and*\n    // wherever else they are invoked (like used in a parent\n    // template). This may have behavioral differences from jinja\n    // because blocks can have side effects, but it seems like a\n    // waste of performance to always execute huge top-level\n    // blocks twice\n    if (!this.inBlock) {\n      this._emit('(parentTemplate ? function(e, c, f, r, cb) { cb(\"\"); } : ');\n    }\n    this._emit(`context.getBlock(\"${node.name.value}\")`);\n    if (!this.inBlock) {\n      this._emit(')');\n    }\n    this._emitLine('(env, context, frame, runtime, ' + this._makeCallback(id));\n    this._emitLine(`${this.buffer} += ${id};`);\n    this._addScopeLevel();\n  }\n\n  compileSuper(node, frame) {\n    var name = node.blockName.value;\n    var id = node.symbol.value;\n\n    const cb = this._makeCallback(id);\n    this._emitLine(`context.getSuper(env, \"${name}\", b_${name}, frame, runtime, ${cb}`);\n    this._emitLine(`${id} = runtime.markSafe(${id});`);\n    this._addScopeLevel();\n    frame.set(id, id);\n  }\n\n  compileExtends(node, frame) {\n    var k = this._tmpid();\n\n    const parentTemplateId = this._compileGetTemplate(node, frame, true, false);\n\n    // extends is a dynamic tag and can occur within a block like\n    // `if`, so if this happens we need to capture the parent\n    // template in the top-level scope\n    this._emitLine(`parentTemplate = ${parentTemplateId}`);\n\n    this._emitLine(`for(var ${k} in parentTemplate.blocks) {`);\n    this._emitLine(`context.addBlock(${k}, parentTemplate.blocks[${k}]);`);\n    this._emitLine('}');\n\n    this._addScopeLevel();\n  }\n\n  compileInclude(node, frame) {\n    this._emitLine('var tasks = [];');\n    this._emitLine('tasks.push(');\n    this._emitLine('function(callback) {');\n    const id = this._compileGetTemplate(node, frame, false, node.ignoreMissing);\n    this._emitLine(`callback(null,${id});});`);\n    this._emitLine('});');\n\n    const id2 = this._tmpid();\n    this._emitLine('tasks.push(');\n    this._emitLine('function(template, callback){');\n    this._emitLine('template.render(context.getVariables(), frame, ' + this._makeCallback(id2));\n    this._emitLine('callback(null,' + id2 + ');});');\n    this._emitLine('});');\n\n    this._emitLine('tasks.push(');\n    this._emitLine('function(result, callback){');\n    this._emitLine(`${this.buffer} += result;`);\n    this._emitLine('callback(null);');\n    this._emitLine('});');\n    this._emitLine('env.waterfall(tasks, function(){');\n    this._addScopeLevel();\n  }\n\n  compileTemplateData(node, frame) {\n    this.compileLiteral(node, frame);\n  }\n\n  compileCapture(node, frame) {\n    // we need to temporarily override the current buffer id as 'output'\n    // so the set block writes to the capture output instead of the buffer\n    var buffer = this.buffer;\n    this.buffer = 'output';\n    this._emitLine('(function() {');\n    this._emitLine('var output = \"\";');\n    this._withScopedSyntax(() => {\n      this.compile(node.body, frame);\n    });\n    this._emitLine('return output;');\n    this._emitLine('})()');\n    // and of course, revert back to the old buffer id\n    this.buffer = buffer;\n  }\n\n  compileOutput(node, frame) {\n    const children = node.children;\n    children.forEach(child => {\n      // TemplateData is a special case because it is never\n      // autoescaped, so simply output it for optimization\n      if (child instanceof nodes.TemplateData) {\n        if (child.value) {\n          this._emit(`${this.buffer} += `);\n          this.compileLiteral(child, frame);\n          this._emitLine(';');\n        }\n      } else {\n        this._emit(`${this.buffer} += runtime.suppressValue(`);\n        if (this.throwOnUndefined) {\n          this._emit('runtime.ensureDefined(');\n        }\n        this.compile(child, frame);\n        if (this.throwOnUndefined) {\n          this._emit(`,${node.lineno},${node.colno})`);\n        }\n        this._emit(', env.opts.autoescape);\\n');\n      }\n    });\n  }\n\n  compileRoot(node, frame) {\n    if (frame) {\n      this.fail('compileRoot: root node can\\'t have frame');\n    }\n\n    frame = new Frame();\n\n    this._emitFuncBegin('root');\n    this._emitLine('var parentTemplate = null;');\n    this._compileChildren(node, frame);\n    this._emitLine('if(parentTemplate) {');\n    this._emitLine('parentTemplate.rootRenderFunc(env, context, frame, runtime, cb);');\n    this._emitLine('} else {');\n    this._emitLine(`cb(null, ${this.buffer});`);\n    this._emitLine('}');\n    this._emitFuncEnd(true);\n\n    this.inBlock = true;\n\n    const blockNames = [];\n\n    const blocks = node.findAll(nodes.Block);\n\n    blocks.forEach((block, i) => {\n      const name = block.name.value;\n\n      if (blockNames.indexOf(name) !== -1) {\n        throw new Error(`Block \"${name}\" defined more than once.`);\n      }\n      blockNames.push(name);\n\n      this._emitFuncBegin(`b_${name}`);\n\n      const tmpFrame = new Frame();\n      this._emitLine('var frame = frame.push(true);');\n      this.compile(block.body, tmpFrame);\n      this._emitFuncEnd();\n    });\n\n    this._emitLine('return {');\n\n    blocks.forEach((block, i) => {\n      const blockName = `b_${block.name.value}`;\n      this._emitLine(`${blockName}: ${blockName},`);\n    });\n\n    this._emitLine('root: root\\n};');\n  }\n\n  compile(node, frame) {\n    var _compile = this['compile' + node.typename];\n    if (_compile) {\n      _compile.call(this, node, frame);\n    } else {\n      this.fail(`compile: Cannot compile node: ${node.typename}`, node.lineno, node.colno);\n    }\n  }\n\n  getCode() {\n    return this.codebuf.join('');\n  }\n}\n\nmodule.exports = {\n  compile: function compile(src, asyncFilters, extensions, name, opts = {}) {\n    const c = new Compiler(name, opts.throwOnUndefined);\n\n    // Run the extension preprocessors against the source.\n    const preprocessors = (extensions || []).map(ext => ext.preprocess).filter(f => !!f);\n\n    const processedSrc = preprocessors.reduce((s, processor) => processor(s), src);\n\n    c.compile(transformer.transform(\n      parser.parse(processedSrc, extensions, opts),\n      asyncFilters,\n      name\n    ));\n    return c.getCode();\n  },\n\n  Compiler: Compiler\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/compiler.js","'use strict';\n\nconst path = require('path');\nconst Obj = require('./object');\n\nmodule.exports = class Loader extends Obj {\n  on(name, func) {\n    this.listeners = this.listeners || {};\n    this.listeners[name] = this.listeners[name] || [];\n    this.listeners[name].push(func);\n  }\n\n  emit(name, ...args) {\n    if (this.listeners && this.listeners[name]) {\n      this.listeners[name].forEach((listener) => {\n        listener(...args);\n      });\n    }\n  }\n\n  resolve(from, to) {\n    return path.resolve(path.dirname(from), to);\n  }\n\n  isRelative(filename) {\n    return (filename.indexOf('./') === 0 || filename.indexOf('../') === 0);\n  }\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/loader.js","'use strict';\n\nconst asap = require('asap');\nconst waterfall = require('a-sync-waterfall');\nconst lib = require('./lib');\nconst compiler = require('./compiler');\nconst filters = require('./filters');\nconst {FileSystemLoader, WebLoader, PrecompiledLoader} = require('./loaders');\nconst tests = require('./tests');\nconst globals = require('./globals');\nconst Obj = require('./object');\nconst globalRuntime = require('./runtime');\nconst {handleError, Frame} = globalRuntime;\nconst expressApp = require('./express-app');\n\n// If the user is using the async API, *always* call it\n// asynchronously even if the template was synchronous.\nfunction callbackAsap(cb, err, res) {\n  asap(() => {\n    cb(err, res);\n  });\n}\n\n/**\n * A no-op template, for use with {% include ignore missing %}\n */\nconst noopTmplSrc = {\n  type: 'code',\n  obj: {\n    root(env, context, frame, runtime, cb) {\n      try {\n        cb(null, '');\n      } catch (e) {\n        cb(handleError(e, null, null));\n      }\n    }\n  }\n};\n\nclass Environment extends Obj {\n  init(loaders, opts) {\n    // The dev flag determines the trace that'll be shown on errors.\n    // If set to true, returns the full trace from the error point,\n    // otherwise will return trace starting from Template.render\n    // (the full trace from within nunjucks may confuse developers using\n    //  the library)\n    // defaults to false\n    opts = this.opts = opts || {};\n    this.opts.dev = !!opts.dev;\n\n    // The autoescape flag sets global autoescaping. If true,\n    // every string variable will be escaped by default.\n    // If false, strings can be manually escaped using the `escape` filter.\n    // defaults to true\n    this.opts.autoescape = opts.autoescape != null ? opts.autoescape : true;\n\n    // If true, this will make the system throw errors if trying\n    // to output a null or undefined value\n    this.opts.throwOnUndefined = !!opts.throwOnUndefined;\n    this.opts.trimBlocks = !!opts.trimBlocks;\n    this.opts.lstripBlocks = !!opts.lstripBlocks;\n\n    this.loaders = [];\n\n    if (!loaders) {\n      // The filesystem loader is only available server-side\n      if (FileSystemLoader) {\n        this.loaders = [new FileSystemLoader('views')];\n      } else if (WebLoader) {\n        this.loaders = [new WebLoader('/views')];\n      }\n    } else {\n      this.loaders = lib.isArray(loaders) ? loaders : [loaders];\n    }\n\n    // It's easy to use precompiled templates: just include them\n    // before you configure nunjucks and this will automatically\n    // pick it up and use it\n    if (typeof window !== 'undefined' && window.nunjucksPrecompiled) {\n      this.loaders.unshift(\n        new PrecompiledLoader(window.nunjucksPrecompiled)\n      );\n    }\n\n    this.initCache();\n\n    this.globals = globals();\n    this.filters = {};\n    this.tests = {};\n    this.asyncFilters = [];\n    this.extensions = {};\n    this.extensionsList = [];\n\n    lib._entries(filters).forEach(([name, filter]) => this.addFilter(name, filter));\n    lib._entries(tests).forEach(([name, test]) => this.addTest(name, test));\n  }\n\n  initCache() {\n    // Caching and cache busting\n    this.loaders.forEach((loader) => {\n      loader.cache = {};\n      if (typeof loader.on === 'function') {\n        loader.on('update', (template) => {\n          loader.cache[template] = null;\n        });\n      }\n    });\n  }\n\n  addExtension(name, extension) {\n    extension.__name = name;\n    this.extensions[name] = extension;\n    this.extensionsList.push(extension);\n    return this;\n  }\n\n  removeExtension(name) {\n    var extension = this.getExtension(name);\n    if (!extension) {\n      return;\n    }\n\n    this.extensionsList = lib.without(this.extensionsList, extension);\n    delete this.extensions[name];\n  }\n\n  getExtension(name) {\n    return this.extensions[name];\n  }\n\n  hasExtension(name) {\n    return !!this.extensions[name];\n  }\n\n  addGlobal(name, value) {\n    this.globals[name] = value;\n    return this;\n  }\n\n  getGlobal(name) {\n    if (typeof this.globals[name] === 'undefined') {\n      throw new Error('global not found: ' + name);\n    }\n    return this.globals[name];\n  }\n\n  addFilter(name, func, async) {\n    var wrapped = func;\n\n    if (async) {\n      this.asyncFilters.push(name);\n    }\n    this.filters[name] = wrapped;\n    return this;\n  }\n\n  getFilter(name) {\n    if (!this.filters[name]) {\n      throw new Error('filter not found: ' + name);\n    }\n    return this.filters[name];\n  }\n\n  addTest(name, func) {\n    this.tests[name] = func;\n    return this;\n  }\n\n  getTest(name) {\n    if (!this.tests[name]) {\n      throw new Error('test not found: ' + name);\n    }\n    return this.tests[name];\n  }\n\n  resolveTemplate(loader, parentName, filename) {\n    var isRelative = (loader.isRelative && parentName) ? loader.isRelative(filename) : false;\n    return (isRelative && loader.resolve) ? loader.resolve(parentName, filename) : filename;\n  }\n\n  getTemplate(name, eagerCompile, parentName, ignoreMissing, cb) {\n    var that = this;\n    var tmpl = null;\n    if (name && name.raw) {\n      // this fixes autoescape for templates referenced in symbols\n      name = name.raw;\n    }\n\n    if (lib.isFunction(parentName)) {\n      cb = parentName;\n      parentName = null;\n      eagerCompile = eagerCompile || false;\n    }\n\n    if (lib.isFunction(eagerCompile)) {\n      cb = eagerCompile;\n      eagerCompile = false;\n    }\n\n    if (name instanceof Template) {\n      tmpl = name;\n    } else if (typeof name !== 'string') {\n      throw new Error('template names must be a string: ' + name);\n    } else {\n      for (let i = 0; i < this.loaders.length; i++) {\n        const loader = this.loaders[i];\n        tmpl = loader.cache[this.resolveTemplate(loader, parentName, name)];\n        if (tmpl) {\n          break;\n        }\n      }\n    }\n\n    if (tmpl) {\n      if (eagerCompile) {\n        tmpl.compile();\n      }\n\n      if (cb) {\n        cb(null, tmpl);\n        return undefined;\n      } else {\n        return tmpl;\n      }\n    }\n    let syncResult;\n\n    const createTemplate = (err, info) => {\n      if (!info && !err && !ignoreMissing) {\n        err = new Error('template not found: ' + name);\n      }\n\n      if (err) {\n        if (cb) {\n          cb(err);\n          return;\n        } else {\n          throw err;\n        }\n      }\n      let newTmpl;\n      if (!info) {\n        newTmpl = new Template(noopTmplSrc, this, '', eagerCompile);\n      } else {\n        newTmpl = new Template(info.src, this, info.path, eagerCompile);\n        if (!info.noCache) {\n          info.loader.cache[name] = newTmpl;\n        }\n      }\n      if (cb) {\n        cb(null, newTmpl);\n      } else {\n        syncResult = newTmpl;\n      }\n    };\n\n    lib.asyncIter(this.loaders, (loader, i, next, done) => {\n      function handle(err, src) {\n        if (err) {\n          done(err);\n        } else if (src) {\n          src.loader = loader;\n          done(null, src);\n        } else {\n          next();\n        }\n      }\n\n      // Resolve name relative to parentName\n      name = that.resolveTemplate(loader, parentName, name);\n\n      if (loader.async) {\n        loader.getSource(name, handle);\n      } else {\n        handle(null, loader.getSource(name));\n      }\n    }, createTemplate);\n\n    return syncResult;\n  }\n\n  express(app) {\n    return expressApp(this, app);\n  }\n\n  render(name, ctx, cb) {\n    if (lib.isFunction(ctx)) {\n      cb = ctx;\n      ctx = null;\n    }\n\n    // We support a synchronous API to make it easier to migrate\n    // existing code to async. This works because if you don't do\n    // anything async work, the whole thing is actually run\n    // synchronously.\n    let syncResult = null;\n\n    this.getTemplate(name, (err, tmpl) => {\n      if (err && cb) {\n        callbackAsap(cb, err);\n      } else if (err) {\n        throw err;\n      } else {\n        syncResult = tmpl.render(ctx, cb);\n      }\n    });\n\n    return syncResult;\n  }\n\n  renderString(src, ctx, opts, cb) {\n    if (lib.isFunction(opts)) {\n      cb = opts;\n      opts = {};\n    }\n    opts = opts || {};\n\n    const tmpl = new Template(src, this, opts.path);\n    return tmpl.render(ctx, cb);\n  }\n\n  waterfall(tasks, callback, forceAsync) {\n    return waterfall(tasks, callback, forceAsync);\n  }\n}\n\nclass Context extends Obj {\n  init(ctx, blocks, env) {\n    // Has to be tied to an environment so we can tap into its globals.\n    this.env = env || new Environment();\n\n    // Make a duplicate of ctx\n    this.ctx = lib.extend({}, ctx);\n\n    this.blocks = {};\n    this.exported = [];\n\n    lib.keys(blocks).forEach(name => {\n      this.addBlock(name, blocks[name]);\n    });\n  }\n\n  lookup(name) {\n    // This is one of the most called functions, so optimize for\n    // the typical case where the name isn't in the globals\n    if (name in this.env.globals && !(name in this.ctx)) {\n      return this.env.globals[name];\n    } else {\n      return this.ctx[name];\n    }\n  }\n\n  setVariable(name, val) {\n    this.ctx[name] = val;\n  }\n\n  getVariables() {\n    return this.ctx;\n  }\n\n  addBlock(name, block) {\n    this.blocks[name] = this.blocks[name] || [];\n    this.blocks[name].push(block);\n    return this;\n  }\n\n  getBlock(name) {\n    if (!this.blocks[name]) {\n      throw new Error('unknown block \"' + name + '\"');\n    }\n\n    return this.blocks[name][0];\n  }\n\n  getSuper(env, name, block, frame, runtime, cb) {\n    var idx = lib.indexOf(this.blocks[name] || [], block);\n    var blk = this.blocks[name][idx + 1];\n    var context = this;\n\n    if (idx === -1 || !blk) {\n      throw new Error('no super block available for \"' + name + '\"');\n    }\n\n    blk(env, context, frame, runtime, cb);\n  }\n\n  addExport(name) {\n    this.exported.push(name);\n  }\n\n  getExported() {\n    var exported = {};\n    this.exported.forEach((name) => {\n      exported[name] = this.ctx[name];\n    });\n    return exported;\n  }\n}\n\nclass Template extends Obj {\n  init(src, env, path, eagerCompile) {\n    this.env = env || new Environment();\n\n    if (lib.isObject(src)) {\n      switch (src.type) {\n        case 'code':\n          this.tmplProps = src.obj;\n          break;\n        case 'string':\n          this.tmplStr = src.obj;\n          break;\n        default:\n          throw new Error(\n            `Unexpected template object type ${src.type}; expected 'code', or 'string'`);\n      }\n    } else if (lib.isString(src)) {\n      this.tmplStr = src;\n    } else {\n      throw new Error('src must be a string or an object describing the source');\n    }\n\n    this.path = path;\n\n    if (eagerCompile) {\n      try {\n        this._compile();\n      } catch (err) {\n        throw lib._prettifyError(this.path, this.env.opts.dev, err);\n      }\n    } else {\n      this.compiled = false;\n    }\n  }\n\n  render(ctx, parentFrame, cb) {\n    if (typeof ctx === 'function') {\n      cb = ctx;\n      ctx = {};\n    } else if (typeof parentFrame === 'function') {\n      cb = parentFrame;\n      parentFrame = null;\n    }\n\n    // If there is a parent frame, we are being called from internal\n    // code of another template, and the internal system\n    // depends on the sync/async nature of the parent template\n    // to be inherited, so force an async callback\n    const forceAsync = !parentFrame;\n\n    // Catch compile errors for async rendering\n    try {\n      this.compile();\n    } catch (e) {\n      const err = lib._prettifyError(this.path, this.env.opts.dev, e);\n      if (cb) {\n        return callbackAsap(cb, err);\n      } else {\n        throw err;\n      }\n    }\n\n    const context = new Context(ctx || {}, this.blocks, this.env);\n    const frame = parentFrame ? parentFrame.push(true) : new Frame();\n    frame.topLevel = true;\n    let syncResult = null;\n    let didError = false;\n\n    this.rootRenderFunc(this.env, context, frame, globalRuntime, (err, res) => {\n      if (didError) {\n        // prevent multiple calls to cb\n        return;\n      }\n      if (err) {\n        err = lib._prettifyError(this.path, this.env.opts.dev, err);\n        didError = true;\n      }\n\n      if (cb) {\n        if (forceAsync) {\n          callbackAsap(cb, err, res);\n        } else {\n          cb(err, res);\n        }\n      } else {\n        if (err) {\n          throw err;\n        }\n        syncResult = res;\n      }\n    });\n\n    return syncResult;\n  }\n\n\n  getExported(ctx, parentFrame, cb) { // eslint-disable-line consistent-return\n    if (typeof ctx === 'function') {\n      cb = ctx;\n      ctx = {};\n    }\n\n    if (typeof parentFrame === 'function') {\n      cb = parentFrame;\n      parentFrame = null;\n    }\n\n    // Catch compile errors for async rendering\n    try {\n      this.compile();\n    } catch (e) {\n      if (cb) {\n        return cb(e);\n      } else {\n        throw e;\n      }\n    }\n\n    const frame = parentFrame ? parentFrame.push() : new Frame();\n    frame.topLevel = true;\n\n    // Run the rootRenderFunc to populate the context with exported vars\n    const context = new Context(ctx || {}, this.blocks, this.env);\n    this.rootRenderFunc(this.env, context, frame, globalRuntime, (err) => {\n      if (err) {\n        cb(err, null);\n      } else {\n        cb(null, context.getExported());\n      }\n    });\n  }\n\n  compile() {\n    if (!this.compiled) {\n      this._compile();\n    }\n  }\n\n  _compile() {\n    var props;\n\n    if (this.tmplProps) {\n      props = this.tmplProps;\n    } else {\n      const source = compiler.compile(this.tmplStr,\n        this.env.asyncFilters,\n        this.env.extensionsList,\n        this.path,\n        this.env.opts);\n\n      const func = new Function(source); // eslint-disable-line no-new-func\n      props = func();\n    }\n\n    this.blocks = this._getBlocks(props);\n    this.rootRenderFunc = props.root;\n    this.compiled = true;\n  }\n\n  _getBlocks(props) {\n    var blocks = {};\n\n    lib.keys(props).forEach((k) => {\n      if (k.slice(0, 2) === 'b_') {\n        blocks[k.slice(2)] = props[k];\n      }\n    });\n\n    return blocks;\n  }\n}\n\nmodule.exports = {\n  Environment: Environment,\n  Template: Template\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/environment.js","'use strict';\n\nvar lexer = require('./lexer');\nvar nodes = require('./nodes');\nvar Obj = require('./object');\nvar lib = require('./lib');\n\nclass Parser extends Obj {\n  init(tokens) {\n    this.tokens = tokens;\n    this.peeked = null;\n    this.breakOnBlocks = null;\n    this.dropLeadingWhitespace = false;\n\n    this.extensions = [];\n  }\n\n  nextToken(withWhitespace) {\n    var tok;\n\n    if (this.peeked) {\n      if (!withWhitespace && this.peeked.type === lexer.TOKEN_WHITESPACE) {\n        this.peeked = null;\n      } else {\n        tok = this.peeked;\n        this.peeked = null;\n        return tok;\n      }\n    }\n\n    tok = this.tokens.nextToken();\n\n    if (!withWhitespace) {\n      while (tok && tok.type === lexer.TOKEN_WHITESPACE) {\n        tok = this.tokens.nextToken();\n      }\n    }\n\n    return tok;\n  }\n\n  peekToken() {\n    this.peeked = this.peeked || this.nextToken();\n    return this.peeked;\n  }\n\n  pushToken(tok) {\n    if (this.peeked) {\n      throw new Error('pushToken: can only push one token on between reads');\n    }\n    this.peeked = tok;\n  }\n\n  error(msg, lineno, colno) {\n    if (lineno === undefined || colno === undefined) {\n      const tok = this.peekToken() || {};\n      lineno = tok.lineno;\n      colno = tok.colno;\n    }\n    if (lineno !== undefined) {\n      lineno += 1;\n    }\n    if (colno !== undefined) {\n      colno += 1;\n    }\n    return new lib.TemplateError(msg, lineno, colno);\n  }\n\n  fail(msg, lineno, colno) {\n    throw this.error(msg, lineno, colno);\n  }\n\n  skip(type) {\n    var tok = this.nextToken();\n    if (!tok || tok.type !== type) {\n      this.pushToken(tok);\n      return false;\n    }\n    return true;\n  }\n\n  expect(type) {\n    var tok = this.nextToken();\n    if (tok.type !== type) {\n      this.fail('expected ' + type + ', got ' + tok.type,\n        tok.lineno,\n        tok.colno);\n    }\n    return tok;\n  }\n\n  skipValue(type, val) {\n    var tok = this.nextToken();\n    if (!tok || tok.type !== type || tok.value !== val) {\n      this.pushToken(tok);\n      return false;\n    }\n    return true;\n  }\n\n  skipSymbol(val) {\n    return this.skipValue(lexer.TOKEN_SYMBOL, val);\n  }\n\n  advanceAfterBlockEnd(name) {\n    var tok;\n    if (!name) {\n      tok = this.peekToken();\n\n      if (!tok) {\n        this.fail('unexpected end of file');\n      }\n\n      if (tok.type !== lexer.TOKEN_SYMBOL) {\n        this.fail('advanceAfterBlockEnd: expected symbol token or ' +\n          'explicit name to be passed');\n      }\n\n      name = this.nextToken().value;\n    }\n\n    tok = this.nextToken();\n\n    if (tok && tok.type === lexer.TOKEN_BLOCK_END) {\n      if (tok.value.charAt(0) === '-') {\n        this.dropLeadingWhitespace = true;\n      }\n    } else {\n      this.fail('expected block end in ' + name + ' statement');\n    }\n\n    return tok;\n  }\n\n  advanceAfterVariableEnd() {\n    var tok = this.nextToken();\n\n    if (tok && tok.type === lexer.TOKEN_VARIABLE_END) {\n      this.dropLeadingWhitespace = tok.value.charAt(\n        tok.value.length - this.tokens.tags.VARIABLE_END.length - 1\n      ) === '-';\n    } else {\n      this.pushToken(tok);\n      this.fail('expected variable end');\n    }\n  }\n\n  parseFor() {\n    var forTok = this.peekToken();\n    var node;\n    var endBlock;\n\n    if (this.skipSymbol('for')) {\n      node = new nodes.For(forTok.lineno, forTok.colno);\n      endBlock = 'endfor';\n    } else if (this.skipSymbol('asyncEach')) {\n      node = new nodes.AsyncEach(forTok.lineno, forTok.colno);\n      endBlock = 'endeach';\n    } else if (this.skipSymbol('asyncAll')) {\n      node = new nodes.AsyncAll(forTok.lineno, forTok.colno);\n      endBlock = 'endall';\n    } else {\n      this.fail('parseFor: expected for{Async}', forTok.lineno, forTok.colno);\n    }\n\n    node.name = this.parsePrimary();\n\n    if (!(node.name instanceof nodes.Symbol)) {\n      this.fail('parseFor: variable name expected for loop');\n    }\n\n    const type = this.peekToken().type;\n    if (type === lexer.TOKEN_COMMA) {\n      // key/value iteration\n      const key = node.name;\n      node.name = new nodes.Array(key.lineno, key.colno);\n      node.name.addChild(key);\n\n      while (this.skip(lexer.TOKEN_COMMA)) {\n        const prim = this.parsePrimary();\n        node.name.addChild(prim);\n      }\n    }\n\n    if (!this.skipSymbol('in')) {\n      this.fail('parseFor: expected \"in\" keyword for loop',\n        forTok.lineno,\n        forTok.colno);\n    }\n\n    node.arr = this.parseExpression();\n    this.advanceAfterBlockEnd(forTok.value);\n\n    node.body = this.parseUntilBlocks(endBlock, 'else');\n\n    if (this.skipSymbol('else')) {\n      this.advanceAfterBlockEnd('else');\n      node.else_ = this.parseUntilBlocks(endBlock);\n    }\n\n    this.advanceAfterBlockEnd();\n\n    return node;\n  }\n\n  parseMacro() {\n    const macroTok = this.peekToken();\n    if (!this.skipSymbol('macro')) {\n      this.fail('expected macro');\n    }\n\n    const name = this.parsePrimary(true);\n    const args = this.parseSignature();\n    const node = new nodes.Macro(macroTok.lineno, macroTok.colno, name, args);\n\n    this.advanceAfterBlockEnd(macroTok.value);\n    node.body = this.parseUntilBlocks('endmacro');\n    this.advanceAfterBlockEnd();\n\n    return node;\n  }\n\n  parseCall() {\n    // a call block is parsed as a normal FunCall, but with an added\n    // 'caller' kwarg which is a Caller node.\n    var callTok = this.peekToken();\n    if (!this.skipSymbol('call')) {\n      this.fail('expected call');\n    }\n\n    const callerArgs = this.parseSignature(true) || new nodes.NodeList();\n    const macroCall = this.parsePrimary();\n\n    this.advanceAfterBlockEnd(callTok.value);\n    const body = this.parseUntilBlocks('endcall');\n    this.advanceAfterBlockEnd();\n\n    const callerName = new nodes.Symbol(callTok.lineno,\n      callTok.colno,\n      'caller');\n    const callerNode = new nodes.Caller(callTok.lineno,\n      callTok.colno,\n      callerName,\n      callerArgs,\n      body);\n\n    // add the additional caller kwarg, adding kwargs if necessary\n    const args = macroCall.args.children;\n    if (!(args[args.length - 1] instanceof nodes.KeywordArgs)) {\n      args.push(new nodes.KeywordArgs());\n    }\n    const kwargs = args[args.length - 1];\n    kwargs.addChild(new nodes.Pair(callTok.lineno,\n      callTok.colno,\n      callerName,\n      callerNode));\n\n    return new nodes.Output(callTok.lineno,\n      callTok.colno,\n      [macroCall]);\n  }\n\n  parseWithContext() {\n    var tok = this.peekToken();\n\n    var withContext = null;\n\n    if (this.skipSymbol('with')) {\n      withContext = true;\n    } else if (this.skipSymbol('without')) {\n      withContext = false;\n    }\n\n    if (withContext !== null) {\n      if (!this.skipSymbol('context')) {\n        this.fail('parseFrom: expected context after with/without',\n          tok.lineno,\n          tok.colno);\n      }\n    }\n\n    return withContext;\n  }\n\n  parseImport() {\n    var importTok = this.peekToken();\n    if (!this.skipSymbol('import')) {\n      this.fail('parseImport: expected import',\n        importTok.lineno,\n        importTok.colno);\n    }\n\n    const template = this.parseExpression();\n\n    if (!this.skipSymbol('as')) {\n      this.fail('parseImport: expected \"as\" keyword',\n        importTok.lineno,\n        importTok.colno);\n    }\n\n    const target = this.parseExpression();\n    const withContext = this.parseWithContext();\n    const node = new nodes.Import(importTok.lineno,\n      importTok.colno,\n      template,\n      target,\n      withContext);\n\n    this.advanceAfterBlockEnd(importTok.value);\n\n    return node;\n  }\n\n  parseFrom() {\n    const fromTok = this.peekToken();\n    if (!this.skipSymbol('from')) {\n      this.fail('parseFrom: expected from');\n    }\n\n    const template = this.parseExpression();\n\n    if (!this.skipSymbol('import')) {\n      this.fail('parseFrom: expected import',\n        fromTok.lineno,\n        fromTok.colno);\n    }\n\n    const names = new nodes.NodeList();\n    let withContext;\n\n    while (1) { // eslint-disable-line no-constant-condition\n      const nextTok = this.peekToken();\n      if (nextTok.type === lexer.TOKEN_BLOCK_END) {\n        if (!names.children.length) {\n          this.fail('parseFrom: Expected at least one import name',\n            fromTok.lineno,\n            fromTok.colno);\n        }\n\n        // Since we are manually advancing past the block end,\n        // need to keep track of whitespace control (normally\n        // this is done in `advanceAfterBlockEnd`\n        if (nextTok.value.charAt(0) === '-') {\n          this.dropLeadingWhitespace = true;\n        }\n\n        this.nextToken();\n        break;\n      }\n\n      if (names.children.length > 0 && !this.skip(lexer.TOKEN_COMMA)) {\n        this.fail('parseFrom: expected comma',\n          fromTok.lineno,\n          fromTok.colno);\n      }\n\n      const name = this.parsePrimary();\n      if (name.value.charAt(0) === '_') {\n        this.fail('parseFrom: names starting with an underscore cannot be imported',\n          name.lineno,\n          name.colno);\n      }\n\n      if (this.skipSymbol('as')) {\n        const alias = this.parsePrimary();\n        names.addChild(new nodes.Pair(name.lineno,\n          name.colno,\n          name,\n          alias));\n      } else {\n        names.addChild(name);\n      }\n\n      withContext = this.parseWithContext();\n    }\n\n    return new nodes.FromImport(fromTok.lineno,\n      fromTok.colno,\n      template,\n      names,\n      withContext);\n  }\n\n  parseBlock() {\n    const tag = this.peekToken();\n    if (!this.skipSymbol('block')) {\n      this.fail('parseBlock: expected block', tag.lineno, tag.colno);\n    }\n\n    const node = new nodes.Block(tag.lineno, tag.colno);\n\n    node.name = this.parsePrimary();\n    if (!(node.name instanceof nodes.Symbol)) {\n      this.fail('parseBlock: variable name expected',\n        tag.lineno,\n        tag.colno);\n    }\n\n    this.advanceAfterBlockEnd(tag.value);\n\n    node.body = this.parseUntilBlocks('endblock');\n    this.skipSymbol('endblock');\n    this.skipSymbol(node.name.value);\n\n    const tok = this.peekToken();\n    if (!tok) {\n      this.fail('parseBlock: expected endblock, got end of file');\n    }\n\n    this.advanceAfterBlockEnd(tok.value);\n\n    return node;\n  }\n\n  parseExtends() {\n    const tagName = 'extends';\n    const tag = this.peekToken();\n    if (!this.skipSymbol(tagName)) {\n      this.fail('parseTemplateRef: expected ' + tagName);\n    }\n\n    const node = new nodes.Extends(tag.lineno, tag.colno);\n    node.template = this.parseExpression();\n\n    this.advanceAfterBlockEnd(tag.value);\n    return node;\n  }\n\n  parseInclude() {\n    const tagName = 'include';\n    const tag = this.peekToken();\n    if (!this.skipSymbol(tagName)) {\n      this.fail('parseInclude: expected ' + tagName);\n    }\n\n    const node = new nodes.Include(tag.lineno, tag.colno);\n    node.template = this.parseExpression();\n\n    if (this.skipSymbol('ignore') && this.skipSymbol('missing')) {\n      node.ignoreMissing = true;\n    }\n\n    this.advanceAfterBlockEnd(tag.value);\n    return node;\n  }\n\n  parseIf() {\n    const tag = this.peekToken();\n    let node;\n\n    if (this.skipSymbol('if') || this.skipSymbol('elif') || this.skipSymbol('elseif')) {\n      node = new nodes.If(tag.lineno, tag.colno);\n    } else if (this.skipSymbol('ifAsync')) {\n      node = new nodes.IfAsync(tag.lineno, tag.colno);\n    } else {\n      this.fail('parseIf: expected if, elif, or elseif',\n        tag.lineno,\n        tag.colno);\n    }\n\n    node.cond = this.parseExpression();\n    this.advanceAfterBlockEnd(tag.value);\n\n    node.body = this.parseUntilBlocks('elif', 'elseif', 'else', 'endif');\n    const tok = this.peekToken();\n\n    switch (tok && tok.value) {\n      case 'elseif':\n      case 'elif':\n        node.else_ = this.parseIf();\n        break;\n      case 'else':\n        this.advanceAfterBlockEnd();\n        node.else_ = this.parseUntilBlocks('endif');\n        this.advanceAfterBlockEnd();\n        break;\n      case 'endif':\n        node.else_ = null;\n        this.advanceAfterBlockEnd();\n        break;\n      default:\n        this.fail('parseIf: expected elif, else, or endif, got end of file');\n    }\n\n    return node;\n  }\n\n  parseSet() {\n    const tag = this.peekToken();\n    if (!this.skipSymbol('set')) {\n      this.fail('parseSet: expected set', tag.lineno, tag.colno);\n    }\n\n    const node = new nodes.Set(tag.lineno, tag.colno, []);\n\n    let target;\n    while ((target = this.parsePrimary())) {\n      node.targets.push(target);\n\n      if (!this.skip(lexer.TOKEN_COMMA)) {\n        break;\n      }\n    }\n\n    if (!this.skipValue(lexer.TOKEN_OPERATOR, '=')) {\n      if (!this.skip(lexer.TOKEN_BLOCK_END)) {\n        this.fail('parseSet: expected = or block end in set tag',\n          tag.lineno,\n          tag.colno);\n      } else {\n        node.body = new nodes.Capture(\n          tag.lineno,\n          tag.colno,\n          this.parseUntilBlocks('endset')\n        );\n        node.value = null;\n        this.advanceAfterBlockEnd();\n      }\n    } else {\n      node.value = this.parseExpression();\n      this.advanceAfterBlockEnd(tag.value);\n    }\n\n    return node;\n  }\n\n  parseSwitch() {\n    /*\n     * Store the tag names in variables in case someone ever wants to\n     * customize this.\n     */\n    const switchStart = 'switch';\n    const switchEnd = 'endswitch';\n    const caseStart = 'case';\n    const caseDefault = 'default';\n\n    // Get the switch tag.\n    const tag = this.peekToken();\n\n    // fail early if we get some unexpected tag.\n    if (\n      !this.skipSymbol(switchStart)\n      && !this.skipSymbol(caseStart)\n      && !this.skipSymbol(caseDefault)\n    ) {\n      this.fail('parseSwitch: expected \"switch,\" \"case\" or \"default\"', tag.lineno, tag.colno);\n    }\n\n    // parse the switch expression\n    const expr = this.parseExpression();\n\n    // advance until a start of a case, a default case or an endswitch.\n    this.advanceAfterBlockEnd(switchStart);\n    this.parseUntilBlocks(caseStart, caseDefault, switchEnd);\n\n    // this is the first case. it could also be an endswitch, we'll check.\n    let tok = this.peekToken();\n\n    // create new variables for our cases and default case.\n    const cases = [];\n    let defaultCase;\n\n    // while we're dealing with new cases nodes...\n    do {\n      // skip the start symbol and get the case expression\n      this.skipSymbol(caseStart);\n      const cond = this.parseExpression();\n      this.advanceAfterBlockEnd(switchStart);\n      // get the body of the case node and add it to the array of cases.\n      const body = this.parseUntilBlocks(caseStart, caseDefault, switchEnd);\n      cases.push(new nodes.Case(tok.line, tok.col, cond, body));\n      // get our next case\n      tok = this.peekToken();\n    } while (tok && tok.value === caseStart);\n\n    // we either have a default case or a switch end.\n    switch (tok.value) {\n      case caseDefault:\n        this.advanceAfterBlockEnd();\n        defaultCase = this.parseUntilBlocks(switchEnd);\n        this.advanceAfterBlockEnd();\n        break;\n      case switchEnd:\n        this.advanceAfterBlockEnd();\n        break;\n      default:\n        // otherwise bail because EOF\n        this.fail('parseSwitch: expected \"case,\" \"default\" or \"endswitch,\" got EOF.');\n    }\n\n    // and return the switch node.\n    return new nodes.Switch(tag.lineno, tag.colno, expr, cases, defaultCase);\n  }\n\n  parseStatement() {\n    var tok = this.peekToken();\n    var node;\n\n    if (tok.type !== lexer.TOKEN_SYMBOL) {\n      this.fail('tag name expected', tok.lineno, tok.colno);\n    }\n\n    if (this.breakOnBlocks &&\n      lib.indexOf(this.breakOnBlocks, tok.value) !== -1) {\n      return null;\n    }\n\n    switch (tok.value) {\n      case 'raw':\n        return this.parseRaw();\n      case 'verbatim':\n        return this.parseRaw('verbatim');\n      case 'if':\n      case 'ifAsync':\n        return this.parseIf();\n      case 'for':\n      case 'asyncEach':\n      case 'asyncAll':\n        return this.parseFor();\n      case 'block':\n        return this.parseBlock();\n      case 'extends':\n        return this.parseExtends();\n      case 'include':\n        return this.parseInclude();\n      case 'set':\n        return this.parseSet();\n      case 'macro':\n        return this.parseMacro();\n      case 'call':\n        return this.parseCall();\n      case 'import':\n        return this.parseImport();\n      case 'from':\n        return this.parseFrom();\n      case 'filter':\n        return this.parseFilterStatement();\n      case 'switch':\n        return this.parseSwitch();\n      default:\n        if (this.extensions.length) {\n          for (let i = 0; i < this.extensions.length; i++) {\n            const ext = this.extensions[i];\n            if (lib.indexOf(ext.tags || [], tok.value) !== -1) {\n              return ext.parse(this, nodes, lexer);\n            }\n          }\n        }\n        this.fail('unknown block tag: ' + tok.value, tok.lineno, tok.colno);\n    }\n\n    return node;\n  }\n\n  parseRaw(tagName) {\n    tagName = tagName || 'raw';\n    const endTagName = 'end' + tagName;\n    // Look for upcoming raw blocks (ignore all other kinds of blocks)\n    const rawBlockRegex = new RegExp('([\\\\s\\\\S]*?){%\\\\s*(' + tagName + '|' + endTagName + ')\\\\s*(?=%})%}');\n    let rawLevel = 1;\n    let str = '';\n    let matches = null;\n\n    // Skip opening raw token\n    // Keep this token to track line and column numbers\n    const begun = this.advanceAfterBlockEnd();\n\n    // Exit when there's nothing to match\n    // or when we've found the matching \"endraw\" block\n    while ((matches = this.tokens._extractRegex(rawBlockRegex)) && rawLevel > 0) {\n      const all = matches[0];\n      const pre = matches[1];\n      const blockName = matches[2];\n\n      // Adjust rawlevel\n      if (blockName === tagName) {\n        rawLevel += 1;\n      } else if (blockName === endTagName) {\n        rawLevel -= 1;\n      }\n\n      // Add to str\n      if (rawLevel === 0) {\n        // We want to exclude the last \"endraw\"\n        str += pre;\n        // Move tokenizer to beginning of endraw block\n        this.tokens.backN(all.length - pre.length);\n      } else {\n        str += all;\n      }\n    }\n\n    return new nodes.Output(\n      begun.lineno,\n      begun.colno,\n      [new nodes.TemplateData(begun.lineno, begun.colno, str)]\n    );\n  }\n\n  parsePostfix(node) {\n    let lookup;\n    let tok = this.peekToken();\n\n    while (tok) {\n      if (tok.type === lexer.TOKEN_LEFT_PAREN) {\n        // Function call\n        node = new nodes.FunCall(tok.lineno,\n          tok.colno,\n          node,\n          this.parseSignature());\n      } else if (tok.type === lexer.TOKEN_LEFT_BRACKET) {\n        // Reference\n        lookup = this.parseAggregate();\n        if (lookup.children.length > 1) {\n          this.fail('invalid index');\n        }\n\n        node = new nodes.LookupVal(tok.lineno,\n          tok.colno,\n          node,\n          lookup.children[0]);\n      } else if (tok.type === lexer.TOKEN_OPERATOR && tok.value === '.') {\n        // Reference\n        this.nextToken();\n        const val = this.nextToken();\n\n        if (val.type !== lexer.TOKEN_SYMBOL) {\n          this.fail('expected name as lookup value, got ' + val.value,\n            val.lineno,\n            val.colno);\n        }\n\n        // Make a literal string because it's not a variable\n        // reference\n        lookup = new nodes.Literal(val.lineno,\n          val.colno,\n          val.value);\n\n        node = new nodes.LookupVal(tok.lineno,\n          tok.colno,\n          node,\n          lookup);\n      } else {\n        break;\n      }\n\n      tok = this.peekToken();\n    }\n\n    return node;\n  }\n\n  parseExpression() {\n    var node = this.parseInlineIf();\n    return node;\n  }\n\n  parseInlineIf() {\n    let node = this.parseOr();\n    if (this.skipSymbol('if')) {\n      const condNode = this.parseOr();\n      const bodyNode = node;\n      node = new nodes.InlineIf(node.lineno, node.colno);\n      node.body = bodyNode;\n      node.cond = condNode;\n      if (this.skipSymbol('else')) {\n        node.else_ = this.parseOr();\n      } else {\n        node.else_ = null;\n      }\n    }\n\n    return node;\n  }\n\n  parseOr() {\n    let node = this.parseAnd();\n    while (this.skipSymbol('or')) {\n      const node2 = this.parseAnd();\n      node = new nodes.Or(node.lineno,\n        node.colno,\n        node,\n        node2);\n    }\n    return node;\n  }\n\n  parseAnd() {\n    let node = this.parseNot();\n    while (this.skipSymbol('and')) {\n      const node2 = this.parseNot();\n      node = new nodes.And(node.lineno,\n        node.colno,\n        node,\n        node2);\n    }\n    return node;\n  }\n\n  parseNot() {\n    const tok = this.peekToken();\n    if (this.skipSymbol('not')) {\n      return new nodes.Not(tok.lineno,\n        tok.colno,\n        this.parseNot());\n    }\n    return this.parseIn();\n  }\n\n  parseIn() {\n    let node = this.parseIs();\n    while (1) { // eslint-disable-line no-constant-condition\n      // check if the next token is 'not'\n      const tok = this.nextToken();\n      if (!tok) {\n        break;\n      }\n      const invert = tok.type === lexer.TOKEN_SYMBOL && tok.value === 'not';\n      // if it wasn't 'not', put it back\n      if (!invert) {\n        this.pushToken(tok);\n      }\n      if (this.skipSymbol('in')) {\n        const node2 = this.parseIs();\n        node = new nodes.In(node.lineno,\n          node.colno,\n          node,\n          node2);\n        if (invert) {\n          node = new nodes.Not(node.lineno,\n            node.colno,\n            node);\n        }\n      } else {\n        // if we'd found a 'not' but this wasn't an 'in', put back the 'not'\n        if (invert) {\n          this.pushToken(tok);\n        }\n        break;\n      }\n    }\n    return node;\n  }\n\n  // I put this right after \"in\" in the operator precedence stack. That can\n  // obviously be changed to be closer to Jinja.\n  parseIs() {\n    let node = this.parseCompare();\n    // look for an is\n    if (this.skipSymbol('is')) {\n      // look for a not\n      const not = this.skipSymbol('not');\n      // get the next node\n      const node2 = this.parseCompare();\n      // create an Is node using the next node and the info from our Is node.\n      node = new nodes.Is(node.lineno, node.colno, node, node2);\n      // if we have a Not, create a Not node from our Is node.\n      if (not) {\n        node = new nodes.Not(node.lineno, node.colno, node);\n      }\n    }\n    // return the node.\n    return node;\n  }\n\n  parseCompare() {\n    const compareOps = ['==', '===', '!=', '!==', '<', '>', '<=', '>='];\n    const expr = this.parseConcat();\n    const ops = [];\n\n    while (1) { // eslint-disable-line no-constant-condition\n      const tok = this.nextToken();\n\n      if (!tok) {\n        break;\n      } else if (compareOps.indexOf(tok.value) !== -1) {\n        ops.push(new nodes.CompareOperand(tok.lineno,\n          tok.colno,\n          this.parseConcat(),\n          tok.value));\n      } else {\n        this.pushToken(tok);\n        break;\n      }\n    }\n\n    if (ops.length) {\n      return new nodes.Compare(ops[0].lineno,\n        ops[0].colno,\n        expr,\n        ops);\n    } else {\n      return expr;\n    }\n  }\n\n  // finds the '~' for string concatenation\n  parseConcat() {\n    let node = this.parseAdd();\n    while (this.skipValue(lexer.TOKEN_TILDE, '~')) {\n      const node2 = this.parseAdd();\n      node = new nodes.Concat(node.lineno,\n        node.colno,\n        node,\n        node2);\n    }\n    return node;\n  }\n\n  parseAdd() {\n    let node = this.parseSub();\n    while (this.skipValue(lexer.TOKEN_OPERATOR, '+')) {\n      const node2 = this.parseSub();\n      node = new nodes.Add(node.lineno,\n        node.colno,\n        node,\n        node2);\n    }\n    return node;\n  }\n\n  parseSub() {\n    let node = this.parseMul();\n    while (this.skipValue(lexer.TOKEN_OPERATOR, '-')) {\n      const node2 = this.parseMul();\n      node = new nodes.Sub(node.lineno,\n        node.colno,\n        node,\n        node2);\n    }\n    return node;\n  }\n\n  parseMul() {\n    let node = this.parseDiv();\n    while (this.skipValue(lexer.TOKEN_OPERATOR, '*')) {\n      const node2 = this.parseDiv();\n      node = new nodes.Mul(node.lineno,\n        node.colno,\n        node,\n        node2);\n    }\n    return node;\n  }\n\n  parseDiv() {\n    let node = this.parseFloorDiv();\n    while (this.skipValue(lexer.TOKEN_OPERATOR, '/')) {\n      const node2 = this.parseFloorDiv();\n      node = new nodes.Div(node.lineno,\n        node.colno,\n        node,\n        node2);\n    }\n    return node;\n  }\n\n  parseFloorDiv() {\n    let node = this.parseMod();\n    while (this.skipValue(lexer.TOKEN_OPERATOR, '//')) {\n      const node2 = this.parseMod();\n      node = new nodes.FloorDiv(node.lineno,\n        node.colno,\n        node,\n        node2);\n    }\n    return node;\n  }\n\n  parseMod() {\n    let node = this.parsePow();\n    while (this.skipValue(lexer.TOKEN_OPERATOR, '%')) {\n      const node2 = this.parsePow();\n      node = new nodes.Mod(node.lineno,\n        node.colno,\n        node,\n        node2);\n    }\n    return node;\n  }\n\n  parsePow() {\n    let node = this.parseUnary();\n    while (this.skipValue(lexer.TOKEN_OPERATOR, '**')) {\n      const node2 = this.parseUnary();\n      node = new nodes.Pow(node.lineno,\n        node.colno,\n        node,\n        node2);\n    }\n    return node;\n  }\n\n  parseUnary(noFilters) {\n    const tok = this.peekToken();\n    let node;\n\n    if (this.skipValue(lexer.TOKEN_OPERATOR, '-')) {\n      node = new nodes.Neg(tok.lineno,\n        tok.colno,\n        this.parseUnary(true));\n    } else if (this.skipValue(lexer.TOKEN_OPERATOR, '+')) {\n      node = new nodes.Pos(tok.lineno,\n        tok.colno,\n        this.parseUnary(true));\n    } else {\n      node = this.parsePrimary();\n    }\n\n    if (!noFilters) {\n      node = this.parseFilter(node);\n    }\n\n    return node;\n  }\n\n  parsePrimary(noPostfix) {\n    const tok = this.nextToken();\n    let val;\n    let node = null;\n\n    if (!tok) {\n      this.fail('expected expression, got end of file');\n    } else if (tok.type === lexer.TOKEN_STRING) {\n      val = tok.value;\n    } else if (tok.type === lexer.TOKEN_INT) {\n      val = parseInt(tok.value, 10);\n    } else if (tok.type === lexer.TOKEN_FLOAT) {\n      val = parseFloat(tok.value);\n    } else if (tok.type === lexer.TOKEN_BOOLEAN) {\n      if (tok.value === 'true') {\n        val = true;\n      } else if (tok.value === 'false') {\n        val = false;\n      } else {\n        this.fail('invalid boolean: ' + tok.value,\n          tok.lineno,\n          tok.colno);\n      }\n    } else if (tok.type === lexer.TOKEN_NONE) {\n      val = null;\n    } else if (tok.type === lexer.TOKEN_REGEX) {\n      val = new RegExp(tok.value.body, tok.value.flags);\n    }\n\n    if (val !== undefined) {\n      node = new nodes.Literal(tok.lineno, tok.colno, val);\n    } else if (tok.type === lexer.TOKEN_SYMBOL) {\n      node = new nodes.Symbol(tok.lineno, tok.colno, tok.value);\n    } else {\n      // See if it's an aggregate type, we need to push the\n      // current delimiter token back on\n      this.pushToken(tok);\n      node = this.parseAggregate();\n    }\n\n    if (!noPostfix) {\n      node = this.parsePostfix(node);\n    }\n\n    if (node) {\n      return node;\n    } else {\n      throw this.error(`unexpected token: ${tok.value}`, tok.lineno, tok.colno);\n    }\n  }\n\n  parseFilterName() {\n    const tok = this.expect(lexer.TOKEN_SYMBOL);\n    let name = tok.value;\n\n    while (this.skipValue(lexer.TOKEN_OPERATOR, '.')) {\n      name += '.' + this.expect(lexer.TOKEN_SYMBOL).value;\n    }\n\n    return new nodes.Symbol(tok.lineno, tok.colno, name);\n  }\n\n  parseFilterArgs(node) {\n    if (this.peekToken().type === lexer.TOKEN_LEFT_PAREN) {\n      // Get a FunCall node and add the parameters to the\n      // filter\n      const call = this.parsePostfix(node);\n      return call.args.children;\n    }\n    return [];\n  }\n\n  parseFilter(node) {\n    while (this.skip(lexer.TOKEN_PIPE)) {\n      const name = this.parseFilterName();\n\n      node = new nodes.Filter(\n        name.lineno,\n        name.colno,\n        name,\n        new nodes.NodeList(\n          name.lineno,\n          name.colno,\n          [node].concat(this.parseFilterArgs(node))\n        )\n      );\n    }\n\n    return node;\n  }\n\n  parseFilterStatement() {\n    var filterTok = this.peekToken();\n    if (!this.skipSymbol('filter')) {\n      this.fail('parseFilterStatement: expected filter');\n    }\n\n    const name = this.parseFilterName();\n    const args = this.parseFilterArgs(name);\n\n    this.advanceAfterBlockEnd(filterTok.value);\n    const body = new nodes.Capture(\n      name.lineno,\n      name.colno,\n      this.parseUntilBlocks('endfilter')\n    );\n    this.advanceAfterBlockEnd();\n\n    const node = new nodes.Filter(\n      name.lineno,\n      name.colno,\n      name,\n      new nodes.NodeList(\n        name.lineno,\n        name.colno,\n        [body].concat(args)\n      )\n    );\n\n    return new nodes.Output(\n      name.lineno,\n      name.colno,\n      [node]\n    );\n  }\n\n  parseAggregate() {\n    var tok = this.nextToken();\n    var node;\n\n    switch (tok.type) {\n      case lexer.TOKEN_LEFT_PAREN:\n        node = new nodes.Group(tok.lineno, tok.colno);\n        break;\n      case lexer.TOKEN_LEFT_BRACKET:\n        node = new nodes.Array(tok.lineno, tok.colno);\n        break;\n      case lexer.TOKEN_LEFT_CURLY:\n        node = new nodes.Dict(tok.lineno, tok.colno);\n        break;\n      default:\n        return null;\n    }\n\n    while (1) { // eslint-disable-line no-constant-condition\n      const type = this.peekToken().type;\n      if (type === lexer.TOKEN_RIGHT_PAREN ||\n        type === lexer.TOKEN_RIGHT_BRACKET ||\n        type === lexer.TOKEN_RIGHT_CURLY) {\n        this.nextToken();\n        break;\n      }\n\n      if (node.children.length > 0) {\n        if (!this.skip(lexer.TOKEN_COMMA)) {\n          this.fail('parseAggregate: expected comma after expression',\n            tok.lineno,\n            tok.colno);\n        }\n      }\n\n      if (node instanceof nodes.Dict) {\n        // TODO: check for errors\n        const key = this.parsePrimary();\n\n        // We expect a key/value pair for dicts, separated by a\n        // colon\n        if (!this.skip(lexer.TOKEN_COLON)) {\n          this.fail('parseAggregate: expected colon after dict key',\n            tok.lineno,\n            tok.colno);\n        }\n\n        // TODO: check for errors\n        const value = this.parseExpression();\n        node.addChild(new nodes.Pair(key.lineno,\n          key.colno,\n          key,\n          value));\n      } else {\n        // TODO: check for errors\n        const expr = this.parseExpression();\n        node.addChild(expr);\n      }\n    }\n\n    return node;\n  }\n\n  parseSignature(tolerant, noParens) {\n    let tok = this.peekToken();\n    if (!noParens && tok.type !== lexer.TOKEN_LEFT_PAREN) {\n      if (tolerant) {\n        return null;\n      } else {\n        this.fail('expected arguments', tok.lineno, tok.colno);\n      }\n    }\n\n    if (tok.type === lexer.TOKEN_LEFT_PAREN) {\n      tok = this.nextToken();\n    }\n\n    const args = new nodes.NodeList(tok.lineno, tok.colno);\n    const kwargs = new nodes.KeywordArgs(tok.lineno, tok.colno);\n    let checkComma = false;\n\n    while (1) { // eslint-disable-line no-constant-condition\n      tok = this.peekToken();\n      if (!noParens && tok.type === lexer.TOKEN_RIGHT_PAREN) {\n        this.nextToken();\n        break;\n      } else if (noParens && tok.type === lexer.TOKEN_BLOCK_END) {\n        break;\n      }\n\n      if (checkComma && !this.skip(lexer.TOKEN_COMMA)) {\n        this.fail('parseSignature: expected comma after expression',\n          tok.lineno,\n          tok.colno);\n      } else {\n        const arg = this.parseExpression();\n\n        if (this.skipValue(lexer.TOKEN_OPERATOR, '=')) {\n          kwargs.addChild(\n            new nodes.Pair(arg.lineno,\n              arg.colno,\n              arg,\n              this.parseExpression())\n          );\n        } else {\n          args.addChild(arg);\n        }\n      }\n\n      checkComma = true;\n    }\n\n    if (kwargs.children.length) {\n      args.addChild(kwargs);\n    }\n\n    return args;\n  }\n\n  parseUntilBlocks(...blockNames) {\n    const prev = this.breakOnBlocks;\n    this.breakOnBlocks = blockNames;\n\n    const ret = this.parse();\n\n    this.breakOnBlocks = prev;\n    return ret;\n  }\n\n  parseNodes() {\n    let tok;\n    const buf = [];\n\n    while ((tok = this.nextToken())) {\n      if (tok.type === lexer.TOKEN_DATA) {\n        let data = tok.value;\n        const nextToken = this.peekToken();\n        const nextVal = nextToken && nextToken.value;\n\n        // If the last token has \"-\" we need to trim the\n        // leading whitespace of the data. This is marked with\n        // the `dropLeadingWhitespace` variable.\n        if (this.dropLeadingWhitespace) {\n          // TODO: this could be optimized (don't use regex)\n          data = data.replace(/^\\s*/, '');\n          this.dropLeadingWhitespace = false;\n        }\n\n        // Same for the succeeding block start token\n        if (nextToken &&\n          ((nextToken.type === lexer.TOKEN_BLOCK_START &&\n          nextVal.charAt(nextVal.length - 1) === '-') ||\n          (nextToken.type === lexer.TOKEN_VARIABLE_START &&\n          nextVal.charAt(this.tokens.tags.VARIABLE_START.length)\n          === '-') ||\n          (nextToken.type === lexer.TOKEN_COMMENT &&\n          nextVal.charAt(this.tokens.tags.COMMENT_START.length)\n          === '-'))) {\n          // TODO: this could be optimized (don't use regex)\n          data = data.replace(/\\s*$/, '');\n        }\n\n        buf.push(new nodes.Output(tok.lineno,\n          tok.colno,\n          [new nodes.TemplateData(tok.lineno,\n            tok.colno,\n            data)]));\n      } else if (tok.type === lexer.TOKEN_BLOCK_START) {\n        this.dropLeadingWhitespace = false;\n        const n = this.parseStatement();\n        if (!n) {\n          break;\n        }\n        buf.push(n);\n      } else if (tok.type === lexer.TOKEN_VARIABLE_START) {\n        const e = this.parseExpression();\n        this.dropLeadingWhitespace = false;\n        this.advanceAfterVariableEnd();\n        buf.push(new nodes.Output(tok.lineno, tok.colno, [e]));\n      } else if (tok.type === lexer.TOKEN_COMMENT) {\n        this.dropLeadingWhitespace = tok.value.charAt(\n          tok.value.length - this.tokens.tags.COMMENT_END.length - 1\n        ) === '-';\n      } else {\n        // Ignore comments, otherwise this should be an error\n        this.fail('Unexpected token at top-level: ' +\n          tok.type, tok.lineno, tok.colno);\n      }\n    }\n\n    return buf;\n  }\n\n  parse() {\n    return new nodes.NodeList(0, 0, this.parseNodes());\n  }\n\n  parseAsRoot() {\n    return new nodes.Root(0, 0, this.parseNodes());\n  }\n}\n\n// var util = require('util');\n\n// var l = lexer.lex('{%- if x -%}\\n hello {% endif %}');\n// var t;\n// while((t = l.nextToken())) {\n//     console.log(util.inspect(t));\n// }\n\n// var p = new Parser(lexer.lex('hello {% filter title %}' +\n//                              'Hello madam how are you' +\n//                              '{% endfilter %}'));\n// var n = p.parseAsRoot();\n// nodes.printNodes(n);\n\nmodule.exports = {\n  parse(src, extensions, opts) {\n    var p = new Parser(lexer.lex(src, opts));\n    if (extensions !== undefined) {\n      p.extensions = extensions;\n    }\n    return p.parseAsRoot();\n  },\n  Parser: Parser\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/parser.js","'use strict';\n\nconst lib = require('./lib');\n\nlet whitespaceChars = ' \\n\\t\\r\\u00A0';\nlet delimChars = '()[]{}%*-+~/#,:|.<>=!';\nlet intChars = '0123456789';\n\nlet BLOCK_START = '{%';\nlet BLOCK_END = '%}';\nlet VARIABLE_START = '{{';\nlet VARIABLE_END = '}}';\nlet COMMENT_START = '{#';\nlet COMMENT_END = '#}';\n\nlet TOKEN_STRING = 'string';\nlet TOKEN_WHITESPACE = 'whitespace';\nlet TOKEN_DATA = 'data';\nlet TOKEN_BLOCK_START = 'block-start';\nlet TOKEN_BLOCK_END = 'block-end';\nlet TOKEN_VARIABLE_START = 'variable-start';\nlet TOKEN_VARIABLE_END = 'variable-end';\nlet TOKEN_COMMENT = 'comment';\nlet TOKEN_LEFT_PAREN = 'left-paren';\nlet TOKEN_RIGHT_PAREN = 'right-paren';\nlet TOKEN_LEFT_BRACKET = 'left-bracket';\nlet TOKEN_RIGHT_BRACKET = 'right-bracket';\nlet TOKEN_LEFT_CURLY = 'left-curly';\nlet TOKEN_RIGHT_CURLY = 'right-curly';\nlet TOKEN_OPERATOR = 'operator';\nlet TOKEN_COMMA = 'comma';\nlet TOKEN_COLON = 'colon';\nlet TOKEN_TILDE = 'tilde';\nlet TOKEN_PIPE = 'pipe';\nlet TOKEN_INT = 'int';\nlet TOKEN_FLOAT = 'float';\nlet TOKEN_BOOLEAN = 'boolean';\nlet TOKEN_NONE = 'none';\nlet TOKEN_SYMBOL = 'symbol';\nlet TOKEN_SPECIAL = 'special';\nlet TOKEN_REGEX = 'regex';\n\nfunction token(type, value, lineno, colno) {\n  return {\n    type: type,\n    value: value,\n    lineno: lineno,\n    colno: colno\n  };\n}\n\nclass Tokenizer {\n  constructor(str, opts) {\n    this.str = str;\n    this.index = 0;\n    this.len = str.length;\n    this.lineno = 0;\n    this.colno = 0;\n\n    this.in_code = false;\n\n    opts = opts || {};\n\n    let tags = opts.tags || {};\n    this.tags = {\n      BLOCK_START: tags.blockStart || BLOCK_START,\n      BLOCK_END: tags.blockEnd || BLOCK_END,\n      VARIABLE_START: tags.variableStart || VARIABLE_START,\n      VARIABLE_END: tags.variableEnd || VARIABLE_END,\n      COMMENT_START: tags.commentStart || COMMENT_START,\n      COMMENT_END: tags.commentEnd || COMMENT_END\n    };\n\n    this.trimBlocks = !!opts.trimBlocks;\n    this.lstripBlocks = !!opts.lstripBlocks;\n  }\n\n  nextToken() {\n    let lineno = this.lineno;\n    let colno = this.colno;\n    let tok;\n\n    if (this.in_code) {\n      // Otherwise, if we are in a block parse it as code\n      let cur = this.current();\n\n      if (this.isFinished()) {\n        // We have nothing else to parse\n        return null;\n      } else if (cur === '\"' || cur === '\\'') {\n        // We've hit a string\n        return token(TOKEN_STRING, this._parseString(cur), lineno, colno);\n      } else if ((tok = this._extract(whitespaceChars))) {\n        // We hit some whitespace\n        return token(TOKEN_WHITESPACE, tok, lineno, colno);\n      } else if ((tok = this._extractString(this.tags.BLOCK_END)) ||\n        (tok = this._extractString('-' + this.tags.BLOCK_END))) {\n        // Special check for the block end tag\n        //\n        // It is a requirement that start and end tags are composed of\n        // delimiter characters (%{}[] etc), and our code always\n        // breaks on delimiters so we can assume the token parsing\n        // doesn't consume these elsewhere\n        this.in_code = false;\n        if (this.trimBlocks) {\n          cur = this.current();\n          if (cur === '\\n') {\n            // Skip newline\n            this.forward();\n          } else if (cur === '\\r') {\n            // Skip CRLF newline\n            this.forward();\n            cur = this.current();\n            if (cur === '\\n') {\n              this.forward();\n            } else {\n              // Was not a CRLF, so go back\n              this.back();\n            }\n          }\n        }\n        return token(TOKEN_BLOCK_END, tok, lineno, colno);\n      } else if ((tok = this._extractString(this.tags.VARIABLE_END)) ||\n        (tok = this._extractString('-' + this.tags.VARIABLE_END))) {\n        // Special check for variable end tag (see above)\n        this.in_code = false;\n        return token(TOKEN_VARIABLE_END, tok, lineno, colno);\n      } else if (cur === 'r' && this.str.charAt(this.index + 1) === '/') {\n        // Skip past 'r/'.\n        this.forwardN(2);\n\n        // Extract until the end of the regex -- / ends it, \\/ does not.\n        let regexBody = '';\n        while (!this.isFinished()) {\n          if (this.current() === '/' && this.previous() !== '\\\\') {\n            this.forward();\n            break;\n          } else {\n            regexBody += this.current();\n            this.forward();\n          }\n        }\n\n        // Check for flags.\n        // The possible flags are according to https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp)\n        let POSSIBLE_FLAGS = ['g', 'i', 'm', 'y'];\n        let regexFlags = '';\n        while (!this.isFinished()) {\n          let isCurrentAFlag = POSSIBLE_FLAGS.indexOf(this.current()) !== -1;\n          if (isCurrentAFlag) {\n            regexFlags += this.current();\n            this.forward();\n          } else {\n            break;\n          }\n        }\n\n        return token(TOKEN_REGEX, {\n          body: regexBody,\n          flags: regexFlags\n        }, lineno, colno);\n      } else if (delimChars.indexOf(cur) !== -1) {\n        // We've hit a delimiter (a special char like a bracket)\n        this.forward();\n        let complexOps = ['==', '===', '!=', '!==', '<=', '>=', '//', '**'];\n        let curComplex = cur + this.current();\n        let type;\n\n        if (lib.indexOf(complexOps, curComplex) !== -1) {\n          this.forward();\n          cur = curComplex;\n\n          // See if this is a strict equality/inequality comparator\n          if (lib.indexOf(complexOps, curComplex + this.current()) !== -1) {\n            cur = curComplex + this.current();\n            this.forward();\n          }\n        }\n\n        switch (cur) {\n          case '(':\n            type = TOKEN_LEFT_PAREN;\n            break;\n          case ')':\n            type = TOKEN_RIGHT_PAREN;\n            break;\n          case '[':\n            type = TOKEN_LEFT_BRACKET;\n            break;\n          case ']':\n            type = TOKEN_RIGHT_BRACKET;\n            break;\n          case '{':\n            type = TOKEN_LEFT_CURLY;\n            break;\n          case '}':\n            type = TOKEN_RIGHT_CURLY;\n            break;\n          case ',':\n            type = TOKEN_COMMA;\n            break;\n          case ':':\n            type = TOKEN_COLON;\n            break;\n          case '~':\n            type = TOKEN_TILDE;\n            break;\n          case '|':\n            type = TOKEN_PIPE;\n            break;\n          default:\n            type = TOKEN_OPERATOR;\n        }\n\n        return token(type, cur, lineno, colno);\n      } else {\n        // We are not at whitespace or a delimiter, so extract the\n        // text and parse it\n        tok = this._extractUntil(whitespaceChars + delimChars);\n\n        if (tok.match(/^[-+]?[0-9]+$/)) {\n          if (this.current() === '.') {\n            this.forward();\n            let dec = this._extract(intChars);\n            return token(TOKEN_FLOAT, tok + '.' + dec, lineno, colno);\n          } else {\n            return token(TOKEN_INT, tok, lineno, colno);\n          }\n        } else if (tok.match(/^(true|false)$/)) {\n          return token(TOKEN_BOOLEAN, tok, lineno, colno);\n        } else if (tok === 'none') {\n          return token(TOKEN_NONE, tok, lineno, colno);\n        /*\n         * Added to make the test `null is null` evaluate truthily.\n         * Otherwise, Nunjucks will look up null in the context and\n         * return `undefined`, which is not what we want. This *may* have\n         * consequences is someone is using null in their templates as a\n         * variable.\n         */\n        } else if (tok === 'null') {\n          return token(TOKEN_NONE, tok, lineno, colno);\n        } else if (tok) {\n          return token(TOKEN_SYMBOL, tok, lineno, colno);\n        } else {\n          throw new Error('Unexpected value while parsing: ' + tok);\n        }\n      }\n    } else {\n      // Parse out the template text, breaking on tag\n      // delimiters because we need to look for block/variable start\n      // tags (don't use the full delimChars for optimization)\n      let beginChars = (this.tags.BLOCK_START.charAt(0) +\n      this.tags.VARIABLE_START.charAt(0) +\n      this.tags.COMMENT_START.charAt(0) +\n      this.tags.COMMENT_END.charAt(0));\n\n      if (this.isFinished()) {\n        return null;\n      } else if ((tok = this._extractString(this.tags.BLOCK_START + '-')) ||\n        (tok = this._extractString(this.tags.BLOCK_START))) {\n        this.in_code = true;\n        return token(TOKEN_BLOCK_START, tok, lineno, colno);\n      } else if ((tok = this._extractString(this.tags.VARIABLE_START + '-')) ||\n        (tok = this._extractString(this.tags.VARIABLE_START))) {\n        this.in_code = true;\n        return token(TOKEN_VARIABLE_START, tok, lineno, colno);\n      } else {\n        tok = '';\n        let data;\n        let inComment = false;\n\n        if (this._matches(this.tags.COMMENT_START)) {\n          inComment = true;\n          tok = this._extractString(this.tags.COMMENT_START);\n        }\n\n        // Continually consume text, breaking on the tag delimiter\n        // characters and checking to see if it's a start tag.\n        //\n        // We could hit the end of the template in the middle of\n        // our looping, so check for the null return value from\n        // _extractUntil\n        while ((data = this._extractUntil(beginChars)) !== null) {\n          tok += data;\n\n          if ((this._matches(this.tags.BLOCK_START) ||\n            this._matches(this.tags.VARIABLE_START) ||\n            this._matches(this.tags.COMMENT_START)) &&\n            !inComment) {\n            if (this.lstripBlocks &&\n              this._matches(this.tags.BLOCK_START) &&\n              this.colno > 0 &&\n              this.colno <= tok.length) {\n              let lastLine = tok.slice(-this.colno);\n              if (/^\\s+$/.test(lastLine)) {\n                // Remove block leading whitespace from beginning of the string\n                tok = tok.slice(0, -this.colno);\n                if (!tok.length) {\n                  // All data removed, collapse to avoid unnecessary nodes\n                  // by returning next token (block start)\n                  return this.nextToken();\n                }\n              }\n            }\n            // If it is a start tag, stop looping\n            break;\n          } else if (this._matches(this.tags.COMMENT_END)) {\n            if (!inComment) {\n              throw new Error('unexpected end of comment');\n            }\n            tok += this._extractString(this.tags.COMMENT_END);\n            break;\n          } else {\n            // It does not match any tag, so add the character and\n            // carry on\n            tok += this.current();\n            this.forward();\n          }\n        }\n\n        if (data === null && inComment) {\n          throw new Error('expected end of comment, got end of file');\n        }\n\n        return token(inComment ? TOKEN_COMMENT : TOKEN_DATA,\n          tok,\n          lineno,\n          colno);\n      }\n    }\n  }\n\n  _parseString(delimiter) {\n    this.forward();\n\n    let str = '';\n\n    while (!this.isFinished() && this.current() !== delimiter) {\n      let cur = this.current();\n\n      if (cur === '\\\\') {\n        this.forward();\n        switch (this.current()) {\n          case 'n':\n            str += '\\n';\n            break;\n          case 't':\n            str += '\\t';\n            break;\n          case 'r':\n            str += '\\r';\n            break;\n          default:\n            str += this.current();\n        }\n        this.forward();\n      } else {\n        str += cur;\n        this.forward();\n      }\n    }\n\n    this.forward();\n    return str;\n  }\n\n  _matches(str) {\n    if (this.index + str.length > this.len) {\n      return null;\n    }\n\n    let m = this.str.slice(this.index, this.index + str.length);\n    return m === str;\n  }\n\n  _extractString(str) {\n    if (this._matches(str)) {\n      this.index += str.length;\n      return str;\n    }\n    return null;\n  }\n\n  _extractUntil(charString) {\n    // Extract all non-matching chars, with the default matching set\n    // to everything\n    return this._extractMatching(true, charString || '');\n  }\n\n  _extract(charString) {\n    // Extract all matching chars (no default, so charString must be\n    // explicit)\n    return this._extractMatching(false, charString);\n  }\n\n  _extractMatching(breakOnMatch, charString) {\n    // Pull out characters until a breaking char is hit.\n    // If breakOnMatch is false, a non-matching char stops it.\n    // If breakOnMatch is true, a matching char stops it.\n\n    if (this.isFinished()) {\n      return null;\n    }\n\n    let first = charString.indexOf(this.current());\n\n    // Only proceed if the first character doesn't meet our condition\n    if ((breakOnMatch && first === -1) ||\n      (!breakOnMatch && first !== -1)) {\n      let t = this.current();\n      this.forward();\n\n      // And pull out all the chars one at a time until we hit a\n      // breaking char\n      let idx = charString.indexOf(this.current());\n\n      while (((breakOnMatch && idx === -1) ||\n        (!breakOnMatch && idx !== -1)) && !this.isFinished()) {\n        t += this.current();\n        this.forward();\n\n        idx = charString.indexOf(this.current());\n      }\n\n      return t;\n    }\n\n    return '';\n  }\n\n  _extractRegex(regex) {\n    let matches = this.currentStr().match(regex);\n    if (!matches) {\n      return null;\n    }\n\n    // Move forward whatever was matched\n    this.forwardN(matches[0].length);\n\n    return matches;\n  }\n\n  isFinished() {\n    return this.index >= this.len;\n  }\n\n  forwardN(n) {\n    for (let i = 0; i < n; i++) {\n      this.forward();\n    }\n  }\n\n  forward() {\n    this.index++;\n\n    if (this.previous() === '\\n') {\n      this.lineno++;\n      this.colno = 0;\n    } else {\n      this.colno++;\n    }\n  }\n\n  backN(n) {\n    for (let i = 0; i < n; i++) {\n      this.back();\n    }\n  }\n\n  back() {\n    this.index--;\n\n    if (this.current() === '\\n') {\n      this.lineno--;\n\n      let idx = this.src.lastIndexOf('\\n', this.index - 1);\n      if (idx === -1) {\n        this.colno = this.index;\n      } else {\n        this.colno = this.index - idx;\n      }\n    } else {\n      this.colno--;\n    }\n  }\n\n  // current returns current character\n  current() {\n    if (!this.isFinished()) {\n      return this.str.charAt(this.index);\n    }\n    return '';\n  }\n\n  // currentStr returns what's left of the unparsed string\n  currentStr() {\n    if (!this.isFinished()) {\n      return this.str.substr(this.index);\n    }\n    return '';\n  }\n\n  previous() {\n    return this.str.charAt(this.index - 1);\n  }\n}\n\nmodule.exports = {\n  lex(src, opts) {\n    return new Tokenizer(src, opts);\n  },\n\n  TOKEN_STRING: TOKEN_STRING,\n  TOKEN_WHITESPACE: TOKEN_WHITESPACE,\n  TOKEN_DATA: TOKEN_DATA,\n  TOKEN_BLOCK_START: TOKEN_BLOCK_START,\n  TOKEN_BLOCK_END: TOKEN_BLOCK_END,\n  TOKEN_VARIABLE_START: TOKEN_VARIABLE_START,\n  TOKEN_VARIABLE_END: TOKEN_VARIABLE_END,\n  TOKEN_COMMENT: TOKEN_COMMENT,\n  TOKEN_LEFT_PAREN: TOKEN_LEFT_PAREN,\n  TOKEN_RIGHT_PAREN: TOKEN_RIGHT_PAREN,\n  TOKEN_LEFT_BRACKET: TOKEN_LEFT_BRACKET,\n  TOKEN_RIGHT_BRACKET: TOKEN_RIGHT_BRACKET,\n  TOKEN_LEFT_CURLY: TOKEN_LEFT_CURLY,\n  TOKEN_RIGHT_CURLY: TOKEN_RIGHT_CURLY,\n  TOKEN_OPERATOR: TOKEN_OPERATOR,\n  TOKEN_COMMA: TOKEN_COMMA,\n  TOKEN_COLON: TOKEN_COLON,\n  TOKEN_TILDE: TOKEN_TILDE,\n  TOKEN_PIPE: TOKEN_PIPE,\n  TOKEN_INT: TOKEN_INT,\n  TOKEN_FLOAT: TOKEN_FLOAT,\n  TOKEN_BOOLEAN: TOKEN_BOOLEAN,\n  TOKEN_NONE: TOKEN_NONE,\n  TOKEN_SYMBOL: TOKEN_SYMBOL,\n  TOKEN_SPECIAL: TOKEN_SPECIAL,\n  TOKEN_REGEX: TOKEN_REGEX\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/lexer.js","'use strict';\n\nconst Loader = require('./loader');\nconst {PrecompiledLoader} = require('./precompiled-loader.js');\n\nclass WebLoader extends Loader {\n  constructor(baseURL, opts) {\n    super();\n    this.baseURL = baseURL || '.';\n    opts = opts || {};\n\n    // By default, the cache is turned off because there's no way\n    // to \"watch\" templates over HTTP, so they are re-downloaded\n    // and compiled each time. (Remember, PRECOMPILE YOUR\n    // TEMPLATES in production!)\n    this.useCache = !!opts.useCache;\n\n    // We default `async` to false so that the simple synchronous\n    // API can be used when you aren't doing anything async in\n    // your templates (which is most of the time). This performs a\n    // sync ajax request, but that's ok because it should *only*\n    // happen in development. PRECOMPILE YOUR TEMPLATES.\n    this.async = !!opts.async;\n  }\n\n  resolve(from, to) {\n    throw new Error('relative templates not support in the browser yet');\n  }\n\n  getSource(name, cb) {\n    var useCache = this.useCache;\n    var result;\n    this.fetch(this.baseURL + '/' + name, (err, src) => {\n      if (err) {\n        if (cb) {\n          cb(err.content);\n        } else if (err.status === 404) {\n          result = null;\n        } else {\n          throw err.content;\n        }\n      } else {\n        result = {\n          src: src,\n          path: name,\n          noCache: !useCache\n        };\n        if (cb) {\n          cb(null, result);\n        }\n      }\n    });\n\n    // if this WebLoader isn't running asynchronously, the\n    // fetch above would actually run sync and we'll have a\n    // result here\n    return result;\n  }\n\n  fetch(url, cb) {\n    // Only in the browser please\n    if (typeof window === 'undefined') {\n      throw new Error('WebLoader can only by used in a browser');\n    }\n\n    const ajax = new XMLHttpRequest();\n    let loading = true;\n\n    ajax.onreadystatechange = () => {\n      if (ajax.readyState === 4 && loading) {\n        loading = false;\n        if (ajax.status === 0 || ajax.status === 200) {\n          cb(null, ajax.responseText);\n        } else {\n          cb({\n            status: ajax.status,\n            content: ajax.responseText\n          });\n        }\n      }\n    };\n\n    url += (url.indexOf('?') === -1 ? '?' : '&') + 's=' +\n    (new Date().getTime());\n\n    ajax.open('GET', url, this.async);\n    ajax.send();\n  }\n}\n\nmodule.exports = {\n  WebLoader: WebLoader,\n  PrecompiledLoader: PrecompiledLoader\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/web-loaders.js","'use strict';\n\nconst lib = require('./src/lib');\nconst {Environment, Template} = require('./src/environment');\nconst Loader = require('./src/loader');\nconst loaders = require('./src/loaders');\nconst precompile = require('./src/precompile');\nconst compiler = require('./src/compiler');\nconst parser = require('./src/parser');\nconst lexer = require('./src/lexer');\nconst runtime = require('./src/runtime');\nconst nodes = require('./src/nodes');\nconst installJinjaCompat = require('./src/jinja-compat');\n\n// A single instance of an environment, since this is so commonly used\nlet e;\n\nfunction configure(templatesPath, opts) {\n  opts = opts || {};\n  if (lib.isObject(templatesPath)) {\n    opts = templatesPath;\n    templatesPath = null;\n  }\n\n  let TemplateLoader;\n  if (loaders.FileSystemLoader) {\n    TemplateLoader = new loaders.FileSystemLoader(templatesPath, {\n      watch: opts.watch,\n      noCache: opts.noCache\n    });\n  } else if (loaders.WebLoader) {\n    TemplateLoader = new loaders.WebLoader(templatesPath, {\n      useCache: opts.web && opts.web.useCache,\n      async: opts.web && opts.web.async\n    });\n  }\n\n  e = new Environment(TemplateLoader, opts);\n\n  if (opts && opts.express) {\n    e.express(opts.express);\n  }\n\n  return e;\n}\n\nmodule.exports = {\n  Environment: Environment,\n  Template: Template,\n  Loader: Loader,\n  FileSystemLoader: loaders.FileSystemLoader,\n  PrecompiledLoader: loaders.PrecompiledLoader,\n  WebLoader: loaders.WebLoader,\n  compiler: compiler,\n  parser: parser,\n  lexer: lexer,\n  runtime: runtime,\n  lib: lib,\n  nodes: nodes,\n  installJinjaCompat: installJinjaCompat,\n  configure: configure,\n  reset() {\n    e = undefined;\n  },\n  compile(src, env, path, eagerCompile) {\n    if (!e) {\n      configure();\n    }\n    return new Template(src, env, path, eagerCompile);\n  },\n  render(name, ctx, cb) {\n    if (!e) {\n      configure();\n    }\n\n    return e.render(name, ctx, cb);\n  },\n  renderString(src, ctx, cb) {\n    if (!e) {\n      configure();\n    }\n\n    return e.renderString(src, ctx, cb);\n  },\n  precompile: (precompile) ? precompile.precompile : undefined,\n  precompileString: (precompile) ? precompile.precompileString : undefined,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/index.js","\"use strict\";\n\n// rawAsap provides everything we need except exception management.\nvar rawAsap = require(\"./raw\");\n// RawTasks are recycled to reduce GC churn.\nvar freeTasks = [];\n// We queue errors to ensure they are thrown in right order (FIFO).\n// Array-as-queue is good enough here, since we are just dealing with exceptions.\nvar pendingErrors = [];\nvar requestErrorThrow = rawAsap.makeRequestCallFromTimer(throwFirstError);\n\nfunction throwFirstError() {\n    if (pendingErrors.length) {\n        throw pendingErrors.shift();\n    }\n}\n\n/**\n * Calls a task as soon as possible after returning, in its own event, with priority\n * over other events like animation, reflow, and repaint. An error thrown from an\n * event will not interrupt, nor even substantially slow down the processing of\n * other events, but will be rather postponed to a lower priority event.\n * @param {{call}} task A callable object, typically a function that takes no\n * arguments.\n */\nmodule.exports = asap;\nfunction asap(task) {\n    var rawTask;\n    if (freeTasks.length) {\n        rawTask = freeTasks.pop();\n    } else {\n        rawTask = new RawTask();\n    }\n    rawTask.task = task;\n    rawAsap(rawTask);\n}\n\n// We wrap tasks with recyclable task objects.  A task object implements\n// `call`, just like a function.\nfunction RawTask() {\n    this.task = null;\n}\n\n// The sole purpose of wrapping the task is to catch the exception and recycle\n// the task object after its single use.\nRawTask.prototype.call = function () {\n    try {\n        this.task.call();\n    } catch (error) {\n        if (asap.onerror) {\n            // This hook exists purely for testing purposes.\n            // Its name will be periodically randomized to break any code that\n            // depends on its existence.\n            asap.onerror(error);\n        } else {\n            // In a web browser, exceptions are not fatal. However, to avoid\n            // slowing down the queue of pending tasks, we rethrow the error in a\n            // lower priority turn.\n            pendingErrors.push(error);\n            requestErrorThrow();\n        }\n    } finally {\n        this.task = null;\n        freeTasks[freeTasks.length] = this;\n    }\n};\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/asap/browser-asap.js\n// module id = 12\n// module chunks = 0","\"use strict\";\n\n// Use the fastest means possible to execute a task in its own turn, with\n// priority over other events including IO, animation, reflow, and redraw\n// events in browsers.\n//\n// An exception thrown by a task will permanently interrupt the processing of\n// subsequent tasks. The higher level `asap` function ensures that if an\n// exception is thrown by a task, that the task queue will continue flushing as\n// soon as possible, but if you use `rawAsap` directly, you are responsible to\n// either ensure that no exceptions are thrown from your task, or to manually\n// call `rawAsap.requestFlush` if an exception is thrown.\nmodule.exports = rawAsap;\nfunction rawAsap(task) {\n    if (!queue.length) {\n        requestFlush();\n        flushing = true;\n    }\n    // Equivalent to push, but avoids a function call.\n    queue[queue.length] = task;\n}\n\nvar queue = [];\n// Once a flush has been requested, no further calls to `requestFlush` are\n// necessary until the next `flush` completes.\nvar flushing = false;\n// `requestFlush` is an implementation-specific method that attempts to kick\n// off a `flush` event as quickly as possible. `flush` will attempt to exhaust\n// the event queue before yielding to the browser's own event loop.\nvar requestFlush;\n// The position of the next task to execute in the task queue. This is\n// preserved between calls to `flush` so that it can be resumed if\n// a task throws an exception.\nvar index = 0;\n// If a task schedules additional tasks recursively, the task queue can grow\n// unbounded. To prevent memory exhaustion, the task queue will periodically\n// truncate already-completed tasks.\nvar capacity = 1024;\n\n// The flush function processes all tasks that have been scheduled with\n// `rawAsap` unless and until one of those tasks throws an exception.\n// If a task throws an exception, `flush` ensures that its state will remain\n// consistent and will resume where it left off when called again.\n// However, `flush` does not make any arrangements to be called again if an\n// exception is thrown.\nfunction flush() {\n    while (index < queue.length) {\n        var currentIndex = index;\n        // Advance the index before calling the task. This ensures that we will\n        // begin flushing on the next task the task throws an error.\n        index = index + 1;\n        queue[currentIndex].call();\n        // Prevent leaking memory for long chains of recursive calls to `asap`.\n        // If we call `asap` within tasks scheduled by `asap`, the queue will\n        // grow, but to avoid an O(n) walk for every task we execute, we don't\n        // shift tasks off the queue after they have been executed.\n        // Instead, we periodically shift 1024 tasks off the queue.\n        if (index > capacity) {\n            // Manually shift all values starting at the index back to the\n            // beginning of the queue.\n            for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) {\n                queue[scan] = queue[scan + index];\n            }\n            queue.length -= index;\n            index = 0;\n        }\n    }\n    queue.length = 0;\n    index = 0;\n    flushing = false;\n}\n\n// `requestFlush` is implemented using a strategy based on data collected from\n// every available SauceLabs Selenium web driver worker at time of writing.\n// https://docs.google.com/spreadsheets/d/1mG-5UYGup5qxGdEMWkhP6BWCz053NUb2E1QoUTU16uA/edit#gid=783724593\n\n// Safari 6 and 6.1 for desktop, iPad, and iPhone are the only browsers that\n// have WebKitMutationObserver but not un-prefixed MutationObserver.\n// Must use `global` or `self` instead of `window` to work in both frames and web\n// workers. `global` is a provision of Browserify, Mr, Mrs, or Mop.\n\n/* globals self */\nvar scope = typeof global !== \"undefined\" ? global : self;\nvar BrowserMutationObserver = scope.MutationObserver || scope.WebKitMutationObserver;\n\n// MutationObservers are desirable because they have high priority and work\n// reliably everywhere they are implemented.\n// They are implemented in all modern browsers.\n//\n// - Android 4-4.3\n// - Chrome 26-34\n// - Firefox 14-29\n// - Internet Explorer 11\n// - iPad Safari 6-7.1\n// - iPhone Safari 7-7.1\n// - Safari 6-7\nif (typeof BrowserMutationObserver === \"function\") {\n    requestFlush = makeRequestCallFromMutationObserver(flush);\n\n// MessageChannels are desirable because they give direct access to the HTML\n// task queue, are implemented in Internet Explorer 10, Safari 5.0-1, and Opera\n// 11-12, and in web workers in many engines.\n// Although message channels yield to any queued rendering and IO tasks, they\n// would be better than imposing the 4ms delay of timers.\n// However, they do not work reliably in Internet Explorer or Safari.\n\n// Internet Explorer 10 is the only browser that has setImmediate but does\n// not have MutationObservers.\n// Although setImmediate yields to the browser's renderer, it would be\n// preferrable to falling back to setTimeout since it does not have\n// the minimum 4ms penalty.\n// Unfortunately there appears to be a bug in Internet Explorer 10 Mobile (and\n// Desktop to a lesser extent) that renders both setImmediate and\n// MessageChannel useless for the purposes of ASAP.\n// https://github.com/kriskowal/q/issues/396\n\n// Timers are implemented universally.\n// We fall back to timers in workers in most engines, and in foreground\n// contexts in the following browsers.\n// However, note that even this simple case requires nuances to operate in a\n// broad spectrum of browsers.\n//\n// - Firefox 3-13\n// - Internet Explorer 6-9\n// - iPad Safari 4.3\n// - Lynx 2.8.7\n} else {\n    requestFlush = makeRequestCallFromTimer(flush);\n}\n\n// `requestFlush` requests that the high priority event queue be flushed as\n// soon as possible.\n// This is useful to prevent an error thrown in a task from stalling the event\n// queue if the exception handled by Node.js’s\n// `process.on(\"uncaughtException\")` or by a domain.\nrawAsap.requestFlush = requestFlush;\n\n// To request a high priority event, we induce a mutation observer by toggling\n// the text of a text node between \"1\" and \"-1\".\nfunction makeRequestCallFromMutationObserver(callback) {\n    var toggle = 1;\n    var observer = new BrowserMutationObserver(callback);\n    var node = document.createTextNode(\"\");\n    observer.observe(node, {characterData: true});\n    return function requestCall() {\n        toggle = -toggle;\n        node.data = toggle;\n    };\n}\n\n// The message channel technique was discovered by Malte Ubl and was the\n// original foundation for this library.\n// http://www.nonblocking.io/2011/06/windownexttick.html\n\n// Safari 6.0.5 (at least) intermittently fails to create message ports on a\n// page's first load. Thankfully, this version of Safari supports\n// MutationObservers, so we don't need to fall back in that case.\n\n// function makeRequestCallFromMessageChannel(callback) {\n//     var channel = new MessageChannel();\n//     channel.port1.onmessage = callback;\n//     return function requestCall() {\n//         channel.port2.postMessage(0);\n//     };\n// }\n\n// For reasons explained above, we are also unable to use `setImmediate`\n// under any circumstances.\n// Even if we were, there is another bug in Internet Explorer 10.\n// It is not sufficient to assign `setImmediate` to `requestFlush` because\n// `setImmediate` must be called *by name* and therefore must be wrapped in a\n// closure.\n// Never forget.\n\n// function makeRequestCallFromSetImmediate(callback) {\n//     return function requestCall() {\n//         setImmediate(callback);\n//     };\n// }\n\n// Safari 6.0 has a problem where timers will get lost while the user is\n// scrolling. This problem does not impact ASAP because Safari 6.0 supports\n// mutation observers, so that implementation is used instead.\n// However, if we ever elect to use timers in Safari, the prevalent work-around\n// is to add a scroll event listener that calls for a flush.\n\n// `setTimeout` does not call the passed callback if the delay is less than\n// approximately 7 in web workers in Firefox 8 through 18, and sometimes not\n// even then.\n\nfunction makeRequestCallFromTimer(callback) {\n    return function requestCall() {\n        // We dispatch a timeout with a specified delay of 0 for engines that\n        // can reliably accommodate that request. This will usually be snapped\n        // to a 4 milisecond delay, but once we're flushing, there's no delay\n        // between events.\n        var timeoutHandle = setTimeout(handleTimer, 0);\n        // However, since this timer gets frequently dropped in Firefox\n        // workers, we enlist an interval handle that will try to fire\n        // an event 20 times per second until it succeeds.\n        var intervalHandle = setInterval(handleTimer, 50);\n\n        function handleTimer() {\n            // Whichever timer succeeds will cancel both timers and\n            // execute the callback.\n            clearTimeout(timeoutHandle);\n            clearInterval(intervalHandle);\n            callback();\n        }\n    };\n}\n\n// This is for `asap.js` only.\n// Its name will be periodically randomized to break any code that depends on\n// its existence.\nrawAsap.makeRequestCallFromTimer = makeRequestCallFromTimer;\n\n// ASAP was originally a nextTick shim included in Q. This was factored out\n// into this ASAP package. It was later adapted to RSVP which made further\n// amendments. These decisions, particularly to marginalize MessageChannel and\n// to capture the MutationObserver implementation in a closure, were integrated\n// back into ASAP proper.\n// https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/asap/browser-raw.js\n// module id = 13\n// module chunks = 0","var g;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1,eval)(\"this\");\r\n} catch(e) {\r\n\t// This works if the window reference is available\r\n\tif(typeof window === \"object\")\r\n\t\tg = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// (webpack)/buildin/global.js\n// module id = 14\n// module chunks = 0","// MIT license (by Elan Shanker).\n(function(globals) {\n  'use strict';\n\n  var executeSync = function(){\n    var args = Array.prototype.slice.call(arguments);\n    if (typeof args[0] === 'function'){\n      args[0].apply(null, args.splice(1));\n    }\n  };\n\n  var executeAsync = function(fn){\n    if (typeof setImmediate === 'function') {\n      setImmediate(fn);\n    } else if (typeof process !== 'undefined' && process.nextTick) {\n      process.nextTick(fn);\n    } else {\n      setTimeout(fn, 0);\n    }\n  };\n\n  var makeIterator = 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  var _isArray = Array.isArray || function(maybeArray){\n    return Object.prototype.toString.call(maybeArray) === '[object Array]';\n  };\n\n  var waterfall = function (tasks, callback, forceAsync) {\n    var nextTick = forceAsync ? executeAsync : executeSync;\n    callback = callback || function () {};\n    if (!_isArray(tasks)) {\n      var err = new Error('First argument to waterfall must be an array of functions');\n      return callback(err);\n    }\n    if (!tasks.length) {\n      return callback();\n    }\n    var wrapIterator = function (iterator) {\n      return function (err) {\n        if (err) {\n          callback.apply(null, arguments);\n          callback = function () {};\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          } else {\n            args.push(callback);\n          }\n          nextTick(function () {\n            iterator.apply(null, args);\n          });\n        }\n      };\n    };\n    wrapIterator(makeIterator(tasks))();\n  };\n\n  if (typeof define !== 'undefined' && define.amd) {\n    define([], function () {\n      return waterfall;\n    }); // RequireJS\n  } else if (typeof module !== 'undefined' && module.exports) {\n    module.exports = waterfall; // CommonJS\n  } else {\n    globals.waterfall = waterfall; // <script>\n  }\n})(this);\n\n\n\n//////////////////\n// WEBPACK FOOTER\n// ./node_modules/a-sync-waterfall/index.js\n// module id = 15\n// module chunks = 0","'use strict';\n\nvar nodes = require('./nodes');\nvar lib = require('./lib');\n\nvar sym = 0;\nfunction gensym() {\n  return 'hole_' + sym++;\n}\n\n// copy-on-write version of map\nfunction mapCOW(arr, func) {\n  var res = null;\n  for (let i = 0; i < arr.length; i++) {\n    const item = func(arr[i]);\n\n    if (item !== arr[i]) {\n      if (!res) {\n        res = arr.slice();\n      }\n\n      res[i] = item;\n    }\n  }\n\n  return res || arr;\n}\n\nfunction walk(ast, func, depthFirst) {\n  if (!(ast instanceof nodes.Node)) {\n    return ast;\n  }\n\n  if (!depthFirst) {\n    const astT = func(ast);\n\n    if (astT && astT !== ast) {\n      return astT;\n    }\n  }\n\n  if (ast instanceof nodes.NodeList) {\n    const children = mapCOW(ast.children, (node) => walk(node, func, depthFirst));\n\n    if (children !== ast.children) {\n      ast = new nodes[ast.typename](ast.lineno, ast.colno, children);\n    }\n  } else if (ast instanceof nodes.CallExtension) {\n    const args = walk(ast.args, func, depthFirst);\n    const contentArgs = mapCOW(ast.contentArgs, (node) => walk(node, func, depthFirst));\n\n    if (args !== ast.args || contentArgs !== ast.contentArgs) {\n      ast = new nodes[ast.typename](ast.extName, ast.prop, args, contentArgs);\n    }\n  } else {\n    const props = ast.fields.map((field) => ast[field]);\n    const propsT = mapCOW(props, (prop) => walk(prop, func, depthFirst));\n\n    if (propsT !== props) {\n      ast = new nodes[ast.typename](ast.lineno, ast.colno);\n      propsT.forEach((prop, i) => {\n        ast[ast.fields[i]] = prop;\n      });\n    }\n  }\n\n  return depthFirst ? (func(ast) || ast) : ast;\n}\n\nfunction depthWalk(ast, func) {\n  return walk(ast, func, true);\n}\n\nfunction _liftFilters(node, asyncFilters, prop) {\n  var children = [];\n\n  var walked = depthWalk(prop ? node[prop] : node, (descNode) => {\n    let symbol;\n    if (descNode instanceof nodes.Block) {\n      return descNode;\n    } else if ((descNode instanceof nodes.Filter &&\n      lib.indexOf(asyncFilters, descNode.name.value) !== -1) ||\n      descNode instanceof nodes.CallExtensionAsync) {\n      symbol = new nodes.Symbol(descNode.lineno,\n        descNode.colno,\n        gensym());\n\n      children.push(new nodes.FilterAsync(descNode.lineno,\n        descNode.colno,\n        descNode.name,\n        descNode.args,\n        symbol));\n    }\n    return symbol;\n  });\n\n  if (prop) {\n    node[prop] = walked;\n  } else {\n    node = walked;\n  }\n\n  if (children.length) {\n    children.push(node);\n\n    return new nodes.NodeList(\n      node.lineno,\n      node.colno,\n      children\n    );\n  } else {\n    return node;\n  }\n}\n\nfunction liftFilters(ast, asyncFilters) {\n  return depthWalk(ast, (node) => {\n    if (node instanceof nodes.Output) {\n      return _liftFilters(node, asyncFilters);\n    } else if (node instanceof nodes.Set) {\n      return _liftFilters(node, asyncFilters, 'value');\n    } else if (node instanceof nodes.For) {\n      return _liftFilters(node, asyncFilters, 'arr');\n    } else if (node instanceof nodes.If) {\n      return _liftFilters(node, asyncFilters, 'cond');\n    } else if (node instanceof nodes.CallExtension) {\n      return _liftFilters(node, asyncFilters, 'args');\n    } else {\n      return undefined;\n    }\n  });\n}\n\nfunction liftSuper(ast) {\n  return walk(ast, (blockNode) => {\n    if (!(blockNode instanceof nodes.Block)) {\n      return;\n    }\n\n    let hasSuper = false;\n    const symbol = gensym();\n\n    blockNode.body = walk(blockNode.body, (node) => { // eslint-disable-line consistent-return\n      if (node instanceof nodes.FunCall && node.name.value === 'super') {\n        hasSuper = true;\n        return new nodes.Symbol(node.lineno, node.colno, symbol);\n      }\n    });\n\n    if (hasSuper) {\n      blockNode.body.children.unshift(new nodes.Super(\n        0, 0, blockNode.name, new nodes.Symbol(0, 0, symbol)\n      ));\n    }\n  });\n}\n\nfunction convertStatements(ast) {\n  return depthWalk(ast, (node) => {\n    if (!(node instanceof nodes.If) && !(node instanceof nodes.For)) {\n      return undefined;\n    }\n\n    let async = false;\n    walk(node, (child) => {\n      if (child instanceof nodes.FilterAsync ||\n        child instanceof nodes.IfAsync ||\n        child instanceof nodes.AsyncEach ||\n        child instanceof nodes.AsyncAll ||\n        child instanceof nodes.CallExtensionAsync) {\n        async = true;\n        // Stop iterating by returning the node\n        return child;\n      }\n      return undefined;\n    });\n\n    if (async) {\n      if (node instanceof nodes.If) {\n        return new nodes.IfAsync(\n          node.lineno,\n          node.colno,\n          node.cond,\n          node.body,\n          node.else_\n        );\n      } else if (node instanceof nodes.For && !(node instanceof nodes.AsyncAll)) {\n        return new nodes.AsyncEach(\n          node.lineno,\n          node.colno,\n          node.arr,\n          node.name,\n          node.body,\n          node.else_\n        );\n      }\n    }\n    return undefined;\n  });\n}\n\nfunction cps(ast, asyncFilters) {\n  return convertStatements(liftSuper(liftFilters(ast, asyncFilters)));\n}\n\nfunction transform(ast, asyncFilters) {\n  return cps(ast, asyncFilters || []);\n}\n\n// var parser = require('./parser');\n// var src = 'hello {% foo %}{% endfoo %} end';\n// var ast = transform(parser.parse(src, [new FooExtension()]), ['bar']);\n// nodes.printNodes(ast);\n\nmodule.exports = {\n  transform: transform\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/transformer.js","'use strict';\n\nvar lib = require('./lib');\nvar r = require('./runtime');\n\nvar exports = module.exports = {};\n\nfunction normalize(value, defaultValue) {\n  if (value === null || value === undefined || value === false) {\n    return defaultValue;\n  }\n  return value;\n}\n\nexports.abs = Math.abs;\n\nfunction isNaN(num) {\n  return num !== num; // eslint-disable-line no-self-compare\n}\n\nfunction batch(arr, linecount, fillWith) {\n  var i;\n  var res = [];\n  var tmp = [];\n\n  for (i = 0; i < arr.length; i++) {\n    if (i % linecount === 0 && tmp.length) {\n      res.push(tmp);\n      tmp = [];\n    }\n\n    tmp.push(arr[i]);\n  }\n\n  if (tmp.length) {\n    if (fillWith) {\n      for (i = tmp.length; i < linecount; i++) {\n        tmp.push(fillWith);\n      }\n    }\n\n    res.push(tmp);\n  }\n\n  return res;\n}\n\nexports.batch = batch;\n\nfunction capitalize(str) {\n  str = normalize(str, '');\n  const ret = str.toLowerCase();\n  return r.copySafeness(str, ret.charAt(0).toUpperCase() + ret.slice(1));\n}\n\nexports.capitalize = capitalize;\n\nfunction center(str, width) {\n  str = normalize(str, '');\n  width = width || 80;\n\n  if (str.length >= width) {\n    return str;\n  }\n\n  const spaces = width - str.length;\n  const pre = lib.repeat(' ', (spaces / 2) - (spaces % 2));\n  const post = lib.repeat(' ', spaces / 2);\n  return r.copySafeness(str, pre + str + post);\n}\n\nexports.center = center;\n\nfunction default_(val, def, bool) {\n  if (bool) {\n    return val || def;\n  } else {\n    return (val !== undefined) ? val : def;\n  }\n}\n\n// TODO: it is confusing to export something called 'default'\nexports['default'] = default_; // eslint-disable-line dot-notation\n\nfunction dictsort(val, caseSensitive, by) {\n  if (!lib.isObject(val)) {\n    throw new lib.TemplateError('dictsort filter: val must be an object');\n  }\n\n  let array = [];\n  // deliberately include properties from the object's prototype\n  for (let k in val) { // eslint-disable-line guard-for-in, no-restricted-syntax\n    array.push([k, val[k]]);\n  }\n\n  let si;\n  if (by === undefined || by === 'key') {\n    si = 0;\n  } else if (by === 'value') {\n    si = 1;\n  } else {\n    throw new lib.TemplateError(\n      'dictsort filter: You can only sort by either key or value');\n  }\n\n  array.sort((t1, t2) => {\n    var a = t1[si];\n    var b = t2[si];\n\n    if (!caseSensitive) {\n      if (lib.isString(a)) {\n        a = a.toUpperCase();\n      }\n      if (lib.isString(b)) {\n        b = b.toUpperCase();\n      }\n    }\n\n    return a > b ? 1 : (a === b ? 0 : -1); // eslint-disable-line no-nested-ternary\n  });\n\n  return array;\n}\n\nexports.dictsort = dictsort;\n\nfunction dump(obj, spaces) {\n  return JSON.stringify(obj, null, spaces);\n}\n\nexports.dump = dump;\n\nfunction escape(str) {\n  if (str instanceof r.SafeString) {\n    return str;\n  }\n  str = (str === null || str === undefined) ? '' : str;\n  return r.markSafe(lib.escape(str.toString()));\n}\n\nexports.escape = escape;\n\nfunction safe(str) {\n  if (str instanceof r.SafeString) {\n    return str;\n  }\n  str = (str === null || str === undefined) ? '' : str;\n  return r.markSafe(str.toString());\n}\n\nexports.safe = safe;\n\nfunction first(arr) {\n  return arr[0];\n}\n\nexports.first = first;\n\nfunction forceescape(str) {\n  str = (str === null || str === undefined) ? '' : str;\n  return r.markSafe(lib.escape(str.toString()));\n}\n\nexports.forceescape = forceescape;\n\nfunction groupby(arr, attr) {\n  return lib.groupBy(arr, attr);\n}\n\nexports.groupby = groupby;\n\nfunction indent(str, width, indentfirst) {\n  str = normalize(str, '');\n\n  if (str === '') {\n    return '';\n  }\n\n  width = width || 4;\n  // let res = '';\n  const lines = str.split('\\n');\n  const sp = lib.repeat(' ', width);\n\n  const res = lines.map((l, i) => {\n    return (i === 0 && !indentfirst) ? `${l}\\n` : `${sp}${l}\\n`;\n  }).join('');\n\n  return r.copySafeness(str, res);\n}\n\nexports.indent = indent;\n\nfunction join(arr, del, attr) {\n  del = del || '';\n\n  if (attr) {\n    arr = lib.map(arr, (v) => v[attr]);\n  }\n\n  return arr.join(del);\n}\n\nexports.join = join;\n\nfunction last(arr) {\n  return arr[arr.length - 1];\n}\n\nexports.last = last;\n\nfunction lengthFilter(val) {\n  var value = normalize(val, '');\n\n  if (value !== undefined) {\n    if (\n      (typeof Map === 'function' && value instanceof Map) ||\n      (typeof Set === 'function' && value instanceof Set)\n    ) {\n      // ECMAScript 2015 Maps and Sets\n      return value.size;\n    }\n    if (lib.isObject(value) && !(value instanceof r.SafeString)) {\n      // Objects (besides SafeStrings), non-primative Arrays\n      return lib.keys(value).length;\n    }\n    return value.length;\n  }\n  return 0;\n}\n\nexports.length = lengthFilter;\n\nfunction list(val) {\n  if (lib.isString(val)) {\n    return val.split('');\n  } else if (lib.isObject(val)) {\n    return lib._entries(val || {}).map(([key, value]) => ({key, value}));\n  } else if (lib.isArray(val)) {\n    return val;\n  } else {\n    throw new lib.TemplateError('list filter: type not iterable');\n  }\n}\n\nexports.list = list;\n\nfunction lower(str) {\n  str = normalize(str, '');\n  return str.toLowerCase();\n}\n\nexports.lower = lower;\n\nfunction nl2br(str) {\n  if (str === null || str === undefined) {\n    return '';\n  }\n  return r.copySafeness(str, str.replace(/\\r\\n|\\n/g, '<br />\\n'));\n}\n\nexports.nl2br = nl2br;\n\nfunction random(arr) {\n  return arr[Math.floor(Math.random() * arr.length)];\n}\n\nexports.random = random;\n\nfunction rejectattr(arr, attr) {\n  return arr.filter((item) => !item[attr]);\n}\n\nexports.rejectattr = rejectattr;\n\nfunction selectattr(arr, attr) {\n  return arr.filter((item) => !!item[attr]);\n}\n\nexports.selectattr = selectattr;\n\nfunction replace(str, old, new_, maxCount) {\n  var originalStr = str;\n\n  if (old instanceof RegExp) {\n    return str.replace(old, new_);\n  }\n\n  if (typeof maxCount === 'undefined') {\n    maxCount = -1;\n  }\n\n  let res = ''; // Output\n\n  // Cast Numbers in the search term to string\n  if (typeof old === 'number') {\n    old = '' + old;\n  } else if (typeof old !== 'string') {\n    // If it is something other than number or string,\n    // return the original string\n    return str;\n  }\n\n  // Cast numbers in the replacement to string\n  if (typeof str === 'number') {\n    str = '' + str;\n  }\n\n  // If by now, we don't have a string, throw it back\n  if (typeof str !== 'string' && !(str instanceof r.SafeString)) {\n    return str;\n  }\n\n  // ShortCircuits\n  if (old === '') {\n    // Mimic the python behaviour: empty string is replaced\n    // by replacement e.g. \"abc\"|replace(\"\", \".\") -> .a.b.c.\n    res = new_ + str.split('').join(new_) + new_;\n    return r.copySafeness(str, res);\n  }\n\n  let nextIndex = str.indexOf(old);\n  // if # of replacements to perform is 0, or the string to does\n  // not contain the old value, return the string\n  if (maxCount === 0 || nextIndex === -1) {\n    return str;\n  }\n\n  let pos = 0;\n  let count = 0; // # of replacements made\n\n  while (nextIndex > -1 && (maxCount === -1 || count < maxCount)) {\n    // Grab the next chunk of src string and add it with the\n    // replacement, to the result\n    res += str.substring(pos, nextIndex) + new_;\n    // Increment our pointer in the src string\n    pos = nextIndex + old.length;\n    count++;\n    // See if there are any more replacements to be made\n    nextIndex = str.indexOf(old, pos);\n  }\n\n  // We've either reached the end, or done the max # of\n  // replacements, tack on any remaining string\n  if (pos < str.length) {\n    res += str.substring(pos);\n  }\n\n  return r.copySafeness(originalStr, res);\n}\n\nexports.replace = replace;\n\nfunction reverse(val) {\n  var arr;\n  if (lib.isString(val)) {\n    arr = list(val);\n  } else {\n    // Copy it\n    arr = lib.map(val, v => v);\n  }\n\n  arr.reverse();\n\n  if (lib.isString(val)) {\n    return r.copySafeness(val, arr.join(''));\n  }\n  return arr;\n}\n\nexports.reverse = reverse;\n\nfunction round(val, precision, method) {\n  precision = precision || 0;\n  const factor = Math.pow(10, precision);\n  let rounder;\n\n  if (method === 'ceil') {\n    rounder = Math.ceil;\n  } else if (method === 'floor') {\n    rounder = Math.floor;\n  } else {\n    rounder = Math.round;\n  }\n\n  return rounder(val * factor) / factor;\n}\n\nexports.round = round;\n\nfunction slice(arr, slices, fillWith) {\n  const sliceLength = Math.floor(arr.length / slices);\n  const extra = arr.length % slices;\n  const res = [];\n  let offset = 0;\n\n  for (let i = 0; i < slices; i++) {\n    const start = offset + (i * sliceLength);\n    if (i < extra) {\n      offset++;\n    }\n    const end = offset + ((i + 1) * sliceLength);\n\n    const currSlice = arr.slice(start, end);\n    if (fillWith && i >= extra) {\n      currSlice.push(fillWith);\n    }\n    res.push(currSlice);\n  }\n\n  return res;\n}\n\nexports.slice = slice;\n\nfunction sum(arr, attr, start = 0) {\n  if (attr) {\n    arr = lib.map(arr, (v) => v[attr]);\n  }\n\n  return start + arr.reduce((a, b) => a + b, 0);\n}\n\nexports.sum = sum;\n\nexports.sort = r.makeMacro(\n  ['value', 'reverse', 'case_sensitive', 'attribute'], [],\n  (arr, reversed, caseSens, attr) => {\n    // Copy it\n    let array = lib.map(arr, v => v);\n\n    array.sort((a, b) => {\n      let x = (attr) ? a[attr] : a;\n      let y = (attr) ? b[attr] : b;\n\n      if (!caseSens && lib.isString(x) && lib.isString(y)) {\n        x = x.toLowerCase();\n        y = y.toLowerCase();\n      }\n\n      if (x < y) {\n        return reversed ? 1 : -1;\n      } else if (x > y) {\n        return reversed ? -1 : 1;\n      } else {\n        return 0;\n      }\n    });\n\n    return array;\n  });\n\nfunction string(obj) {\n  return r.copySafeness(obj, obj);\n}\n\nexports.string = string;\n\nfunction striptags(input, preserveLinebreaks) {\n  input = normalize(input, '');\n  let tags = /<\\/?([a-z][a-z0-9]*)\\b[^>]*>|<!--[\\s\\S]*?-->/gi;\n  let trimmedInput = trim(input.replace(tags, ''));\n  let res = '';\n  if (preserveLinebreaks) {\n    res = trimmedInput\n      .replace(/^ +| +$/gm, '') // remove leading and trailing spaces\n      .replace(/ +/g, ' ') // squash adjacent spaces\n      .replace(/(\\r\\n)/g, '\\n') // normalize linebreaks (CRLF -> LF)\n      .replace(/\\n\\n\\n+/g, '\\n\\n'); // squash abnormal adjacent linebreaks\n  } else {\n    res = trimmedInput.replace(/\\s+/gi, ' ');\n  }\n  return r.copySafeness(input, res);\n}\n\nexports.striptags = striptags;\n\nfunction title(str) {\n  str = normalize(str, '');\n  let words = str.split(' ').map(word => capitalize(word));\n  return r.copySafeness(str, words.join(' '));\n}\n\nexports.title = title;\n\nfunction trim(str) {\n  return r.copySafeness(str, str.replace(/^\\s*|\\s*$/g, ''));\n}\n\nexports.trim = trim;\n\nfunction truncate(input, length, killwords, end) {\n  var orig = input;\n  input = normalize(input, '');\n  length = length || 255;\n\n  if (input.length <= length) {\n    return input;\n  }\n\n  if (killwords) {\n    input = input.substring(0, length);\n  } else {\n    let idx = input.lastIndexOf(' ', length);\n    if (idx === -1) {\n      idx = length;\n    }\n\n    input = input.substring(0, idx);\n  }\n\n  input += (end !== undefined && end !== null) ? end : '...';\n  return r.copySafeness(orig, input);\n}\n\nexports.truncate = truncate;\n\nfunction upper(str) {\n  str = normalize(str, '');\n  return str.toUpperCase();\n}\n\nexports.upper = upper;\n\nfunction urlencode(obj) {\n  var enc = encodeURIComponent;\n  if (lib.isString(obj)) {\n    return enc(obj);\n  } else {\n    let keyvals = (lib.isArray(obj)) ? obj : lib._entries(obj);\n    return keyvals.map(([k, v]) => `${enc(k)}=${enc(v)}`).join('&');\n  }\n}\n\nexports.urlencode = urlencode;\n\n// For the jinja regexp, see\n// https://github.com/mitsuhiko/jinja2/blob/f15b814dcba6aa12bc74d1f7d0c881d55f7126be/jinja2/utils.py#L20-L23\nconst puncRe = /^(?:\\(|<|&lt;)?(.*?)(?:\\.|,|\\)|\\n|&gt;)?$/;\n// from http://blog.gerv.net/2011/05/html5_email_address_regexp/\nconst emailRe = /^[\\w.!#$%&'*+\\-\\/=?\\^`{|}~]+@[a-z\\d\\-]+(\\.[a-z\\d\\-]+)+$/i;\nconst httpHttpsRe = /^https?:\\/\\/.*$/;\nconst wwwRe = /^www\\./;\nconst tldRe = /\\.(?:org|net|com)(?:\\:|\\/|$)/;\n\nfunction urlize(str, length, nofollow) {\n  if (isNaN(length)) {\n    length = Infinity;\n  }\n\n  const noFollowAttr = (nofollow === true ? ' rel=\"nofollow\"' : '');\n\n  const words = str.split(/(\\s+)/).filter((word) => {\n    // If the word has no length, bail. This can happen for str with\n    // trailing whitespace.\n    return word && word.length;\n  }).map((word) => {\n    var matches = word.match(puncRe);\n    var possibleUrl = (matches) ? matches[1] : word;\n    var shortUrl = possibleUrl.substr(0, length);\n\n    // url that starts with http or https\n    if (httpHttpsRe.test(possibleUrl)) {\n      return `<a href=\"${possibleUrl}\"${noFollowAttr}>${shortUrl}</a>`;\n    }\n\n    // url that starts with www.\n    if (wwwRe.test(possibleUrl)) {\n      return `<a href=\"http://${possibleUrl}\"${noFollowAttr}>${shortUrl}</a>`;\n    }\n\n    // an email address of the form username@domain.tld\n    if (emailRe.test(possibleUrl)) {\n      return `<a href=\"mailto:${possibleUrl}\">${possibleUrl}</a>`;\n    }\n\n    // url that ends in .com, .org or .net that is not an email address\n    if (tldRe.test(possibleUrl)) {\n      return `<a href=\"http://${possibleUrl}\"${noFollowAttr}>${shortUrl}</a>`;\n    }\n\n    return word;\n  });\n\n  return words.join('');\n}\n\nexports.urlize = urlize;\n\nfunction wordcount(str) {\n  str = normalize(str, '');\n  const words = (str) ? str.match(/\\w+/g) : null;\n  return (words) ? words.length : null;\n}\n\nexports.wordcount = wordcount;\n\nfunction float(val, def) {\n  var res = parseFloat(val);\n  return (isNaN(res)) ? def : res;\n}\n\nexports.float = float;\n\nfunction int(val, def) {\n  var res = parseInt(val, 10);\n  return (isNaN(res)) ? def : res;\n}\n\nexports.int = int;\n\n// Aliases\nexports.d = exports.default;\nexports.e = exports.escape;\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/filters.js","'use strict';\n\nconst Loader = require('./loader');\n\nclass PrecompiledLoader extends Loader {\n  constructor(compiledTemplates) {\n    super();\n    this.precompiled = compiledTemplates || {};\n  }\n\n  getSource(name) {\n    if (this.precompiled[name]) {\n      return {\n        src: {\n          type: 'code',\n          obj: this.precompiled[name]\n        },\n        path: name\n      };\n    }\n    return null;\n  }\n}\n\nmodule.exports = {\n  PrecompiledLoader: PrecompiledLoader,\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/precompiled-loader.js","'use strict';\n\nvar SafeString = require('./runtime').SafeString;\n\n/**\n * Returns `true` if the object is a function, otherwise `false`.\n * @param { any } value\n * @returns { boolean }\n */\nfunction callable(value) {\n  return typeof value === 'function';\n}\n\nexports.callable = callable;\n\n/**\n * Returns `true` if the object is strictly not `undefined`.\n * @param { any } value\n * @returns { boolean }\n */\nfunction defined(value) {\n  return value !== undefined;\n}\n\nexports.defined = defined;\n\n/**\n * Returns `true` if the operand (one) is divisble by the test's argument\n * (two).\n * @param { number } one\n * @param { number } two\n * @returns { boolean }\n */\nfunction divisibleby(one, two) {\n  return (one % two) === 0;\n}\n\nexports.divisibleby = divisibleby;\n\n/**\n * Returns true if the string has been escaped (i.e., is a SafeString).\n * @param { any } value\n * @returns { boolean }\n */\nfunction escaped(value) {\n  return value instanceof SafeString;\n}\n\nexports.escaped = escaped;\n\n/**\n * Returns `true` if the arguments are strictly equal.\n * @param { any } one\n * @param { any } two\n */\nfunction equalto(one, two) {\n  return one === two;\n}\n\nexports.equalto = equalto;\n\n// Aliases\nexports.eq = exports.equalto;\nexports.sameas = exports.equalto;\n\n/**\n * Returns `true` if the value is evenly divisible by 2.\n * @param { number } value\n * @returns { boolean }\n */\nfunction even(value) {\n  return value % 2 === 0;\n}\n\nexports.even = even;\n\n/**\n * Returns `true` if the value is falsy - if I recall correctly, '', 0, false,\n * undefined, NaN or null. I don't know if we should stick to the default JS\n * behavior or attempt to replicate what Python believes should be falsy (i.e.,\n * empty arrays, empty dicts, not 0...).\n * @param { any } value\n * @returns { boolean }\n */\nfunction falsy(value) {\n  return !value;\n}\n\nexports.falsy = falsy;\n\n/**\n * Returns `true` if the operand (one) is greater or equal to the test's\n * argument (two).\n * @param { number } one\n * @param { number } two\n * @returns { boolean }\n */\nfunction ge(one, two) {\n  return one >= two;\n}\n\nexports.ge = ge;\n\n/**\n * Returns `true` if the operand (one) is greater than the test's argument\n * (two).\n * @param { number } one\n * @param { number } two\n * @returns { boolean }\n */\nfunction greaterthan(one, two) {\n  return one > two;\n}\n\nexports.greaterthan = greaterthan;\n\n// alias\nexports.gt = exports.greaterthan;\n\n/**\n * Returns `true` if the operand (one) is less than or equal to the test's\n * argument (two).\n * @param { number } one\n * @param { number } two\n * @returns { boolean }\n */\nfunction le(one, two) {\n  return one <= two;\n}\n\nexports.le = le;\n\n/**\n * Returns `true` if the operand (one) is less than the test's passed argument\n * (two).\n * @param { number } one\n * @param { number } two\n * @returns { boolean }\n */\nfunction lessthan(one, two) {\n  return one < two;\n}\n\nexports.lessthan = lessthan;\n\n// alias\nexports.lt = exports.lessthan;\n\n/**\n * Returns `true` if the string is lowercased.\n * @param { string } value\n * @returns { boolean }\n */\nfunction lower(value) {\n  return value.toLowerCase() === value;\n}\n\nexports.lower = lower;\n\n/**\n * Returns `true` if the operand (one) is less than or equal to the test's\n * argument (two).\n * @param { number } one\n * @param { number } two\n * @returns { boolean }\n */\nfunction ne(one, two) {\n  return one !== two;\n}\n\nexports.ne = ne;\n\n/**\n * Returns true if the value is strictly equal to `null`.\n * @param { any }\n * @returns { boolean }\n */\nfunction nullTest(value) {\n  return value === null;\n}\n\nexports.null = nullTest;\n\n/**\n * Returns true if value is a number.\n * @param { any }\n * @returns { boolean }\n */\nfunction number(value) {\n  return typeof value === 'number';\n}\n\nexports.number = number;\n\n/**\n * Returns `true` if the value is *not* evenly divisible by 2.\n * @param { number } value\n * @returns { boolean }\n */\nfunction odd(value) {\n  return value % 2 === 1;\n}\n\nexports.odd = odd;\n\n/**\n * Returns `true` if the value is a string, `false` if not.\n * @param { any } value\n * @returns { boolean }\n */\nfunction string(value) {\n  return typeof value === 'string';\n}\n\nexports.string = string;\n\n/**\n * Returns `true` if the value is not in the list of things considered falsy:\n * '', null, undefined, 0, NaN and false.\n * @param { any } value\n * @returns { boolean }\n */\nfunction truthy(value) {\n  return !!value;\n}\n\nexports.truthy = truthy;\n\n/**\n * Returns `true` if the value is undefined.\n * @param { any } value\n * @returns { boolean }\n */\nfunction undefinedTest(value) {\n  return value === undefined;\n}\n\nexports.undefined = undefinedTest;\n\n/**\n * Returns `true` if the string is uppercased.\n * @param { string } value\n * @returns { boolean }\n */\nfunction upper(value) {\n  return value.toUpperCase() === value;\n}\n\nexports.upper = upper;\n\n/**\n * If ES6 features are available, returns `true` if the value implements the\n * `Symbol.iterator` method. If not, it's a string or Array.\n *\n * Could potentially cause issues if a browser exists that has Set and Map but\n * not Symbol.\n *\n * @param { any } value\n * @returns { boolean }\n */\nfunction iterable(value) {\n  if (typeof Symbol !== 'undefined') {\n    return !!value[Symbol.iterator];\n  } else {\n    return Array.isArray(value) || typeof value === 'string';\n  }\n}\n\nexports.iterable = iterable;\n\n/**\n * If ES6 features are available, returns `true` if the value is an object hash\n * or an ES6 Map. Otherwise just return if it's an object hash.\n * @param { any } value\n * @returns { boolean }\n */\nfunction mapping(value) {\n  // only maps and object hashes\n  var bool = value !== null\n    && value !== undefined\n    && typeof value === 'object'\n    && !Array.isArray(value);\n  if (Set) {\n    return bool && !(value instanceof Set);\n  } else {\n    return bool;\n  }\n}\n\nexports.mapping = mapping;\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/tests.js","'use strict';\n\nfunction cycler(items) {\n  var index = -1;\n\n  return {\n    current: null,\n    reset() {\n      index = -1;\n      this.current = null;\n    },\n\n    next() {\n      index++;\n      if (index >= items.length) {\n        index = 0;\n      }\n\n      this.current = items[index];\n      return this.current;\n    },\n  };\n}\n\nfunction joiner(sep) {\n  sep = sep || ',';\n  let first = true;\n\n  return () => {\n    const val = first ? '' : sep;\n    first = false;\n    return val;\n  };\n}\n\n// Making this a function instead so it returns a new object\n// each time it's called. That way, if something like an environment\n// uses it, they will each have their own copy.\nfunction globals() {\n  return {\n    range(start, stop, step) {\n      if (typeof stop === 'undefined') {\n        stop = start;\n        start = 0;\n        step = 1;\n      } else if (!step) {\n        step = 1;\n      }\n\n      const arr = [];\n      if (step > 0) {\n        for (let i = start; i < stop; i += step) {\n          arr.push(i);\n        }\n      } else {\n        for (let i = start; i > stop; i += step) { // eslint-disable-line for-direction\n          arr.push(i);\n        }\n      }\n      return arr;\n    },\n\n    cycler() {\n      return cycler(Array.prototype.slice.call(arguments));\n    },\n\n    joiner(sep) {\n      return joiner(sep);\n    }\n  };\n}\n\nmodule.exports = globals;\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/globals.js","const path = require('path');\n\nmodule.exports = function express(env, app) {\n  function NunjucksView(name, opts) {\n    this.name = name;\n    this.path = name;\n    this.defaultEngine = opts.defaultEngine;\n    this.ext = path.extname(name);\n    if (!this.ext && !this.defaultEngine) {\n      throw new Error('No default engine was specified and no extension was provided.');\n    }\n    if (!this.ext) {\n      this.name += (this.ext = (this.defaultEngine[0] !== '.' ? '.' : '') + this.defaultEngine);\n    }\n  }\n\n  NunjucksView.prototype.render = function render(opts, cb) {\n    env.render(this.name, opts, cb);\n  };\n\n  app.set('view', NunjucksView);\n  app.set('nunjucksEnv', env);\n  return env;\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/express-app.js","'use strict';\n\nconst fs = require('fs');\nconst path = require('path');\nconst {_prettifyError} = require('./lib');\nconst compiler = require('./compiler');\nconst {Environment} = require('./environment');\nconst precompileGlobal = require('./precompile-global');\n\nfunction match(filename, patterns) {\n  if (!Array.isArray(patterns)) {\n    return false;\n  }\n  return patterns.some((pattern) => filename.match(pattern));\n}\n\nfunction precompileString(str, opts) {\n  opts = opts || {};\n  opts.isString = true;\n  const env = opts.env || new Environment([]);\n  const wrapper = opts.wrapper || precompileGlobal;\n\n  if (!opts.name) {\n    throw new Error('the \"name\" option is required when compiling a string');\n  }\n  return wrapper([_precompile(str, opts.name, env)], opts);\n}\n\nfunction precompile(input, opts) {\n  // The following options are available:\n  //\n  // * name: name of the template (auto-generated when compiling a directory)\n  // * isString: input is a string, not a file path\n  // * asFunction: generate a callable function\n  // * force: keep compiling on error\n  // * env: the Environment to use (gets extensions and async filters from it)\n  // * include: which file/folders to include (folders are auto-included, files are auto-excluded)\n  // * exclude: which file/folders to exclude (folders are auto-included, files are auto-excluded)\n  // * wrapper: function(templates, opts) {...}\n  //       Customize the output format to store the compiled template.\n  //       By default, templates are stored in a global variable used by the runtime.\n  //       A custom loader will be necessary to load your custom wrapper.\n\n  opts = opts || {};\n  const env = opts.env || new Environment([]);\n  const wrapper = opts.wrapper || precompileGlobal;\n\n  if (opts.isString) {\n    return precompileString(input, opts);\n  }\n\n  const pathStats = fs.existsSync(input) && fs.statSync(input);\n  const precompiled = [];\n  const templates = [];\n\n  function addTemplates(dir) {\n    fs.readdirSync(dir).forEach((file) => {\n      const filepath = path.join(dir, file);\n      let subpath = filepath.substr(path.join(input, '/').length);\n      const stat = fs.statSync(filepath);\n\n      if (stat && stat.isDirectory()) {\n        subpath += '/';\n        if (!match(subpath, opts.exclude)) {\n          addTemplates(filepath);\n        }\n      } else if (match(subpath, opts.include)) {\n        templates.push(filepath);\n      }\n    });\n  }\n\n  if (pathStats.isFile()) {\n    precompiled.push(_precompile(\n      fs.readFileSync(input, 'utf-8'),\n      opts.name || input,\n      env\n    ));\n  } else if (pathStats.isDirectory()) {\n    addTemplates(input);\n\n    for (let i = 0; i < templates.length; i++) {\n      const name = templates[i].replace(path.join(input, '/'), '');\n\n      try {\n        precompiled.push(_precompile(\n          fs.readFileSync(templates[i], 'utf-8'),\n          name,\n          env\n        ));\n      } catch (e) {\n        if (opts.force) {\n          // Don't stop generating the output if we're\n          // forcing compilation.\n          console.error(e); // eslint-disable-line no-console\n        } else {\n          throw e;\n        }\n      }\n    }\n  }\n\n  return wrapper(precompiled, opts);\n}\n\nfunction _precompile(str, name, env) {\n  env = env || new Environment([]);\n\n  const asyncFilters = env.asyncFilters;\n  const extensions = env.extensionsList;\n  let template;\n\n  name = name.replace(/\\\\/g, '/');\n\n  try {\n    template = compiler.compile(str,\n      asyncFilters,\n      extensions,\n      name,\n      env.opts);\n  } catch (err) {\n    throw _prettifyError(name, false, err);\n  }\n\n  return {\n    name: name,\n    template: template\n  };\n}\n\nmodule.exports = {\n  precompile: precompile,\n  precompileString: precompileString\n};\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/precompile.js","'use strict';\n\nfunction precompileGlobal(templates, opts) {\n  var out = '';\n  opts = opts || {};\n\n  for (let i = 0; i < templates.length; i++) {\n    const name = JSON.stringify(templates[i].name);\n    const template = templates[i].template;\n\n    out += '(function() {' +\n      '(window.nunjucksPrecompiled = window.nunjucksPrecompiled || {})' +\n      '[' + name + '] = (function() {\\n' + template + '\\n})();\\n';\n\n    if (opts.asFunction) {\n      out += 'return function(ctx, cb) { return nunjucks.render(' + name + ', ctx, cb); }\\n';\n    }\n\n    out += '})();\\n';\n  }\n  return out;\n}\n\nmodule.exports = precompileGlobal;\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/precompile-global.js","function installCompat() {\n  'use strict';\n\n  /* eslint-disable camelcase */\n\n  // This must be called like `nunjucks.installCompat` so that `this`\n  // references the nunjucks instance\n  var runtime = this.runtime;\n  var lib = this.lib;\n  // Handle slim case where these 'modules' are excluded from the built source\n  var Compiler = this.compiler.Compiler;\n  var Parser = this.parser.Parser;\n  var nodes = this.nodes;\n  var lexer = this.lexer;\n\n  var orig_contextOrFrameLookup = runtime.contextOrFrameLookup;\n  var orig_memberLookup = runtime.memberLookup;\n  var orig_Compiler_assertType;\n  var orig_Parser_parseAggregate;\n  if (Compiler) {\n    orig_Compiler_assertType = Compiler.prototype.assertType;\n  }\n  if (Parser) {\n    orig_Parser_parseAggregate = Parser.prototype.parseAggregate;\n  }\n\n  function uninstall() {\n    runtime.contextOrFrameLookup = orig_contextOrFrameLookup;\n    runtime.memberLookup = orig_memberLookup;\n    if (Compiler) {\n      Compiler.prototype.assertType = orig_Compiler_assertType;\n    }\n    if (Parser) {\n      Parser.prototype.parseAggregate = orig_Parser_parseAggregate;\n    }\n  }\n\n  runtime.contextOrFrameLookup = function contextOrFrameLookup(context, frame, key) {\n    var val = orig_contextOrFrameLookup.apply(this, arguments);\n    if (val !== undefined) {\n      return val;\n    }\n    switch (key) {\n      case 'True':\n        return true;\n      case 'False':\n        return false;\n      case 'None':\n        return null;\n      default:\n        return undefined;\n    }\n  };\n\n  function getTokensState(tokens) {\n    return {\n      index: tokens.index,\n      lineno: tokens.lineno,\n      colno: tokens.colno\n    };\n  }\n\n  if (process.env.BUILD_TYPE !== 'SLIM' && nodes && Compiler && Parser) { // i.e., not slim mode\n    const Slice = nodes.Node.extend('Slice', {\n      fields: ['start', 'stop', 'step'],\n      init(lineno, colno, start, stop, step) {\n        start = start || new nodes.Literal(lineno, colno, null);\n        stop = stop || new nodes.Literal(lineno, colno, null);\n        step = step || new nodes.Literal(lineno, colno, 1);\n        this.parent(lineno, colno, start, stop, step);\n      }\n    });\n\n    Compiler.prototype.assertType = function assertType(node) {\n      if (node instanceof Slice) {\n        return;\n      }\n      orig_Compiler_assertType.apply(this, arguments);\n    };\n    Compiler.prototype.compileSlice = function compileSlice(node, frame) {\n      this._emit('(');\n      this._compileExpression(node.start, frame);\n      this._emit('),(');\n      this._compileExpression(node.stop, frame);\n      this._emit('),(');\n      this._compileExpression(node.step, frame);\n      this._emit(')');\n    };\n\n    Parser.prototype.parseAggregate = function parseAggregate() {\n      var origState = getTokensState(this.tokens);\n      // Set back one accounting for opening bracket/parens\n      origState.colno--;\n      origState.index--;\n      try {\n        return orig_Parser_parseAggregate.apply(this);\n      } catch (e) {\n        const errState = getTokensState(this.tokens);\n        const rethrow = () => {\n          lib._assign(this.tokens, errState);\n          return e;\n        };\n\n        // Reset to state before original parseAggregate called\n        lib._assign(this.tokens, origState);\n        this.peeked = false;\n\n        const tok = this.peekToken();\n        if (tok.type !== lexer.TOKEN_LEFT_BRACKET) {\n          throw rethrow();\n        } else {\n          this.nextToken();\n        }\n\n        const node = new Slice(tok.lineno, tok.colno);\n\n        // If we don't encounter a colon while parsing, this is not a slice,\n        // so re-raise the original exception.\n        let isSlice = false;\n\n        for (let i = 0; i <= node.fields.length; i++) {\n          if (this.skip(lexer.TOKEN_RIGHT_BRACKET)) {\n            break;\n          }\n          if (i === node.fields.length) {\n            if (isSlice) {\n              this.fail('parseSlice: too many slice components', tok.lineno, tok.colno);\n            } else {\n              break;\n            }\n          }\n          if (this.skip(lexer.TOKEN_COLON)) {\n            isSlice = true;\n          } else {\n            const field = node.fields[i];\n            node[field] = this.parseExpression();\n            isSlice = this.skip(lexer.TOKEN_COLON) || isSlice;\n          }\n        }\n        if (!isSlice) {\n          throw rethrow();\n        }\n        return new nodes.Array(tok.lineno, tok.colno, [node]);\n      }\n    };\n  }\n\n  function sliceLookup(obj, start, stop, step) {\n    obj = obj || [];\n    if (start === null) {\n      start = (step < 0) ? (obj.length - 1) : 0;\n    }\n    if (stop === null) {\n      stop = (step < 0) ? -1 : obj.length;\n    } else if (stop < 0) {\n      stop += obj.length;\n    }\n\n    if (start < 0) {\n      start += obj.length;\n    }\n\n    const results = [];\n\n    for (let i = start; ; i += step) {\n      if (i < 0 || i > obj.length) {\n        break;\n      }\n      if (step > 0 && i >= stop) {\n        break;\n      }\n      if (step < 0 && i <= stop) {\n        break;\n      }\n      results.push(runtime.memberLookup(obj, i));\n    }\n    return results;\n  }\n\n  function hasOwnProp(obj, key) {\n    return Object.prototype.hasOwnProperty.call(obj, key);\n  }\n\n  const ARRAY_MEMBERS = {\n    pop(index) {\n      if (index === undefined) {\n        return this.pop();\n      }\n      if (index >= this.length || index < 0) {\n        throw new Error('KeyError');\n      }\n      return this.splice(index, 1);\n    },\n    append(element) {\n      return this.push(element);\n    },\n    remove(element) {\n      for (let i = 0; i < this.length; i++) {\n        if (this[i] === element) {\n          return this.splice(i, 1);\n        }\n      }\n      throw new Error('ValueError');\n    },\n    count(element) {\n      var count = 0;\n      for (let i = 0; i < this.length; i++) {\n        if (this[i] === element) {\n          count++;\n        }\n      }\n      return count;\n    },\n    index(element) {\n      var i;\n      if ((i = this.indexOf(element)) === -1) {\n        throw new Error('ValueError');\n      }\n      return i;\n    },\n    find(element) {\n      return this.indexOf(element);\n    },\n    insert(index, elem) {\n      return this.splice(index, 0, elem);\n    }\n  };\n  const OBJECT_MEMBERS = {\n    items() {\n      return lib._entries(this);\n    },\n    values() {\n      return lib._values(this);\n    },\n    keys() {\n      return lib.keys(this);\n    },\n    get(key, def) {\n      var output = this[key];\n      if (output === undefined) {\n        output = def;\n      }\n      return output;\n    },\n    has_key(key) {\n      return hasOwnProp(this, key);\n    },\n    pop(key, def) {\n      var output = this[key];\n      if (output === undefined && def !== undefined) {\n        output = def;\n      } else if (output === undefined) {\n        throw new Error('KeyError');\n      } else {\n        delete this[key];\n      }\n      return output;\n    },\n    popitem() {\n      const keys = lib.keys(this);\n      if (!keys.length) {\n        throw new Error('KeyError');\n      }\n      const k = keys[0];\n      const val = this[k];\n      delete this[k];\n      return [k, val];\n    },\n    setdefault(key, def = null) {\n      if (!(key in this)) {\n        this[key] = def;\n      }\n      return this[key];\n    },\n    update(kwargs) {\n      lib._assign(this, kwargs);\n      return null; // Always returns None\n    }\n  };\n  OBJECT_MEMBERS.iteritems = OBJECT_MEMBERS.items;\n  OBJECT_MEMBERS.itervalues = OBJECT_MEMBERS.values;\n  OBJECT_MEMBERS.iterkeys = OBJECT_MEMBERS.keys;\n\n  runtime.memberLookup = function memberLookup(obj, val, autoescape) {\n    if (arguments.length === 4) {\n      return sliceLookup.apply(this, arguments);\n    }\n    obj = obj || {};\n\n    // If the object is an object, return any of the methods that Python would\n    // otherwise provide.\n    if (lib.isArray(obj) && hasOwnProp(ARRAY_MEMBERS, val)) {\n      return ARRAY_MEMBERS[val].bind(obj);\n    }\n    if (lib.isObject(obj) && hasOwnProp(OBJECT_MEMBERS, val)) {\n      return OBJECT_MEMBERS[val].bind(obj);\n    }\n\n    return orig_memberLookup.apply(this, arguments);\n  };\n\n  return uninstall;\n}\n\nmodule.exports = installCompat;\n\n\n\n// WEBPACK FOOTER //\n// ./nunjucks/src/jinja-compat.js"],"sourceRoot":""}