(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})({1:[function(require,module,exports){ 
 | 
angular.module('nemLogging', []); 
 | 
  
 | 
angular.module('nemLogging').provider('nemDebug', function (){ 
 | 
  var ourDebug = null; 
 | 
  ourDebug = require('debug'); 
 | 
  
 | 
  this.$get =  function(){ 
 | 
    //avail as service 
 | 
    return ourDebug; 
 | 
  }; 
 | 
  
 | 
  //avail at provider, config time 
 | 
  this.debug = ourDebug; 
 | 
  
 | 
  return this; 
 | 
}); 
 | 
var bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, 
 | 
  slice = [].slice; 
 | 
  
 | 
angular.module('nemLogging').provider('nemSimpleLogger', [ 
 | 
  'nemDebugProvider', function(nemDebugProvider) { 
 | 
    var LEVELS, Logger, _debugCache, _fns, _isValidLogObject, _maybeExecLevel, _wrapDebug, i, key, len, nemDebug, val; 
 | 
    nemDebug = nemDebugProvider.debug; 
 | 
    _debugCache = {}; 
 | 
    _fns = ['debug', 'info', 'warn', 'error', 'log']; 
 | 
    LEVELS = {}; 
 | 
    for (key = i = 0, len = _fns.length; i < len; key = ++i) { 
 | 
      val = _fns[key]; 
 | 
      LEVELS[val] = key; 
 | 
    } 
 | 
    _maybeExecLevel = function(level, current, fn) { 
 | 
      if (level >= current) { 
 | 
        return fn(); 
 | 
      } 
 | 
    }; 
 | 
    _isValidLogObject = function(logObject) { 
 | 
      var isValid, j, len1; 
 | 
      isValid = false; 
 | 
      if (!logObject) { 
 | 
        return isValid; 
 | 
      } 
 | 
      for (j = 0, len1 = _fns.length; j < len1; j++) { 
 | 
        val = _fns[j]; 
 | 
        isValid = (logObject[val] != null) && typeof logObject[val] === 'function'; 
 | 
        if (!isValid) { 
 | 
          break; 
 | 
        } 
 | 
      } 
 | 
      return isValid; 
 | 
    }; 
 | 
  
 | 
    /* 
 | 
      Overide logeObject.debug with a nemDebug instance 
 | 
      see: https://github.com/visionmedia/debug/blob/master/Readme.md 
 | 
     */ 
 | 
    _wrapDebug = function(namespace, logObject) { 
 | 
      var debugInstance, j, len1, newLogger; 
 | 
      if (_debugCache[namespace] == null) { 
 | 
        _debugCache[namespace] = nemDebug(namespace); 
 | 
      } 
 | 
      debugInstance = _debugCache[namespace]; 
 | 
      newLogger = {}; 
 | 
      for (j = 0, len1 = _fns.length; j < len1; j++) { 
 | 
        val = _fns[j]; 
 | 
        newLogger[val] = val === 'debug' ? debugInstance : logObject[val]; 
 | 
      } 
 | 
      return newLogger; 
 | 
    }; 
 | 
    Logger = (function() { 
 | 
      function Logger($log1) { 
 | 
        var fn1, j, len1, level, logFns; 
 | 
        this.$log = $log1; 
 | 
        this.spawn = bind(this.spawn, this); 
 | 
        if (!this.$log) { 
 | 
          throw 'internalLogger undefined'; 
 | 
        } 
 | 
        if (!_isValidLogObject(this.$log)) { 
 | 
          throw '@$log is invalid'; 
 | 
        } 
 | 
        this.doLog = true; 
 | 
        logFns = {}; 
 | 
        fn1 = (function(_this) { 
 | 
          return function(level) { 
 | 
            logFns[level] = function() { 
 | 
              var args; 
 | 
              args = 1 <= arguments.length ? slice.call(arguments, 0) : []; 
 | 
              if (_this.doLog) { 
 | 
                return _maybeExecLevel(LEVELS[level], _this.currentLevel, function() { 
 | 
                  var ref; 
 | 
                  return (ref = _this.$log)[level].apply(ref, args); 
 | 
                }); 
 | 
              } 
 | 
            }; 
 | 
            return _this[level] = logFns[level]; 
 | 
          }; 
 | 
        })(this); 
 | 
        for (j = 0, len1 = _fns.length; j < len1; j++) { 
 | 
          level = _fns[j]; 
 | 
          fn1(level); 
 | 
        } 
 | 
        this.LEVELS = LEVELS; 
 | 
        this.currentLevel = LEVELS.error; 
 | 
      } 
 | 
  
 | 
      Logger.prototype.spawn = function(newInternalLogger) { 
 | 
        if (typeof newInternalLogger === 'string') { 
 | 
          if (!_isValidLogObject(this.$log)) { 
 | 
            throw '@$log is invalid'; 
 | 
          } 
 | 
          if (!nemDebug) { 
 | 
            throw 'nemDebug is undefined this is probably the light version of this library sep debug logggers is not supported!'; 
 | 
          } 
 | 
          return _wrapDebug(newInternalLogger, this.$log); 
 | 
        } 
 | 
        return new Logger(newInternalLogger || this.$log); 
 | 
      }; 
 | 
  
 | 
      return Logger; 
 | 
  
 | 
    })(); 
 | 
    this.decorator = [ 
 | 
      '$log', function($delegate) { 
 | 
        var log; 
 | 
        log = new Logger($delegate); 
 | 
        log.currentLevel = LEVELS.debug; 
 | 
        return log; 
 | 
      } 
 | 
    ]; 
 | 
    this.$get = [ 
 | 
      '$log', function($log) { 
 | 
        return new Logger($log); 
 | 
      } 
 | 
    ]; 
 | 
    return this; 
 | 
  } 
 | 
]); 
 | 
  
 | 
},{"debug":2}],2:[function(require,module,exports){ 
 | 
  
 | 
/** 
 | 
 * This is the web browser implementation of `debug()`. 
 | 
 * 
 | 
 * Expose `debug()` as the module. 
 | 
 */ 
 | 
  
 | 
exports = module.exports = require('./debug'); 
 | 
exports.log = log; 
 | 
exports.formatArgs = formatArgs; 
 | 
exports.save = save; 
 | 
exports.load = load; 
 | 
exports.useColors = useColors; 
 | 
exports.storage = 'undefined' != typeof chrome 
 | 
               && 'undefined' != typeof chrome.storage 
 | 
                  ? chrome.storage.local 
 | 
                  : localstorage(); 
 | 
  
 | 
/** 
 | 
 * Colors. 
 | 
 */ 
 | 
  
 | 
exports.colors = [ 
 | 
  'lightseagreen', 
 | 
  'forestgreen', 
 | 
  'goldenrod', 
 | 
  'dodgerblue', 
 | 
  'darkorchid', 
 | 
  'crimson' 
 | 
]; 
 | 
  
 | 
/** 
 | 
 * Currently only WebKit-based Web Inspectors, Firefox >= v31, 
 | 
 * and the Firebug extension (any Firefox version) are known 
 | 
 * to support "%c" CSS customizations. 
 | 
 * 
 | 
 * TODO: add a `localStorage` variable to explicitly enable/disable colors 
 | 
 */ 
 | 
  
 | 
function useColors() { 
 | 
  // is webkit? http://stackoverflow.com/a/16459606/376773 
 | 
  return ('WebkitAppearance' in document.documentElement.style) || 
 | 
    // is firebug? http://stackoverflow.com/a/398120/376773 
 | 
    (window.console && (console.firebug || (console.exception && console.table))) || 
 | 
    // is firefox >= v31? 
 | 
    // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages 
 | 
    (navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31); 
 | 
} 
 | 
  
 | 
/** 
 | 
 * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default. 
 | 
 */ 
 | 
  
 | 
exports.formatters.j = function(v) { 
 | 
  return JSON.stringify(v); 
 | 
}; 
 | 
  
 | 
  
 | 
/** 
 | 
 * Colorize log arguments if enabled. 
 | 
 * 
 | 
 * @api public 
 | 
 */ 
 | 
  
 | 
function formatArgs() { 
 | 
  var args = arguments; 
 | 
  var useColors = this.useColors; 
 | 
  
 | 
  args[0] = (useColors ? '%c' : '') 
 | 
    + this.namespace 
 | 
    + (useColors ? ' %c' : ' ') 
 | 
    + args[0] 
 | 
    + (useColors ? '%c ' : ' ') 
 | 
    + '+' + exports.humanize(this.diff); 
 | 
  
 | 
  if (!useColors) return args; 
 | 
  
 | 
  var c = 'color: ' + this.color; 
 | 
  args = [args[0], c, 'color: inherit'].concat(Array.prototype.slice.call(args, 1)); 
 | 
  
 | 
  // the final "%c" is somewhat tricky, because there could be other 
 | 
  // arguments passed either before or after the %c, so we need to 
 | 
  // figure out the correct index to insert the CSS into 
 | 
  var index = 0; 
 | 
  var lastC = 0; 
 | 
  args[0].replace(/%[a-z%]/g, function(match) { 
 | 
    if ('%%' === match) return; 
 | 
    index++; 
 | 
    if ('%c' === match) { 
 | 
      // we only are interested in the *last* %c 
 | 
      // (the user may have provided their own) 
 | 
      lastC = index; 
 | 
    } 
 | 
  }); 
 | 
  
 | 
  args.splice(lastC, 0, c); 
 | 
  return args; 
 | 
} 
 | 
  
 | 
/** 
 | 
 * Invokes `console.log()` when available. 
 | 
 * No-op when `console.log` is not a "function". 
 | 
 * 
 | 
 * @api public 
 | 
 */ 
 | 
  
 | 
function log() { 
 | 
  // this hackery is required for IE8/9, where 
 | 
  // the `console.log` function doesn't have 'apply' 
 | 
  return 'object' === typeof console 
 | 
    && console.log 
 | 
    && Function.prototype.apply.call(console.log, console, arguments); 
 | 
} 
 | 
  
 | 
/** 
 | 
 * Save `namespaces`. 
 | 
 * 
 | 
 * @param {String} namespaces 
 | 
 * @api private 
 | 
 */ 
 | 
  
 | 
function save(namespaces) { 
 | 
  try { 
 | 
    if (null == namespaces) { 
 | 
      exports.storage.removeItem('debug'); 
 | 
    } else { 
 | 
      exports.storage.debug = namespaces; 
 | 
    } 
 | 
  } catch(e) {} 
 | 
} 
 | 
  
 | 
/** 
 | 
 * Load `namespaces`. 
 | 
 * 
 | 
 * @return {String} returns the previously persisted debug modes 
 | 
 * @api private 
 | 
 */ 
 | 
  
 | 
function load() { 
 | 
  var r; 
 | 
  try { 
 | 
    r = exports.storage.debug; 
 | 
  } catch(e) {} 
 | 
  return r; 
 | 
} 
 | 
  
 | 
/** 
 | 
 * Enable namespaces listed in `localStorage.debug` initially. 
 | 
 */ 
 | 
  
 | 
exports.enable(load()); 
 | 
  
 | 
/** 
 | 
 * Localstorage attempts to return the localstorage. 
 | 
 * 
 | 
 * This is necessary because safari throws 
 | 
 * when a user disables cookies/localstorage 
 | 
 * and you attempt to access it. 
 | 
 * 
 | 
 * @return {LocalStorage} 
 | 
 * @api private 
 | 
 */ 
 | 
  
 | 
function localstorage(){ 
 | 
  try { 
 | 
    return window.localStorage; 
 | 
  } catch (e) {} 
 | 
} 
 | 
  
 | 
},{"./debug":3}],3:[function(require,module,exports){ 
 | 
  
 | 
/** 
 | 
 * This is the common logic for both the Node.js and web browser 
 | 
 * implementations of `debug()`. 
 | 
 * 
 | 
 * Expose `debug()` as the module. 
 | 
 */ 
 | 
  
 | 
exports = module.exports = debug; 
 | 
exports.coerce = coerce; 
 | 
exports.disable = disable; 
 | 
exports.enable = enable; 
 | 
exports.enabled = enabled; 
 | 
exports.humanize = require('ms'); 
 | 
  
 | 
/** 
 | 
 * The currently active debug mode names, and names to skip. 
 | 
 */ 
 | 
  
 | 
exports.names = []; 
 | 
exports.skips = []; 
 | 
  
 | 
/** 
 | 
 * Map of special "%n" handling functions, for the debug "format" argument. 
 | 
 * 
 | 
 * Valid key names are a single, lowercased letter, i.e. "n". 
 | 
 */ 
 | 
  
 | 
exports.formatters = {}; 
 | 
  
 | 
/** 
 | 
 * Previously assigned color. 
 | 
 */ 
 | 
  
 | 
var prevColor = 0; 
 | 
  
 | 
/** 
 | 
 * Previous log timestamp. 
 | 
 */ 
 | 
  
 | 
var prevTime; 
 | 
  
 | 
/** 
 | 
 * Select a color. 
 | 
 * 
 | 
 * @return {Number} 
 | 
 * @api private 
 | 
 */ 
 | 
  
 | 
function selectColor() { 
 | 
  return exports.colors[prevColor++ % exports.colors.length]; 
 | 
} 
 | 
  
 | 
/** 
 | 
 * Create a debugger with the given `namespace`. 
 | 
 * 
 | 
 * @param {String} namespace 
 | 
 * @return {Function} 
 | 
 * @api public 
 | 
 */ 
 | 
  
 | 
function debug(namespace) { 
 | 
  
 | 
  // define the `disabled` version 
 | 
  function disabled() { 
 | 
  } 
 | 
  disabled.enabled = false; 
 | 
  
 | 
  // define the `enabled` version 
 | 
  function enabled() { 
 | 
  
 | 
    var self = enabled; 
 | 
  
 | 
    // set `diff` timestamp 
 | 
    var curr = +new Date(); 
 | 
    var ms = curr - (prevTime || curr); 
 | 
    self.diff = ms; 
 | 
    self.prev = prevTime; 
 | 
    self.curr = curr; 
 | 
    prevTime = curr; 
 | 
  
 | 
    // add the `color` if not set 
 | 
    if (null == self.useColors) self.useColors = exports.useColors(); 
 | 
    if (null == self.color && self.useColors) self.color = selectColor(); 
 | 
  
 | 
    var args = Array.prototype.slice.call(arguments); 
 | 
  
 | 
    args[0] = exports.coerce(args[0]); 
 | 
  
 | 
    if ('string' !== typeof args[0]) { 
 | 
      // anything else let's inspect with %o 
 | 
      args = ['%o'].concat(args); 
 | 
    } 
 | 
  
 | 
    // apply any `formatters` transformations 
 | 
    var index = 0; 
 | 
    args[0] = args[0].replace(/%([a-z%])/g, function(match, format) { 
 | 
      // if we encounter an escaped % then don't increase the array index 
 | 
      if (match === '%%') return match; 
 | 
      index++; 
 | 
      var formatter = exports.formatters[format]; 
 | 
      if ('function' === typeof formatter) { 
 | 
        var val = args[index]; 
 | 
        match = formatter.call(self, val); 
 | 
  
 | 
        // now we need to remove `args[index]` since it's inlined in the `format` 
 | 
        args.splice(index, 1); 
 | 
        index--; 
 | 
      } 
 | 
      return match; 
 | 
    }); 
 | 
  
 | 
    if ('function' === typeof exports.formatArgs) { 
 | 
      args = exports.formatArgs.apply(self, args); 
 | 
    } 
 | 
    var logFn = enabled.log || exports.log || console.log.bind(console); 
 | 
    logFn.apply(self, args); 
 | 
  } 
 | 
  enabled.enabled = true; 
 | 
  
 | 
  var fn = exports.enabled(namespace) ? enabled : disabled; 
 | 
  
 | 
  fn.namespace = namespace; 
 | 
  
 | 
  return fn; 
 | 
} 
 | 
  
 | 
/** 
 | 
 * Enables a debug mode by namespaces. This can include modes 
 | 
 * separated by a colon and wildcards. 
 | 
 * 
 | 
 * @param {String} namespaces 
 | 
 * @api public 
 | 
 */ 
 | 
  
 | 
function enable(namespaces) { 
 | 
  exports.save(namespaces); 
 | 
  
 | 
  var split = (namespaces || '').split(/[\s,]+/); 
 | 
  var len = split.length; 
 | 
  
 | 
  for (var i = 0; i < len; i++) { 
 | 
    if (!split[i]) continue; // ignore empty strings 
 | 
    namespaces = split[i].replace(/\*/g, '.*?'); 
 | 
    if (namespaces[0] === '-') { 
 | 
      exports.skips.push(new RegExp('^' + namespaces.substr(1) + '$')); 
 | 
    } else { 
 | 
      exports.names.push(new RegExp('^' + namespaces + '$')); 
 | 
    } 
 | 
  } 
 | 
} 
 | 
  
 | 
/** 
 | 
 * Disable debug output. 
 | 
 * 
 | 
 * @api public 
 | 
 */ 
 | 
  
 | 
function disable() { 
 | 
  exports.enable(''); 
 | 
} 
 | 
  
 | 
/** 
 | 
 * Returns true if the given mode name is enabled, false otherwise. 
 | 
 * 
 | 
 * @param {String} name 
 | 
 * @return {Boolean} 
 | 
 * @api public 
 | 
 */ 
 | 
  
 | 
function enabled(name) { 
 | 
  var i, len; 
 | 
  for (i = 0, len = exports.skips.length; i < len; i++) { 
 | 
    if (exports.skips[i].test(name)) { 
 | 
      return false; 
 | 
    } 
 | 
  } 
 | 
  for (i = 0, len = exports.names.length; i < len; i++) { 
 | 
    if (exports.names[i].test(name)) { 
 | 
      return true; 
 | 
    } 
 | 
  } 
 | 
  return false; 
 | 
} 
 | 
  
 | 
/** 
 | 
 * Coerce `val`. 
 | 
 * 
 | 
 * @param {Mixed} val 
 | 
 * @return {Mixed} 
 | 
 * @api private 
 | 
 */ 
 | 
  
 | 
function coerce(val) { 
 | 
  if (val instanceof Error) return val.stack || val.message; 
 | 
  return val; 
 | 
} 
 | 
  
 | 
},{"ms":4}],4:[function(require,module,exports){ 
 | 
/** 
 | 
 * Helpers. 
 | 
 */ 
 | 
  
 | 
var s = 1000; 
 | 
var m = s * 60; 
 | 
var h = m * 60; 
 | 
var d = h * 24; 
 | 
var y = d * 365.25; 
 | 
  
 | 
/** 
 | 
 * Parse or format the given `val`. 
 | 
 * 
 | 
 * Options: 
 | 
 * 
 | 
 *  - `long` verbose formatting [false] 
 | 
 * 
 | 
 * @param {String|Number} val 
 | 
 * @param {Object} options 
 | 
 * @return {String|Number} 
 | 
 * @api public 
 | 
 */ 
 | 
  
 | 
module.exports = function(val, options){ 
 | 
  options = options || {}; 
 | 
  if ('string' == typeof val) return parse(val); 
 | 
  return options.long 
 | 
    ? long(val) 
 | 
    : short(val); 
 | 
}; 
 | 
  
 | 
/** 
 | 
 * Parse the given `str` and return milliseconds. 
 | 
 * 
 | 
 * @param {String} str 
 | 
 * @return {Number} 
 | 
 * @api private 
 | 
 */ 
 | 
  
 | 
function parse(str) { 
 | 
  str = '' + str; 
 | 
  if (str.length > 10000) return; 
 | 
  var match = /^((?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|years?|yrs?|y)?$/i.exec(str); 
 | 
  if (!match) return; 
 | 
  var n = parseFloat(match[1]); 
 | 
  var type = (match[2] || 'ms').toLowerCase(); 
 | 
  switch (type) { 
 | 
    case 'years': 
 | 
    case 'year': 
 | 
    case 'yrs': 
 | 
    case 'yr': 
 | 
    case 'y': 
 | 
      return n * y; 
 | 
    case 'days': 
 | 
    case 'day': 
 | 
    case 'd': 
 | 
      return n * d; 
 | 
    case 'hours': 
 | 
    case 'hour': 
 | 
    case 'hrs': 
 | 
    case 'hr': 
 | 
    case 'h': 
 | 
      return n * h; 
 | 
    case 'minutes': 
 | 
    case 'minute': 
 | 
    case 'mins': 
 | 
    case 'min': 
 | 
    case 'm': 
 | 
      return n * m; 
 | 
    case 'seconds': 
 | 
    case 'second': 
 | 
    case 'secs': 
 | 
    case 'sec': 
 | 
    case 's': 
 | 
      return n * s; 
 | 
    case 'milliseconds': 
 | 
    case 'millisecond': 
 | 
    case 'msecs': 
 | 
    case 'msec': 
 | 
    case 'ms': 
 | 
      return n; 
 | 
  } 
 | 
} 
 | 
  
 | 
/** 
 | 
 * Short format for `ms`. 
 | 
 * 
 | 
 * @param {Number} ms 
 | 
 * @return {String} 
 | 
 * @api private 
 | 
 */ 
 | 
  
 | 
function short(ms) { 
 | 
  if (ms >= d) return Math.round(ms / d) + 'd'; 
 | 
  if (ms >= h) return Math.round(ms / h) + 'h'; 
 | 
  if (ms >= m) return Math.round(ms / m) + 'm'; 
 | 
  if (ms >= s) return Math.round(ms / s) + 's'; 
 | 
  return ms + 'ms'; 
 | 
} 
 | 
  
 | 
/** 
 | 
 * Long format for `ms`. 
 | 
 * 
 | 
 * @param {Number} ms 
 | 
 * @return {String} 
 | 
 * @api private 
 | 
 */ 
 | 
  
 | 
function long(ms) { 
 | 
  return plural(ms, d, 'day') 
 | 
    || plural(ms, h, 'hour') 
 | 
    || plural(ms, m, 'minute') 
 | 
    || plural(ms, s, 'second') 
 | 
    || ms + ' ms'; 
 | 
} 
 | 
  
 | 
/** 
 | 
 * Pluralization helper. 
 | 
 */ 
 | 
  
 | 
function plural(ms, n, name) { 
 | 
  if (ms < n) return; 
 | 
  if (ms < n * 1.5) return Math.floor(ms / n) + ' ' + name; 
 | 
  return Math.ceil(ms / n) + ' ' + name + 's'; 
 | 
} 
 | 
  
 | 
},{}]},{},[1]); 
 |