code: func (b *Box) Resolve(key string) (file.File, error) {
  	key = strings.TrimPrefix(key, "/")
  
  	var r resolver.Resolver
  
  	b.resolvers.Range(func(k string, vr resolver.Resolver) bool {
  		lk := strings.ToLower(resolver.Key(k))
  		lkey := strings.ToLower(resolver.Key(key))
  		if lk == lkey {
  			r = vr
  			return false
  		}
  		return true
  	})
  
  	if r == nil {
  		r = b.DefaultResolver
  		if r == nil {
  			r = resolver.DefaultResolver
  			if r == nil {
  				return nil, errors.New("resolver.DefaultResolver is nil")
  			}
  		}
  	}
  	plog.Debug(r, "Resolve", "box", b.Name, "key", key)
  
  	f, err := r.Resolve(b.Name, key)
  	if err != nil {
  		z := filepath.Join(resolver.OsPath(b.ResolutionDir), resolver.OsPath(key))
  		f, err = r.Resolve(b.Name, z)
  		if err != nil {
  			plog.Debug(r, "Resolve", "box", b.Name, "key", z, "err", err)
  			return f, err
  		}
  		b, err := ioutil.ReadAll(f)
  		if err != nil {
  			return f, err
  		}
  		f, err = file.NewFile(key, b)
  		if err != nil {
  			return f, err
  		}
  	}
  	plog.Debug(r, "Resolve", "box", b.Name, "key", key, "file", f.Name())
  	return f, nil
  }
docs: // Resolve will attempt to find the file in the box,
  // returning an error if the find can not be found.