function finish(self) {
        var nou = self.nounique
        var all = nou ? [] : Object.create(null)

        for (var i = 0, l = self.matches.length; i < l; i++) {
          var matches = self.matches[i]
          if (!matches || Object.keys(matches).length === 0) {
            if (self.nonull) {
              // do like the shell, and spit out the literal glob
              var literal = self.minimatch.globSet[i]
              if (nou) all.push(literal)
              else all[literal] = true
            }
          } else {
            // had matches
            var m = Object.keys(matches)
            if (nou) all.push.apply(all, m)
            else
              m.forEach(function(m) {
                all[m] = true
              })
          }
        }

        if (!nou) all = Object.keys(all)

        if (!self.nosort) all = all.sort(self.nocase ? alphasorti : alphasort)

        // at *some* point we statted all of these
        if (self.mark) {
          for (var i = 0; i < all.length; i++) {
            all[i] = self._mark(all[i])
          }
          if (self.nodir) {
            all = all.filter(function(e) {
              var notDir = !/\/$/.test(e)
              var c = self.cache[e] || self.cache[makeAbs(self, e)]
              if (notDir && c) notDir = c !== 'DIR' && !Array.isArray(c)
              return notDir
            })
          }
        }

        if (self.ignore.length)
          all = all.filter(function(m) {
            return !isIgnored(self, m)
          })

        self.found = all
      }
') {
          var gpattern = pattern.replace(/(\/\*\*)+$/, '')
          gmatcher = new Minimatch(gpattern, {dot: true})
        }

        return {
          matcher: new Minimatch(pattern, {dot: true}),
          gmatcher: gmatcher
        }
      }

      function setopts(self, pattern, options) {
        if (!options) options = {}

        // base-matching: just use globstar for that.
        if (options.matchBase && -1 === pattern.indexOf('/')) {
          if (options.noglobstar) {
            throw new Error('base matching requires globstar')
          }
          pattern = '*