{"version":3,"file":"bundle.js","sources":["/source-files/jsondiffpatch/node_modules/fiberglass/node_modules/browserify/node_modules/browser-pack/_prelude.js","/source-files/jsondiffpatch/src/main.js","/source-files/jsondiffpatch/src/environment.js","/source-files/jsondiffpatch/src/diffpatcher.js","/source-files/jsondiffpatch/src/date-reviver.js","/source-files/jsondiffpatch/src/processor.js","/source-files/jsondiffpatch/src/pipe.js","/source-files/jsondiffpatch/src/contexts/diff.js","/source-files/jsondiffpatch/src/contexts/patch.js","/source-files/jsondiffpatch/src/contexts/reverse.js","/source-files/jsondiffpatch/src/filters/trivial.js","/source-files/jsondiffpatch/src/filters/nested.js","/source-files/jsondiffpatch/src/filters/arrays.js","/source-files/jsondiffpatch/src/filters/dates.js","/source-files/jsondiffpatch/src/filters/texts.js","/source-files/jsondiffpatch/src/contexts/context.js","/source-files/jsondiffpatch/src/filters/lcs.js"],"names":["exports","isBrowser","window","Processor","require","Pipe","DiffContext","PatchContext","ReverseContext","trivial","nested","arrays","dates","texts","DiffPatcher","options","this","processor","pipe","append","collectChildrenDiffFilter","diffFilter","objectsDiffFilter","shouldHaveResult","collectChildrenPatchFilter","patchFilter","collectChildrenReverseFilter","reverseFilter","prototype","apply","arguments","diff","left","right","process","patch","delta","reverse","unpatch","module","key","value","parts","exec","Date","UTC","selfOptions","pipes","name","input","context","lastPipe","lastContext","nextPipe","nextAfterChildren","next","hasResult","result","undefined","filters","Error","debug","length","index","filter","log","filterName","exiting","resultCheck","msg","console","push","prepend","unshift","indexOf","list","names","after","params","Array","slice","call","splice","before","clear","should","error","noResult","Context","isArray","a","setResult","exit","leftType","rightType","leftIsArray","rightIsArray","children","child","childName","_t","hasOwnProperty","arraysHaveMatchByRef","array1","array2","len1","len2","index1","val1","index2","val2","matchItems","value1","value2","objectHash","matchByPosition","hash1","hash2","hashCache1","hashCache2","lcs","ARRAY_MOVE","arrayIndexOf","array","item","i","matchContext","commonHead","commonTail","trimmed1","trimmed2","seq","get","removedItems","indices1","detectMove","includeValueOnMove","removedItemsLength","indexOnArray2","indices2","isMove","removeItemIndex1","compare","numerically","b","numericallyBy","toRemove","toInsert","toModify","parseInt","sort","indexDiff","removedValue","toInsertLength","insertion","toModifyLength","modification","newName","substr","reverseArrayDeltaIndex","itemDelta","reverseIndex","deltaIndex","deltaItem","moveFromIndex","moveToIndex","deleteIndex","getTime","TEXT_DIFF","DEFAULT_MIN_LENGTH","cachedDiffPatch","getDiffMatchPatch","instance","diff_match_patch","dmpModuleName","dmp","err","diff_match_patch_not_found","txt1","txt2","patch_toText","patch_make","results","patch_apply","patch_fromText","textPatchFailed","minLength","textDiff","textDeltaReverse","l","lines","line","lineTmp","lineHeader","lineAdd","lineRemove","header","headerRegex","split","lineStart","join","switchTo","parent","root","defaultMatch","lengthMatrix","match","x","y","matrix","Math","max","backtrack","sequence","subsequence"],"mappings":"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","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})","var environment=require(\"./environment\"),DiffPatcher=require(\"./diffpatcher\").DiffPatcher;exports.DiffPatcher=DiffPatcher,exports.create=function(e){return new DiffPatcher(e)},exports.dateReviver=require(\"./date-reviver\");var defaultInstance;if(exports.diff=function(){return defaultInstance||(defaultInstance=new DiffPatcher),defaultInstance.diff.apply(defaultInstance,arguments)},exports.patch=function(){return defaultInstance||(defaultInstance=new DiffPatcher),defaultInstance.patch.apply(defaultInstance,arguments)},exports.unpatch=function(){return defaultInstance||(defaultInstance=new DiffPatcher),defaultInstance.unpatch.apply(defaultInstance,arguments)},exports.reverse=function(){return defaultInstance||(defaultInstance=new DiffPatcher),defaultInstance.reverse.apply(defaultInstance,arguments)},environment.isBrowser)exports.homepage=\"{{package-homepage}}\",exports.version=\"{{package-version}}\";else{var packageInfoModuleName=\"../package.json\",packageInfo=require(packageInfoModuleName);exports.homepage=packageInfo.homepage,exports.version=packageInfo.version;var formatterModuleName=\"./formatters\",formatters=require(formatterModuleName);exports.formatters=formatters,exports.console=formatters.console}","\nexports.isBrowser = typeof window !== 'undefined';\n","var Processor = require('./processor').Processor;\nvar Pipe = require('./pipe').Pipe;\nvar DiffContext = require('./contexts/diff').DiffContext;\nvar PatchContext = require('./contexts/patch').PatchContext;\nvar ReverseContext = require('./contexts/reverse').ReverseContext;\n\nvar trivial = require('./filters/trivial');\nvar nested = require('./filters/nested');\nvar arrays = require('./filters/arrays');\nvar dates = require('./filters/dates');\nvar texts = require('./filters/texts');\n\nvar DiffPatcher = function DiffPatcher(options) {\n  this.processor = new Processor(options);\n  this.processor.pipe(new Pipe('diff').append(\n    nested.collectChildrenDiffFilter,\n    trivial.diffFilter,\n    dates.diffFilter,\n    texts.diffFilter,\n    nested.objectsDiffFilter,\n    arrays.diffFilter\n  ).shouldHaveResult());\n  this.processor.pipe(new Pipe('patch').append(\n    nested.collectChildrenPatchFilter,\n    arrays.collectChildrenPatchFilter,\n    trivial.patchFilter,\n    texts.patchFilter,\n    nested.patchFilter,\n    arrays.patchFilter\n  ).shouldHaveResult());\n  this.processor.pipe(new Pipe('reverse').append(\n    nested.collectChildrenReverseFilter,\n    arrays.collectChildrenReverseFilter,\n    trivial.reverseFilter,\n    texts.reverseFilter,\n    nested.reverseFilter,\n    arrays.reverseFilter\n  ).shouldHaveResult());\n};\n\nDiffPatcher.prototype.options = function() {\n  return this.processor.options.apply(this.processor, arguments);\n};\n\nDiffPatcher.prototype.diff = function(left, right) {\n  return this.processor.process(new DiffContext(left, right));\n};\n\nDiffPatcher.prototype.patch = function(left, delta) {\n  return this.processor.process(new PatchContext(left, delta));\n};\n\nDiffPatcher.prototype.reverse = function(delta) {\n  return this.processor.process(new ReverseContext(delta));\n};\n\nDiffPatcher.prototype.unpatch = function(right, delta) {\n  return this.patch(right, this.reverse(delta));\n};\n\nexports.DiffPatcher = DiffPatcher;\n","// use as 2nd parameter for JSON.parse to revive Date instances\nmodule.exports = function dateReviver(key, value) {\n  var parts;\n  if (typeof value === 'string') {\n    parts = /^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(?:\\.(\\d*))?(Z|([+\\-])(\\d{2}):(\\d{2}))$/.exec(value);\n    if (parts) {\n      return new Date(Date.UTC(+parts[1], +parts[2] - 1, +parts[3], +parts[4], +parts[5], +parts[6], +(parts[7] || 0)));\n    }\n  }\n  return value;\n};\n","\nvar Processor = function Processor(options){\n\tthis.selfOptions = options;\n\tthis.pipes = {};\n};\n\nProcessor.prototype.options = function(options) {\n\tif (options) {\n\t\tthis.selfOptions = options;\n\t}\n\treturn this.selfOptions;\n};\n\nProcessor.prototype.pipe = function(name, pipe) {\n\tif (typeof name === 'string') {\n\t\tif (typeof pipe === 'undefined') {\n\t\t\treturn this.pipes[name];\n\t\t} else {\n\t\t\tthis.pipes[name] = pipe;\n\t\t}\n\t}\n\tif (name && name.name) {\n\t\tpipe = name;\n\t\tif (pipe.processor === this) { return pipe; }\n\t\tthis.pipes[pipe.name] = pipe;\n\t}\n\tpipe.processor = this;\n\treturn pipe;\n};\n\nProcessor.prototype.process = function(input, pipe) {\n\tvar context = input;\n\tcontext.options = this.options();\n\tvar nextPipe = pipe || input.pipe || 'default';\n\tvar lastPipe, lastContext;\n\twhile (nextPipe) {\n\t\tif (typeof context.nextAfterChildren !== 'undefined') {\n\t\t\t// children processed and coming back to parent\n\t\t\tcontext.next = context.nextAfterChildren;\n\t\t\tcontext.nextAfterChildren = null;\n\t\t}\n\n\t\tif (typeof nextPipe === 'string') {\n\t\t\tnextPipe = this.pipe(nextPipe);\n\t\t}\n\t\tnextPipe.process(context);\n\t\tlastContext = context;\n\t\tlastPipe = nextPipe;\n\t\tnextPipe = null;\n\t\tif (context) {\n\t\t\tif (context.next) {\n\t\t\t\tcontext = context.next;\n\t\t\t\tnextPipe = lastContext.nextPipe || context.pipe || lastPipe;\n\t\t\t}\n\t\t}\n\t}\n\treturn context.hasResult ? context.result : undefined;\n};\n\nexports.Processor = Processor;\n","var Pipe = function Pipe(name) {\n  this.name = name;\n  this.filters = [];\n};\n\nPipe.prototype.process = function(input) {\n  if (!this.processor) {\n    throw new Error('add this pipe to a processor before using it');\n  }\n  var debug = this.debug;\n  var length = this.filters.length;\n  var context = input;\n  for (var index = 0; index < length; index++) {\n    var filter = this.filters[index];\n    if (debug) {\n      this.log('filter: ' + filter.filterName);\n    }\n    filter(context);\n    if (typeof context === 'object' && context.exiting) {\n      context.exiting = false;\n      break;\n    }\n  }\n  if (!context.next && this.resultCheck) {\n    this.resultCheck(context);\n  }\n};\n\nPipe.prototype.log = function(msg) {\n  console.log('[jsondiffpatch] ' + this.name + ' pipe, ' + msg);\n};\n\nPipe.prototype.append = function() {\n  this.filters.push.apply(this.filters, arguments);\n  return this;\n};\n\nPipe.prototype.prepend = function() {\n  this.filters.unshift.apply(this.filters, arguments);\n  return this;\n};\n\nPipe.prototype.indexOf = function(filterName) {\n  if (!filterName) {\n    throw new Error('a filter name is required');\n  }\n  for (var index = 0; index < this.filters.length; index++) {\n    var filter = this.filters[index];\n    if (filter.filterName === filterName) {\n      return index;\n    }\n  }\n  throw new Error('filter not found: ' + filterName);\n};\n\nPipe.prototype.list = function() {\n  var names = [];\n  for (var index = 0; index < this.filters.length; index++) {\n    var filter = this.filters[index];\n    names.push(filter.filterName);\n  }\n  return names;\n};\n\nPipe.prototype.after = function(filterName) {\n  var index = this.indexOf(filterName);\n  var params = Array.prototype.slice.call(arguments, 1);\n  if (!params.length) {\n    throw new Error('a filter is required');\n  }\n  params.unshift(index + 1, 0);\n  Array.prototype.splice.apply(this.filters, params);\n  return this;\n};\n\nPipe.prototype.before = function(filterName) {\n  var index = this.indexOf(filterName);\n  var params = Array.prototype.slice.call(arguments, 1);\n  if (!params.length) {\n    throw new Error('a filter is required');\n  }\n  params.unshift(index, 0);\n  Array.prototype.splice.apply(this.filters, params);\n  return this;\n};\n\nPipe.prototype.clear = function() {\n  this.filters.length = 0;\n  return this;\n};\n\nPipe.prototype.shouldHaveResult = function(should) {\n  if (should === false) {\n    this.resultCheck = null;\n    return;\n  }\n  if (this.resultCheck) {\n    return;\n  }\n  var pipe = this;\n  this.resultCheck = function(context) {\n    if (!context.hasResult) {\n      console.log(context);\n      var error = new Error(pipe.name + ' failed');\n      error.noResult = true;\n      throw error;\n    }\n  };\n  return this;\n};\n\nexports.Pipe = Pipe;\n","var Context = require('./context').Context;\n\nvar DiffContext = function DiffContext(left, right) {\n  this.left = left;\n  this.right = right;\n  this.pipe = 'diff';\n};\n\nDiffContext.prototype = new Context();\n\nexports.DiffContext = DiffContext;\n","var Context = require('./context').Context;\n\nvar PatchContext = function PatchContext(left, delta) {\n  this.left = left;\n  this.delta = delta;\n  this.pipe = 'patch';\n};\n\nPatchContext.prototype = new Context();\n\nexports.PatchContext = PatchContext;\n","var Context = require('./context').Context;\n\nvar ReverseContext = function ReverseContext(delta) {\n  this.delta = delta;\n  this.pipe = 'reverse';\n};\n\nReverseContext.prototype = new Context();\n\nexports.ReverseContext = ReverseContext;\n","var isArray = (typeof Array.isArray === 'function') ?\n  // use native function\n  Array.isArray :\n  // use instanceof operator\n  function(a) {\n    return a instanceof Array;\n  };\n\nvar diffFilter = function trivialMatchesDiffFilter(context) {\n  if (context.left === context.right) {\n    context.setResult(undefined).exit();\n    return;\n  }\n  if (typeof context.left === 'undefined') {\n    if (typeof context.right === 'function') {\n      throw new Error('functions are not supported');\n    }\n    context.setResult([context.right]).exit();\n    return;\n  }\n  if (typeof context.right === 'undefined') {\n    context.setResult([context.left, 0, 0]).exit();\n    return;\n  }\n  if (typeof context.left === 'function' || typeof context.right === 'function') {\n    throw new Error('functions are not supported');\n  }\n  context.leftType = context.left === null ? 'null' : typeof context.left;\n  context.rightType = context.right === null ? 'null' : typeof context.right;\n  if (context.leftType !== context.rightType) {\n    context.setResult([context.left, context.right]).exit();\n    return;\n  }\n  if (context.leftType === 'boolean' || context.leftType === 'number') {\n    context.setResult([context.left, context.right]).exit();\n    return;\n  }\n  if (context.leftType === 'object') {\n    context.leftIsArray = isArray(context.left);\n  }\n  if (context.rightType === 'object') {\n    context.rightIsArray = isArray(context.right);\n  }\n  if (context.leftIsArray !== context.rightIsArray) {\n    context.setResult([context.left, context.right]).exit();\n    return;\n  }\n};\ndiffFilter.filterName = 'trivial';\n\nvar patchFilter = function trivialMatchesPatchFilter(context) {\n  if (typeof context.delta === 'undefined') {\n    context.setResult(context.left).exit();\n    return;\n  }\n  context.nested = !isArray(context.delta);\n  if (context.nested) {\n    return;\n  }\n  if (context.delta.length === 1) {\n    context.setResult(context.delta[0]).exit();\n    return;\n  }\n  if (context.delta.length === 2) {\n    context.setResult(context.delta[1]).exit();\n    return;\n  }\n  if (context.delta.length === 3 && context.delta[2] === 0) {\n    context.setResult(undefined).exit();\n    return;\n  }\n};\npatchFilter.filterName = 'trivial';\n\nvar reverseFilter = function trivialReferseFilter(context) {\n  if (typeof context.delta === 'undefined') {\n    context.setResult(context.delta).exit();\n    return;\n  }\n  context.nested = !isArray(context.delta);\n  if (context.nested) {\n    return;\n  }\n  if (context.delta.length === 1) {\n    context.setResult([context.delta[0], 0, 0]).exit();\n    return;\n  }\n  if (context.delta.length === 2) {\n    context.setResult([context.delta[1], context.delta[0]]).exit();\n    return;\n  }\n  if (context.delta.length === 3 && context.delta[2] === 0) {\n    context.setResult([context.delta[0]]).exit();\n    return;\n  }\n};\nreverseFilter.filterName = 'trivial';\n\nexports.diffFilter = diffFilter;\nexports.patchFilter = patchFilter;\nexports.reverseFilter = reverseFilter;\n","var DiffContext = require('../contexts/diff').DiffContext;\nvar PatchContext = require('../contexts/patch').PatchContext;\nvar ReverseContext = require('../contexts/reverse').ReverseContext;\n\nvar collectChildrenDiffFilter = function collectChildrenDiffFilter(context) {\n  if (!context || !context.children) {\n    return;\n  }\n  var length = context.children.length;\n  var child;\n  var result = context.result;\n  for (var index = 0; index < length; index++) {\n    child = context.children[index];\n    if (typeof child.result === 'undefined') {\n      continue;\n    }\n    result = result || {};\n    result[child.childName] = child.result;\n  }\n  if (result && context.leftIsArray) {\n    result._t = 'a';\n  }\n  context.setResult(result).exit();\n};\ncollectChildrenDiffFilter.filterName = 'collectChildren';\n\nvar objectsDiffFilter = function objectsDiffFilter(context) {\n  if (context.leftIsArray || context.leftType !== 'object') {\n    return;\n  }\n\n  var name, child;\n  for (name in context.left) {\n    child = new DiffContext(context.left[name], context.right[name]);\n    context.push(child, name);\n  }\n  for (name in context.right) {\n    if (typeof context.left[name] === 'undefined') {\n      child = new DiffContext(undefined, context.right[name]);\n      context.push(child, name);\n    }\n  }\n\n  if (!context.children || context.children.length === 0) {\n    context.setResult(undefined).exit();\n    return;\n  }\n  context.exit();\n};\nobjectsDiffFilter.filterName = 'objects';\n\nvar patchFilter = function nestedPatchFilter(context) {\n  if (!context.nested) {\n    return;\n  }\n  if (context.delta._t) {\n    return;\n  }\n  var name, child;\n  for (name in context.delta) {\n    child = new PatchContext(context.left[name], context.delta[name]);\n    context.push(child, name);\n  }\n  context.exit();\n};\npatchFilter.filterName = 'objects';\n\nvar collectChildrenPatchFilter = function collectChildrenPatchFilter(context) {\n  if (!context || !context.children) {\n    return;\n  }\n  if (context.delta._t) {\n    return;\n  }\n  var length = context.children.length;\n  var child;\n  for (var index = 0; index < length; index++) {\n    child = context.children[index];\n    if (context.left.hasOwnProperty(child.childName) && child.result === undefined) {\n      delete context.left[child.childName];\n    } else if (context.left[child.childName] !== child.result) {\n      context.left[child.childName] = child.result;\n    }\n  }\n  context.setResult(context.left).exit();\n};\ncollectChildrenPatchFilter.filterName = 'collectChildren';\n\nvar reverseFilter = function nestedReverseFilter(context) {\n  if (!context.nested) {\n    return;\n  }\n  if (context.delta._t) {\n    return;\n  }\n  var name, child;\n  for (name in context.delta) {\n    child = new ReverseContext(context.delta[name]);\n    context.push(child, name);\n  }\n  context.exit();\n};\nreverseFilter.filterName = 'objects';\n\nvar collectChildrenReverseFilter = function collectChildrenReverseFilter(context) {\n  if (!context || !context.children) {\n    return;\n  }\n  if (context.delta._t) {\n    return;\n  }\n  var length = context.children.length;\n  var child;\n  var delta = {};\n  for (var index = 0; index < length; index++) {\n    child = context.children[index];\n    if (delta[child.childName] !== child.result) {\n      delta[child.childName] = child.result;\n    }\n  }\n  context.setResult(delta).exit();\n};\ncollectChildrenReverseFilter.filterName = 'collectChildren';\n\nexports.collectChildrenDiffFilter = collectChildrenDiffFilter;\nexports.objectsDiffFilter = objectsDiffFilter;\nexports.patchFilter = patchFilter;\nexports.collectChildrenPatchFilter = collectChildrenPatchFilter;\nexports.reverseFilter = reverseFilter;\nexports.collectChildrenReverseFilter = collectChildrenReverseFilter;\n","var DiffContext = require('../contexts/diff').DiffContext;\nvar PatchContext = require('../contexts/patch').PatchContext;\nvar ReverseContext = require('../contexts/reverse').ReverseContext;\n\nvar lcs = require('./lcs');\n\nvar ARRAY_MOVE = 3;\n\nvar isArray = (typeof Array.isArray === 'function') ?\n  // use native function\n  Array.isArray :\n  // use instanceof operator\n  function(a) {\n    return a instanceof Array;\n  };\n\nvar arrayIndexOf = typeof Array.prototype.indexOf === 'function' ?\n  function(array, item) {\n    return array.indexOf(item);\n  } : function(array, item) {\n    var length = array.length;\n    for (var i = 0; i < length; i++) {\n      if (array[i] === item) {\n        return i;\n      }\n    }\n    return -1;\n  };\n\nfunction arraysHaveMatchByRef(array1, array2, len1, len2) {\n  for (var index1 = 0; index1 < len1; index1++) {\n    var val1 = array1[index1];\n    for (var index2 = 0; index2 < len2; index2++) {\n      var val2 = array2[index2];\n      if (val1 === val2) {\n        return true;\n      }\n    }\n  }\n}\n\nfunction matchItems(array1, array2, index1, index2, context) {\n  var value1 = array1[index1];\n  var value2 = array2[index2];\n  if (value1 === value2) {\n    return true;\n  }\n  if (typeof value1 !== 'object' || typeof value2 !== 'object') {\n    return false;\n  }\n  var objectHash = context.objectHash;\n  if (!objectHash) {\n    // no way to match objects was provided, try match by position\n    return context.matchByPosition && index1 === index2;\n  }\n  var hash1;\n  var hash2;\n  if (typeof index1 === 'number') {\n    context.hashCache1 = context.hashCache1 || [];\n    hash1 = context.hashCache1[index1];\n    if (typeof hash1 === 'undefined') {\n      context.hashCache1[index1] = hash1 = objectHash(value1, index1);\n    }\n  } else {\n    hash1 = objectHash(value1);\n  }\n  if (typeof hash1 === 'undefined') {\n    return false;\n  }\n  if (typeof index2 === 'number') {\n    context.hashCache2 = context.hashCache2 || [];\n    hash2 = context.hashCache2[index2];\n    if (typeof hash2 === 'undefined') {\n      context.hashCache2[index2] = hash2 = objectHash(value2, index2);\n    }\n  } else {\n    hash2 = objectHash(value2);\n  }\n  if (typeof hash2 === 'undefined') {\n    return false;\n  }\n  return hash1 === hash2;\n}\n\nvar diffFilter = function arraysDiffFilter(context) {\n  if (!context.leftIsArray) {\n    return;\n  }\n\n  var matchContext = {\n    objectHash: context.options && context.options.objectHash,\n    matchByPosition: context.options && context.options.matchByPosition\n  };\n  var commonHead = 0;\n  var commonTail = 0;\n  var index;\n  var index1;\n  var index2;\n  var array1 = context.left;\n  var array2 = context.right;\n  var len1 = array1.length;\n  var len2 = array2.length;\n\n  var child;\n\n  if (len1 > 0 && len2 > 0 && !matchContext.objectHash &&\n    typeof matchContext.matchByPosition !== 'boolean') {\n    matchContext.matchByPosition = !arraysHaveMatchByRef(array1, array2, len1, len2);\n  }\n\n  // separate common head\n  while (commonHead < len1 && commonHead < len2 &&\n    matchItems(array1, array2, commonHead, commonHead, matchContext)) {\n    index = commonHead;\n    child = new DiffContext(context.left[index], context.right[index]);\n    context.push(child, index);\n    commonHead++;\n  }\n  // separate common tail\n  while (commonTail + commonHead < len1 && commonTail + commonHead < len2 &&\n    matchItems(array1, array2, len1 - 1 - commonTail, len2 - 1 - commonTail, matchContext)) {\n    index1 = len1 - 1 - commonTail;\n    index2 = len2 - 1 - commonTail;\n    child = new DiffContext(context.left[index1], context.right[index2]);\n    context.push(child, index2);\n    commonTail++;\n  }\n  var result;\n  if (commonHead + commonTail === len1) {\n    if (len1 === len2) {\n      // arrays are identical\n      context.setResult(undefined).exit();\n      return;\n    }\n    // trivial case, a block (1 or more consecutive items) was added\n    result = result || {\n      _t: 'a'\n    };\n    for (index = commonHead; index < len2 - commonTail; index++) {\n      result[index] = [array2[index]];\n    }\n    context.setResult(result).exit();\n    return;\n  }\n  if (commonHead + commonTail === len2) {\n    // trivial case, a block (1 or more consecutive items) was removed\n    result = result || {\n      _t: 'a'\n    };\n    for (index = commonHead; index < len1 - commonTail; index++) {\n      result['_' + index] = [array1[index], 0, 0];\n    }\n    context.setResult(result).exit();\n    return;\n  }\n  // reset hash cache\n  delete matchContext.hashCache1;\n  delete matchContext.hashCache2;\n\n  // diff is not trivial, find the LCS (Longest Common Subsequence)\n  var trimmed1 = array1.slice(commonHead, len1 - commonTail);\n  var trimmed2 = array2.slice(commonHead, len2 - commonTail);\n  var seq = lcs.get(\n    trimmed1, trimmed2,\n    matchItems,\n    matchContext\n  );\n  var removedItems = [];\n  result = result || {\n    _t: 'a'\n  };\n  for (index = commonHead; index < len1 - commonTail; index++) {\n    if (arrayIndexOf(seq.indices1, index - commonHead) < 0) {\n      // removed\n      result['_' + index] = [array1[index], 0, 0];\n      removedItems.push(index);\n    }\n  }\n\n  var detectMove = true;\n  if (context.options && context.options.arrays && context.options.arrays.detectMove === false) {\n    detectMove = false;\n  }\n  var includeValueOnMove = false;\n  if (context.options && context.options.arrays && context.options.arrays.includeValueOnMove) {\n    includeValueOnMove = true;\n  }\n\n  var removedItemsLength = removedItems.length;\n  for (index = commonHead; index < len2 - commonTail; index++) {\n    var indexOnArray2 = arrayIndexOf(seq.indices2, index - commonHead);\n    if (indexOnArray2 < 0) {\n      // added, try to match with a removed item and register as position move\n      var isMove = false;\n      if (detectMove && removedItemsLength > 0) {\n        for (var removeItemIndex1 = 0; removeItemIndex1 < removedItemsLength; removeItemIndex1++) {\n          index1 = removedItems[removeItemIndex1];\n          if (matchItems(trimmed1, trimmed2, index1 - commonHead,\n            index - commonHead, matchContext)) {\n            // store position move as: [originalValue, newPosition, ARRAY_MOVE]\n            result['_' + index1].splice(1, 2, index, ARRAY_MOVE);\n            if (!includeValueOnMove) {\n              // don't include moved value on diff, to save bytes\n              result['_' + index1][0] = '';\n            }\n\n            index2 = index;\n            child = new DiffContext(context.left[index1], context.right[index2]);\n            context.push(child, index2);\n            removedItems.splice(removeItemIndex1, 1);\n            isMove = true;\n            break;\n          }\n        }\n      }\n      if (!isMove) {\n        // added\n        result[index] = [array2[index]];\n      }\n    } else {\n      // match, do inner diff\n      index1 = seq.indices1[indexOnArray2] + commonHead;\n      index2 = seq.indices2[indexOnArray2] + commonHead;\n      child = new DiffContext(context.left[index1], context.right[index2]);\n      context.push(child, index2);\n    }\n  }\n\n  context.setResult(result).exit();\n\n};\ndiffFilter.filterName = 'arrays';\n\nvar compare = {\n  numerically: function(a, b) {\n    return a - b;\n  },\n  numericallyBy: function(name) {\n    return function(a, b) {\n      return a[name] - b[name];\n    };\n  }\n};\n\nvar patchFilter = function nestedPatchFilter(context) {\n  if (!context.nested) {\n    return;\n  }\n  if (context.delta._t !== 'a') {\n    return;\n  }\n  var index, index1;\n\n  var delta = context.delta;\n  var array = context.left;\n\n  // first, separate removals, insertions and modifications\n  var toRemove = [];\n  var toInsert = [];\n  var toModify = [];\n  for (index in delta) {\n    if (index !== '_t') {\n      if (index[0] === '_') {\n        // removed item from original array\n        if (delta[index][2] === 0 || delta[index][2] === ARRAY_MOVE) {\n          toRemove.push(parseInt(index.slice(1), 10));\n        } else {\n          throw new Error('only removal or move can be applied at original array indices' +\n            ', invalid diff type: ' + delta[index][2]);\n        }\n      } else {\n        if (delta[index].length === 1) {\n          // added item at new array\n          toInsert.push({\n            index: parseInt(index, 10),\n            value: delta[index][0]\n          });\n        } else {\n          // modified item at new array\n          toModify.push({\n            index: parseInt(index, 10),\n            delta: delta[index]\n          });\n        }\n      }\n    }\n  }\n\n  // remove items, in reverse order to avoid sawing our own floor\n  toRemove = toRemove.sort(compare.numerically);\n  for (index = toRemove.length - 1; index >= 0; index--) {\n    index1 = toRemove[index];\n    var indexDiff = delta['_' + index1];\n    var removedValue = array.splice(index1, 1)[0];\n    if (indexDiff[2] === ARRAY_MOVE) {\n      // reinsert later\n      toInsert.push({\n        index: indexDiff[1],\n        value: removedValue\n      });\n    }\n  }\n\n  // insert items, in reverse order to avoid moving our own floor\n  toInsert = toInsert.sort(compare.numericallyBy('index'));\n  var toInsertLength = toInsert.length;\n  for (index = 0; index < toInsertLength; index++) {\n    var insertion = toInsert[index];\n    array.splice(insertion.index, 0, insertion.value);\n  }\n\n  // apply modifications\n  var toModifyLength = toModify.length;\n  var child;\n  if (toModifyLength > 0) {\n    for (index = 0; index < toModifyLength; index++) {\n      var modification = toModify[index];\n      child = new PatchContext(context.left[modification.index], modification.delta);\n      context.push(child, modification.index);\n    }\n  }\n\n  if (!context.children) {\n    context.setResult(context.left).exit();\n    return;\n  }\n  context.exit();\n};\npatchFilter.filterName = 'arrays';\n\nvar collectChildrenPatchFilter = function collectChildrenPatchFilter(context) {\n  if (!context || !context.children) {\n    return;\n  }\n  if (context.delta._t !== 'a') {\n    return;\n  }\n  var length = context.children.length;\n  var child;\n  for (var index = 0; index < length; index++) {\n    child = context.children[index];\n    context.left[child.childName] = child.result;\n  }\n  context.setResult(context.left).exit();\n};\ncollectChildrenPatchFilter.filterName = 'arraysCollectChildren';\n\nvar reverseFilter = function arraysReverseFilter(context) {\n  if (!context.nested) {\n    if (context.delta[2] === ARRAY_MOVE) {\n      context.newName = '_' + context.delta[1];\n      context.setResult([context.delta[0], parseInt(context.childName.substr(1), 10), ARRAY_MOVE]).exit();\n    }\n    return;\n  }\n  if (context.delta._t !== 'a') {\n    return;\n  }\n  var name, child;\n  for (name in context.delta) {\n    if (name === '_t') {\n      continue;\n    }\n    child = new ReverseContext(context.delta[name]);\n    context.push(child, name);\n  }\n  context.exit();\n};\nreverseFilter.filterName = 'arrays';\n\nvar reverseArrayDeltaIndex = function(delta, index, itemDelta) {\n  if (typeof index === 'string' && index[0] === '_') {\n    return parseInt(index.substr(1), 10);\n  } else if (isArray(itemDelta) && itemDelta[2] === 0) {\n    return '_' + index;\n  }\n\n  var reverseIndex = +index;\n  for (var deltaIndex in delta) {\n    var deltaItem = delta[deltaIndex];\n    if (isArray(deltaItem)) {\n      if (deltaItem[2] === ARRAY_MOVE) {\n        var moveFromIndex = parseInt(deltaIndex.substr(1), 10);\n        var moveToIndex = deltaItem[1];\n        if (moveToIndex === +index) {\n          return moveFromIndex;\n        }\n        if (moveFromIndex <= reverseIndex && moveToIndex > reverseIndex) {\n          reverseIndex++;\n        } else if (moveFromIndex >= reverseIndex && moveToIndex < reverseIndex) {\n          reverseIndex--;\n        }\n      } else if (deltaItem[2] === 0) {\n        var deleteIndex = parseInt(deltaIndex.substr(1), 10);\n        if (deleteIndex <= reverseIndex) {\n          reverseIndex++;\n        }\n      } else if (deltaItem.length === 1 && deltaIndex <= reverseIndex) {\n        reverseIndex--;\n      }\n    }\n  }\n\n  return reverseIndex;\n};\n\nvar collectChildrenReverseFilter = function collectChildrenReverseFilter(context) {\n  if (!context || !context.children) {\n    return;\n  }\n  if (context.delta._t !== 'a') {\n    return;\n  }\n  var length = context.children.length;\n  var child;\n  var delta = {\n    _t: 'a'\n  };\n\n  for (var index = 0; index < length; index++) {\n    child = context.children[index];\n    var name = child.newName;\n    if (typeof name === 'undefined') {\n      name = reverseArrayDeltaIndex(context.delta, child.childName, child.result);\n    }\n    if (delta[name] !== child.result) {\n      delta[name] = child.result;\n    }\n  }\n  context.setResult(delta).exit();\n};\ncollectChildrenReverseFilter.filterName = 'arraysCollectChildren';\n\nexports.diffFilter = diffFilter;\nexports.patchFilter = patchFilter;\nexports.collectChildrenPatchFilter = collectChildrenPatchFilter;\nexports.reverseFilter = reverseFilter;\nexports.collectChildrenReverseFilter = collectChildrenReverseFilter;\n","var diffFilter = function datesDiffFilter(context) {\n  if (context.left instanceof Date) {\n    if (context.right instanceof Date) {\n      if (context.left.getTime() !== context.right.getTime()) {\n        context.setResult([context.left, context.right]);\n      } else {\n        context.setResult(undefined);\n      }\n    } else {\n      context.setResult([context.left, context.right]);\n    }\n    context.exit();\n  } else if (context.right instanceof Date) {\n    context.setResult([context.left, context.right]).exit();\n  }\n};\ndiffFilter.filterName = 'dates';\n\nexports.diffFilter = diffFilter;\n","/* global diff_match_patch */\nvar TEXT_DIFF = 2;\nvar DEFAULT_MIN_LENGTH = 60;\nvar cachedDiffPatch = null;\n\nvar getDiffMatchPatch = function() {\n  /*jshint camelcase: false */\n\n  if (!cachedDiffPatch) {\n    var instance;\n    if (typeof diff_match_patch !== 'undefined') {\n      // already loaded, probably a browser\n      instance = typeof diff_match_patch === 'function' ?\n        new diff_match_patch() : new diff_match_patch.diff_match_patch();\n    } else if (typeof require === 'function') {\n      try {\n        var dmpModuleName = 'diff_match_patch_uncompressed';\n        var dmp = require('../../public/external/' + dmpModuleName);\n        instance = new dmp.diff_match_patch();\n      } catch (err) {\n        instance = null;\n      }\n    }\n    if (!instance) {\n      var error = new Error('text diff_match_patch library not found');\n      error.diff_match_patch_not_found = true;\n      throw error;\n    }\n    cachedDiffPatch = {\n      diff: function(txt1, txt2) {\n        return instance.patch_toText(instance.patch_make(txt1, txt2));\n      },\n      patch: function(txt1, patch) {\n        var results = instance.patch_apply(instance.patch_fromText(patch), txt1);\n        for (var i = 0; i < results[1].length; i++) {\n          if (!results[1][i]) {\n            var error = new Error('text patch failed');\n            error.textPatchFailed = true;\n          }\n        }\n        return results[0];\n      }\n    };\n  }\n  return cachedDiffPatch;\n};\n\nvar diffFilter = function textsDiffFilter(context) {\n  if (context.leftType !== 'string') {\n    return;\n  }\n  var minLength = (context.options && context.options.textDiff &&\n    context.options.textDiff.minLength) || DEFAULT_MIN_LENGTH;\n  if (context.left.length < minLength ||\n    context.right.length < minLength) {\n    context.setResult([context.left, context.right]).exit();\n    return;\n  }\n  // large text, use a text-diff algorithm\n  var diff = getDiffMatchPatch().diff;\n  context.setResult([diff(context.left, context.right), 0, TEXT_DIFF]).exit();\n};\ndiffFilter.filterName = 'texts';\n\nvar patchFilter = function textsPatchFilter(context) {\n  if (context.nested) {\n    return;\n  }\n  if (context.delta[2] !== TEXT_DIFF) {\n    return;\n  }\n\n  // text-diff, use a text-patch algorithm\n  var patch = getDiffMatchPatch().patch;\n  context.setResult(patch(context.left, context.delta[0])).exit();\n};\npatchFilter.filterName = 'texts';\n\nvar textDeltaReverse = function(delta) {\n  var i, l, lines, line, lineTmp, header = null,\n    headerRegex = /^@@ +\\-(\\d+),(\\d+) +\\+(\\d+),(\\d+) +@@$/,\n    lineHeader, lineAdd, lineRemove;\n  lines = delta.split('\\n');\n  for (i = 0, l = lines.length; i < l; i++) {\n    line = lines[i];\n    var lineStart = line.slice(0, 1);\n    if (lineStart === '@') {\n      header = headerRegex.exec(line);\n      lineHeader = i;\n      lineAdd = null;\n      lineRemove = null;\n\n      // fix header\n      lines[lineHeader] = '@@ -' + header[3] + ',' + header[4] + ' +' + header[1] + ',' + header[2] + ' @@';\n    } else if (lineStart === '+') {\n      lineAdd = i;\n      lines[i] = '-' + lines[i].slice(1);\n      if (lines[i - 1].slice(0, 1) === '+') {\n        // swap lines to keep default order (-+)\n        lineTmp = lines[i];\n        lines[i] = lines[i - 1];\n        lines[i - 1] = lineTmp;\n      }\n    } else if (lineStart === '-') {\n      lineRemove = i;\n      lines[i] = '+' + lines[i].slice(1);\n    }\n  }\n  return lines.join('\\n');\n};\n\nvar reverseFilter = function textsReverseFilter(context) {\n  if (context.nested) {\n    return;\n  }\n  if (context.delta[2] !== TEXT_DIFF) {\n    return;\n  }\n\n  // text-diff, use a text-diff algorithm\n  context.setResult([textDeltaReverse(context.delta[0]), 0, TEXT_DIFF]).exit();\n};\nreverseFilter.filterName = 'texts';\n\nexports.diffFilter = diffFilter;\nexports.patchFilter = patchFilter;\nexports.reverseFilter = reverseFilter;\n","\nvar Pipe = require('../pipe').Pipe;\n\nvar Context = function Context(){\n};\n\nContext.prototype.setResult = function(result) {\n\tthis.result = result;\n\tthis.hasResult = true;\n\treturn this;\n};\n\nContext.prototype.exit = function() {\n\tthis.exiting = true;\n\treturn this;\n};\n\nContext.prototype.switchTo = function(next, pipe) {\n\tif (typeof next === 'string' || next instanceof Pipe) {\n\t\tthis.nextPipe = next;\n\t} else {\n\t\tthis.next = next;\n\t\tif (pipe) {\n\t\t\tthis.nextPipe = pipe;\n\t\t}\n\t}\n\treturn this;\n};\n\nContext.prototype.push = function(child, name) {\n\tchild.parent = this;\n\tif (typeof name !== 'undefined') {\n\t\tchild.childName = name;\n\t}\n\tchild.root = this.root || this;\n\tchild.options = child.options || this.options;\n\tif (!this.children) {\n\t\tthis.children = [child];\n\t\tthis.nextAfterChildren = this.next || null;\n\t\tthis.next = child;\n\t} else {\n\t\tthis.children[this.children.length - 1].next = child;\n\t\tthis.children.push(child);\n\t}\n\tchild.next = this;\n\treturn this;\n};\n\nexports.Context = Context;\n","/*\n\nLCS implementation that supports arrays or strings\n\nreference: http://en.wikipedia.org/wiki/Longest_common_subsequence_problem\n\n*/\n\nvar defaultMatch = function(array1, array2, index1, index2) {\n  return array1[index1] === array2[index2];\n};\n\nvar lengthMatrix = function(array1, array2, match, context) {\n  var len1 = array1.length;\n  var len2 = array2.length;\n  var x, y;\n\n  // initialize empty matrix of len1+1 x len2+1\n  var matrix = [len1 + 1];\n  for (x = 0; x < len1 + 1; x++) {\n    matrix[x] = [len2 + 1];\n    for (y = 0; y < len2 + 1; y++) {\n      matrix[x][y] = 0;\n    }\n  }\n  matrix.match = match;\n  // save sequence lengths for each coordinate\n  for (x = 1; x < len1 + 1; x++) {\n    for (y = 1; y < len2 + 1; y++) {\n      if (match(array1, array2, x - 1, y - 1, context)) {\n        matrix[x][y] = matrix[x - 1][y - 1] + 1;\n      } else {\n        matrix[x][y] = Math.max(matrix[x - 1][y], matrix[x][y - 1]);\n      }\n    }\n  }\n  return matrix;\n};\n\nvar backtrack = function(matrix, array1, array2, index1, index2, context) {\n  if (index1 === 0 || index2 === 0) {\n    return {\n      sequence: [],\n      indices1: [],\n      indices2: []\n    };\n  }\n\n  if (matrix.match(array1, array2, index1 - 1, index2 - 1, context)) {\n    var subsequence = backtrack(matrix, array1, array2, index1 - 1, index2 - 1, context);\n    subsequence.sequence.push(array1[index1 - 1]);\n    subsequence.indices1.push(index1 - 1);\n    subsequence.indices2.push(index2 - 1);\n    return subsequence;\n  }\n\n  if (matrix[index1][index2 - 1] > matrix[index1 - 1][index2]) {\n    return backtrack(matrix, array1, array2, index1, index2 - 1, context);\n  } else {\n    return backtrack(matrix, array1, array2, index1 - 1, index2, context);\n  }\n};\n\nvar get = function(array1, array2, match, context) {\n  context = context || {};\n  var matrix = lengthMatrix(array1, array2, match || defaultMatch, context);\n  var result = backtrack(matrix, array1, array2, array1.length, array2.length, context);\n  if (typeof array1 === 'string' && typeof array2 === 'string') {\n    result.sequence = result.sequence.join('');\n  }\n  return result;\n};\n\nexports.get = get;\n"]}