code: function Chance (seed) {
          if (!(this instanceof Chance)) {
              if (!seed) { seed = null; } // handle other non-truthy seeds, as described in issue #322
              return seed === null ? new Chance() : new Chance(seed);
          }
  
          // if user has provided a function, use that as the generator
          if (typeof seed === 'function') {
              this.random = seed;
              return this;
          }
  
          if (arguments.length) {
              // set a starting value of zero so we can add to it
              this.seed = 0;
          }
  
          // otherwise, leave this.seed blank so that MT will receive a blank
  
          for (var i = 0; i < arguments.length; i++) {
              var seedling = 0;
              if (Object.prototype.toString.call(arguments[i]) === '[object String]') {
                  for (var j = 0; j < arguments[i].length; j++) {
                      // create a numeric hash for each argument, add to seedling
                      var hash = 0;
                      for (var k = 0; k < arguments[i].length; k++) {
                          hash = arguments[i].charCodeAt(k) + (hash << 6) + (hash << 16) - hash;
                      }
                      seedling += hash;
                  }
              } else {
                  seedling = arguments[i];
              }
              this.seed += (arguments.length - i) * seedling;
          }
  
          // If no generator function was provided, use our MT
          this.mt = this.mersenne_twister(this.seed);
          this.bimd5 = this.blueimp_md5();
          this.random = function () {
              return this.mt.random(this.seed);
          };
  
          return this;
      }
docs: Constructor