code: func (h *dnsContext) InspectServerBlocks(sourceFile string, serverBlocks []caddyfile.ServerBlock) ([]caddyfile.ServerBlock, error) {
  	// Normalize and check all the zone names and check for duplicates
  	dups := map[string]string{}
  	for _, s := range serverBlocks {
  		for i, k := range s.Keys {
  			za, err := normalizeZone(k)
  			if err != nil {
  				return nil, err
  			}
  			s.Keys[i] = za.String()
  			if v, ok := dups[za.String()]; ok {
  				return nil, fmt.Errorf("cannot serve %s - zone already defined for %v", za, v)
  			}
  			dups[za.String()] = za.String()
  
  			// Save the config to our master list, and key it for lookups.
  			cfg := &Config{
  				Zone:      za.Zone,
  				Port:      za.Port,
  				Transport: za.Transport,
  			}
  			if za.IPNet == nil {
  				h.saveConfig(za.String(), cfg)
  				continue
  			}
  
  			ones, bits := za.IPNet.Mask.Size()
  			if (bits-ones)%8 != 0 { // only do this for non-octet bounderies
  				cfg.FilterFunc = func(s string) bool {
  					// TODO(miek): strings.ToLower! Slow and allocates new string.
  					addr := dnsutil.ExtractAddressFromReverse(strings.ToLower(s))
  					if addr == "" {
  						return true
  					}
  					return za.IPNet.Contains(net.ParseIP(addr))
  				}
  			}
  			h.saveConfig(za.String(), cfg)
  		}
  	}
  	return serverBlocks, nil
  }
docs: // InspectServerBlocks make sure that everything checks out before
  // executing directives and otherwise prepares the directives to
  // be parsed and executed.