public/build/static/application.js
function baseMerge(object, source, callback, stackA, stackB) {
      (isArray(source) ? baseEach : baseForOwn)(source, function(source, key) {
        var found,
            isArr,
            result = source,
            value = object[key];

        if (source && ((isArr = isArray(source)) || isPlainObject(source))) {
          // avoid merging previously merged cyclic sources
          var stackLength = stackA.length;
          while (stackLength--) {
            if ((found = stackA[stackLength] == source)) {
              value = stackB[stackLength];
              break;
            }
          }
          if (!found) {
            var isShallow;
            if (callback) {
              result = callback(value, source);
              if ((isShallow = typeof result != 'undefined')) {
                value = result;
              }
            }
            if (!isShallow) {
              value = isArr
                ? (isArray(value) ? value : [])
                : (isPlainObject(value) ? value : {});
            }
            // add `source` and associated `value` to the stack of traversed objects
            stackA.push(source);
            stackB.push(value);

            // recursively merge objects and arrays (susceptible to call stack limits)
            if (!isShallow) {
              baseMerge(value, source, callback, stackA, stackB);
            }
          }
        }
        else {
          if (callback) {
            result = callback(value, source);
            if (typeof result == 'undefined') {
              result = source;
            }
          }
          if (typeof result != 'undefined') {
            value = result;
          }
        }
        object[key] = value;
      });
    }
function baseMerge(object, source, callback, stackA, stackB) {
      (isArray(source) ? baseEach : baseForOwn)(source, function(source, key) {
        var found,
            isArr,
            result = source,
            value = object[key];

        if (source && ((isArr = isArray(source)) || isPlainObject(source))) {
          // avoid merging previously merged cyclic sources
          var stackLength = stackA.length;
          while (stackLength--) {
            if ((found = stackA[stackLength] == source)) {
              value = stackB[stackLength];
              break;
            }
          }
          if (!found) {
            var isShallow;
            if (callback) {
              result = callback(value, source);
              if ((isShallow = typeof result != 'undefined')) {
                value = result;
              }
            }
            if (!isShallow) {
              value = isArr
                ? (isArray(value) ? value : [])
                : (isPlainObject(value) ? value : {});
            }
            // add `source` and associated `value` to the stack of traversed objects
            stackA.push(source);
            stackB.push(value);

            // recursively merge objects and arrays (susceptible to call stack limits)
            if (!isShallow) {
              baseMerge(value, source, callback, stackA, stackB);
            }
          }
        }
        else {
          if (callback) {
            result = callback(value, source);
            if (typeof result == 'undefined') {
              result = source;
            }
          }
          if (typeof result != 'undefined') {
            value = result;
          }
        }
        object[key] = value;
      });
    }
function baseMerge ( object , source , callback , stackA , stackB ) { ( isArray ( source ) ? baseEach : baseForOwn ) ( source , function ( source , key ) { var found , isArr , result = source , value = object [ key ] ; if ( source && ( ( isArr = isArray ( source ) ) || isPlainObject ( source ) ) ) { // avoid merging previously merged cyclic sources var stackLength = stackA . length ; while ( stackLength -- ) { if ( ( found = stackA [ stackLength ] == source ) ) { value = stackB [ stackLength ] ; break ; } } if ( ! found ) { var isShallow ; if ( callback ) { result = callback ( value , source ) ; if ( ( isShallow = typeof result != 'undefined' ) ) { value = result ; } } if ( ! isShallow ) { value = isArr ? ( isArray ( value ) ? value : [ ] ) : ( isPlainObject ( value ) ? value : { } ) ; } // add `source` and associated `value` to the stack of traversed objects stackA . push ( source ) ; stackB . push ( value ) ; // recursively merge objects and arrays (susceptible to call stack limits) if ( ! isShallow ) { baseMerge ( value , source , callback , stackA , stackB ) ; } } } else { if ( callback ) { result = callback ( value , source ) ; if ( typeof result == 'undefined' ) { result = source ; } } if ( typeof result != 'undefined' ) { value = result ; } } object [ key ] = value ; } ) ; }
The base implementation of `_.merge` without argument juggling or support
for `thisArg` binding.

@private
@param {Object} object The destination object.
@param {Object} source The source object.
@param {Function} [callback] The function to customize merging properties.
@param {Array} [stackA=[]] Tracks traversed source objects.
@param {Array} [stackB=[]] Associates values with source counterparts.
The base implementation of _ . merge without argument juggling or support for thisArg binding .