func (p *Parts) AddWaitfor() {
	p.AddLiteral(";waitfor")
	p.AddSpaces()
	p.AddLiteral("delay")
	p.AddSpaces()
	p.AddLiteral("'")
	p.AddNumber(1024, 24)
	p.AddLiteral(":")
	p.AddNumber(1025, 60)
	p.AddLiteral(":")
	p.AddNumber(1026, 60)
	p.AddLiteral("'--")
}
AddWaitfor adds a waitfor statement
package data
import (
	"fmt"
	"math/rand"
	"regexp"
	"strconv"
	"strings"
)
var (
	ErrorNotSupported = fmt.Errorf("part type is not supported")
)
type PartType int
const (
	PartTypeLiteral PartType = iota
	PartTypeNumber
	PartTypeName
	PartTypeOr
	PartTypeHexOr
	PartTypeAnd
	PartTypeSpaces
	PartTypeSpacesOptional
	PartTypeHexSpaces
	PartTypeHexSpacesOptional
	PartTypeComment
	PartTypeObfuscated
	PartTypeObfuscatedWithComments
	PartTypeHex
	PartTypeNumberList
	PartTypeScientificNumber
	PartTypeSQL
)
type Part struct {
	PartType
	Variable int
	Literal  string
	Max      int
	Parts    *Parts
}
type Parts struct {
	Parts []Part
}
func NewParts() *Parts {
	return &Parts{
		Parts: make([]Part, 0, 16),
	}
}
func (p *Parts) AddType(partType PartType) {
	part := Part{
		PartType: partType,
	}
	p.Parts = append(p.Parts, part)
	return
}
func (p *Parts) AddParts(partType PartType, adder func(p *Parts)) {
	part := Part{
		PartType: partType,
		Parts:    NewParts(),
	}
	adder(part.Parts)
	p.Parts = append(p.Parts, part)
}
func (p *Parts) AddLiteral(literal string) {
	part := Part{
		PartType: PartTypeLiteral,
		Literal:  literal,
	}
	p.Parts = append(p.Parts, part)
	return
}
func (p *Parts) AddNumber(variable, max int) {
	part := Part{
		PartType: PartTypeNumber,
		Variable: variable,
		Max:      max,
	}
	p.Parts = append(p.Parts, part)
	return
}
func (p *Parts) AddName(variable int) {
	part := Part{
		PartType: PartTypeName,
		Variable: variable,
	}
	p.Parts = append(p.Parts, part)
	return
}
func (p *Parts) AddOr() {
	p.AddType(PartTypeOr)
}
func (p *Parts) AddHexOr() {
	p.AddType(PartTypeHexOr)
}
func (p *Parts) AddAnd() {
	p.AddType(PartTypeAnd)
}
func (p *Parts) AddSpaces() {
	p.AddType(PartTypeSpaces)
}
func (p *Parts) AddSpacesOptional() {
	p.AddType(PartTypeSpacesOptional)
}
func (p *Parts) AddHexSpaces() {
	p.AddType(PartTypeHexSpaces)
}
func (p *Parts) AddHexSpacesOptional() {
	p.AddType(PartTypeHexSpacesOptional)
}
func (p *Parts) AddComment() {
	p.AddType(PartTypeComment)
}
func (p *Parts) AddHex(max int) {
	part := Part{
		PartType: PartTypeHex,
		Max:      max,
	}
	p.Parts = append(p.Parts, part)
}
func (p *Parts) AddNumberList(max int) {
	part := Part{
		PartType: PartTypeNumberList,
		Max:      max,
	}
	p.Parts = append(p.Parts, part)
}
func (p *Parts) AddBenchmark() {
	p.AddLiteral("benchmark(")
	p.AddSpacesOptional()
	p.AddNumber(1024, 10000000)
	p.AddSpacesOptional()
	p.AddLiteral(",MD5(")
	p.AddSpacesOptional()
	p.AddNumber(1025, 10000000)
	p.AddSpacesOptional()
	p.AddLiteral("))#")
}