code: function createWrapper(func, bitmask, partialArgs, partialRightArgs, thisArg, arity) {
      var isBind = bitmask & 1,
          isBindKey = bitmask & 2,
          isCurry = bitmask & 4,
          isCurryBound = bitmask & 8,
          isPartial = bitmask & 16,
          isPartialRight = bitmask & 32;
  
      if (!isBindKey && !isFunction(func)) {
        throw new TypeError;
      }
      if (isPartial && !partialArgs.length) {
        bitmask &= ~16;
        isPartial = partialArgs = false;
      }
      if (isPartialRight && !partialRightArgs.length) {
        bitmask &= ~32;
        isPartialRight = partialRightArgs = false;
      }
      // fast path for `_.bind`
      var creater = (bitmask == 1 || bitmask === 17) ? baseBind : baseCreateWrapper;
      return creater([func, bitmask, partialArgs, partialRightArgs, thisArg, arity]);
    }
docs: Creates a function that, when called, either curries or invokes `func`
  with an optional `this` binding and partially applied arguments.
  
  @private
  @param {Function|string} func The function or method name to reference.
  @param {number} bitmask The bitmask of method flags to compose.
  The bitmask may be composed of the following flags:
  1 - `_.bind`
  2 - `_.bindKey`
  4 - `_.curry`
  8 - `_.curry` (bound)
  16 - `_.partial`
  32 - `_.partialRight`
  @param {Array} [partialArgs] An array of arguments to prepend to those
  provided to the new function.
  @param {Array} [partialRightArgs] An array of arguments to append to those
  provided to the new function.
  @param {*} [thisArg] The `this` binding of `func`.
  @param {number} [arity] The arity of `func`.
  @returns {Function} Returns the new function.