// This file is generated with "go test -tags generate". DO NOT EDIT!
// +build !generate

package triegen_test

// lookup returns the trie value for the first UTF-8 encoding in s and
// the width in bytes of this encoding. The size will be 0 if s does not
// hold enough bytes to complete the encoding. len(s) must be greater than 0.
func (t *randTrie) lookup(s []byte) (v uint8, sz int) {
	c0 := s[0]
	switch {
	case c0 < 0x80: // is ASCII
		return randValues[c0], 1
	case c0 < 0xC0:
		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
	case c0 < 0xE0: // 2-byte UTF-8
		if len(s) < 2 {
			return 0, 0
		}
		i := randIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c1), 2
	case c0 < 0xF0: // 3-byte UTF-8
		if len(s) < 3 {
			return 0, 0
		}
		i := randIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = randIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c2), 3
	case c0 < 0xF8: // 4-byte UTF-8
		if len(s) < 4 {
			return 0, 0
		}
		i := randIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = randIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		o = uint32(i)<<6 + uint32(c2)
		i = randIndex[o]
		c3 := s[3]
		if c3 < 0x80 || 0xC0 <= c3 {
			return 0, 3 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c3), 4
	}
	// Illegal rune
	return 0, 1
}

// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.
// s must start with a full and valid UTF-8 encoded rune.
func (t *randTrie) lookupUnsafe(s []byte) uint8 {
	c0 := s[0]
	if c0 < 0x80 { // is ASCII
		return randValues[c0]
	}
	i := randIndex[c0]
	if c0 < 0xE0 { // 2-byte UTF-8
		return t.lookupValue(uint32(i), s[1])
	}
	i = randIndex[uint32(i)<<6+uint32(s[1])]
	if c0 < 0xF0 { // 3-byte UTF-8
		return t.lookupValue(uint32(i), s[2])
	}
	i = randIndex[uint32(i)<<6+uint32(s[2])]
	if c0 < 0xF8 { // 4-byte UTF-8
		return t.lookupValue(uint32(i), s[3])
	}
	return 0
}

// lookupString returns the trie value for the first UTF-8 encoding in s and
// the width in bytes of this encoding. The size will be 0 if s does not
// hold enough bytes to complete the encoding. len(s) must be greater than 0.
func (t *randTrie) lookupString(s string) (v uint8, sz int) {
	c0 := s[0]
	switch {
	case c0 < 0x80: // is ASCII
		return randValues[c0], 1
	case c0 < 0xC0:
		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
	case c0 < 0xE0: // 2-byte UTF-8
		if len(s) < 2 {
			return 0, 0
		}
		i := randIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c1), 2
	case c0 < 0xF0: // 3-byte UTF-8
		if len(s) < 3 {
			return 0, 0
		}
		i := randIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = randIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c2), 3
	case c0 < 0xF8: // 4-byte UTF-8
		if len(s) < 4 {
			return 0, 0
		}
		i := randIndex[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = randIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		o = uint32(i)<<6 + uint32(c2)
		i = randIndex[o]
		c3 := s[3]
		if c3 < 0x80 || 0xC0 <= c3 {
			return 0, 3 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c3), 4
	}
	// Illegal rune
	return 0, 1
}

// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.
// s must start with a full and valid UTF-8 encoded rune.
func (t *randTrie) lookupStringUnsafe(s string) uint8 {
	c0 := s[0]
	if c0 < 0x80 { // is ASCII
		return randValues[c0]
	}
	i := randIndex[c0]
	if c0 < 0xE0 { // 2-byte UTF-8
		return t.lookupValue(uint32(i), s[1])
	}
	i = randIndex[uint32(i)<<6+uint32(s[1])]
	if c0 < 0xF0 { // 3-byte UTF-8
		return t.lookupValue(uint32(i), s[2])
	}
	i = randIndex[uint32(i)<<6+uint32(s[2])]
	if c0 < 0xF8 { // 4-byte UTF-8
		return t.lookupValue(uint32(i), s[3])
	}
	return 0
}

// randTrie. Total size: 9280 bytes (9.06 KiB). Checksum: 6debd324a8debb8f.
type randTrie struct{}

func newRandTrie(i int) *randTrie {
	return &randTrie{}
}

// lookupValue determines the type of block n and looks up the value for b.
func (t *randTrie) lookupValue(n uint32, b byte) uint8 {
	switch {
	default:
		return uint8(randValues[n<<6+uint32(b)])
	}
}

// randValues: 56 blocks, 3584 entries, 3584 bytes
// Block 3 is the zero block.
var randValues = [3584]uint8{
	// Block 0x0, offset 0x0
	// Block 0x1, offset 0x40
	// Block 0x2, offset 0x80
	// Block 0x3, offset 0xc0
	0xc9: 0x0001,
	// Block 0x4, offset 0x100
	0x100: 0x0001,
	// Block 0x5, offset 0x140
	0x155: 0x0001,
	// Block 0x6, offset 0x180
	0x196: 0x0001,
	// Block 0x7, offset 0x1c0
	0x1ef: 0x0001,
	// Block 0x8, offset 0x200
	0x206: 0x0001,
	// Block 0x9, offset 0x240
	0x258: 0x0001,
	// Block 0xa, offset 0x280
	0x288: 0x0001,
	// Block 0xb, offset 0x2c0
	0x2f2: 0x0001,
	// Block 0xc, offset 0x300
	0x304: 0x0001,
	// Block 0xd, offset 0x340
	0x34b: 0x0001,
	// Block 0xe, offset 0x380
	0x3ba: 0x0001,
	// Block 0xf, offset 0x3c0
	0x3f5: 0x0001,
	// Block 0x10, offset 0x400
	0x41d: 0x0001,
	// Block 0x11, offset 0x440
	0x442: 0x0001,
	// Block 0x12, offset 0x480
	0x4bb: 0x0001,
	// Block 0x13, offset 0x4c0
	0x4e9: 0x0001,
	// Block 0x14, offset 0x500
	0x53e: 0x0001,
	// Block 0x15, offset 0x540
	0x55f: 0x0001,
	// Block 0x16, offset 0x580
	0x5b7: 0x0001,
	// Block 0x17, offset 0x5c0
	0x5d9: 0x0001,
	// Block 0x18, offset 0x600
	0x60e: 0x0001,
	// Block 0x19, offset 0x640
	0x652: 0x0001,
	// Block 0x1a, offset 0x680
	0x68f: 0x0001,
	// Block 0x1b, offset 0x6c0
	0x6dc: 0x0001,
	// Block 0x1c, offset 0x700
	0x703: 0x0001,
	// Block 0x1d, offset 0x740
	0x741: 0x0001,
	// Block 0x1e, offset 0x780
	0x79b: 0x0001,
	// Block 0x1f, offset 0x7c0
	0x7f1: 0x0001,
	// Block 0x20, offset 0x800
	0x833: 0x0001,
	// Block 0x21, offset 0x840
	0x853: 0x0001,
	// Block 0x22, offset 0x880
	0x8a2: 0x0001,
	// Block 0x23, offset 0x8c0
	0x8f8: 0x0001,
	// Block 0x24, offset 0x900
	0x917: 0x0001,
	// Block 0x25, offset 0x940
	0x945: 0x0001,
	// Block 0x26, offset 0x980
	0x99e: 0x0001,
	// Block 0x27, offset 0x9c0
	0x9fd: 0x0001,
	// Block 0x28, offset 0xa00
	0xa0d: 0x0001,
	// Block 0x29, offset 0xa40
	0xa66: 0x0001,
	// Block 0x2a, offset 0xa80
	0xaab: 0x0001,
	// Block 0x2b, offset 0xac0
	0xaea: 0x0001,
	// Block 0x2c, offset 0xb00
	0xb2d: 0x0001,
	// Block 0x2d, offset 0xb40
	0xb54: 0x0001,
	// Block 0x2e, offset 0xb80
	0xb90: 0x0001,
	// Block 0x2f, offset 0xbc0
	0xbe5: 0x0001,
	// Block 0x30, offset 0xc00
	0xc28: 0x0001,
	// Block 0x31, offset 0xc40
	0xc7c: 0x0001,
	// Block 0x32, offset 0xc80
	0xcbf: 0x0001,
	// Block 0x33, offset 0xcc0
	0xcc7: 0x0001,
	// Block 0x34, offset 0xd00
	0xd34: 0x0001,
	// Block 0x35, offset 0xd40
	0xd61: 0x0001,
	// Block 0x36, offset 0xd80
	0xdb9: 0x0001,
	// Block 0x37, offset 0xdc0
	0xdda: 0x0001,
}

// randIndex: 89 blocks, 5696 entries, 5696 bytes
// Block 0 is the zero block.
var randIndex = [5696]uint8{
	// Block 0x0, offset 0x0
	// Block 0x1, offset 0x40
	// Block 0x2, offset 0x80
	// Block 0x3, offset 0xc0
	0xe1: 0x02, 0xe3: 0x03, 0xe4: 0x04,
	0xea: 0x05, 0xeb: 0x06, 0xec: 0x07,
	0xf0: 0x10, 0xf1: 0x24, 0xf2: 0x3d, 0xf3: 0x4f, 0xf4: 0x56,
	// Block 0x4, offset 0x100
	0x107: 0x01,
	// Block 0x5, offset 0x140
	0x16c: 0x02,
	// Block 0x6, offset 0x180
	0x19c: 0x03,
	0x1ae: 0x04,
	// Block 0x7, offset 0x1c0
	0x1d8: 0x05,
	0x1f7: 0x06,
	// Block 0x8, offset 0x200
	0x20c: 0x07,
	// Block 0x9, offset 0x240
	0x24a: 0x08,
	// Block 0xa, offset 0x280
	0x2b6: 0x09,
	// Block 0xb, offset 0x2c0
	0x2d5: 0x0a,
	// Block 0xc, offset 0x300
	0x31a: 0x0b,
	// Block 0xd, offset 0x340
	0x373: 0x0c,
	// Block 0xe, offset 0x380
	0x38b: 0x0d,
	// Block 0xf, offset 0x3c0
	0x3f0: 0x0e,
	// Block 0x10, offset 0x400
	0x433: 0x0f,
	// Block 0x11, offset 0x440
	0x45d: 0x10,
	// Block 0x12, offset 0x480
	0x491: 0x08, 0x494: 0x09, 0x497: 0x0a,
	0x49b: 0x0b, 0x49c: 0x0c,
	0x4a1: 0x0d,
	0x4ad: 0x0e,
	0x4ba: 0x0f,
	// Block 0x13, offset 0x4c0
	0x4c1: 0x11,
	// Block 0x14, offset 0x500
	0x531: 0x12,
	// Block 0x15, offset 0x540
	0x546: 0x13,
	// Block 0x16, offset 0x580
	0x5ab: 0x14,
	// Block 0x17, offset 0x5c0
	0x5d4: 0x11,
	0x5fe: 0x11,
	// Block 0x18, offset 0x600
	0x618: 0x0a,
	// Block 0x19, offset 0x640
	0x65b: 0x15,
	// Block 0x1a, offset 0x680
	0x6a0: 0x16,
	// Block 0x1b, offset 0x6c0
	0x6d2: 0x17,
	0x6f6: 0x18,
	// Block 0x1c, offset 0x700
	0x711: 0x19,
	// Block 0x1d, offset 0x740
	0x768: 0x1a,
	// Block 0x1e, offset 0x780
	0x783: 0x1b,
	// Block 0x1f, offset 0x7c0
	0x7f9: 0x1c,
	// Block 0x20, offset 0x800
	0x831: 0x1d,
	// Block 0x21, offset 0x840
	0x85e: 0x1e,
	// Block 0x22, offset 0x880
	0x898: 0x1f,
	// Block 0x23, offset 0x8c0
	0x8c7: 0x18,
	0x8d5: 0x14,
	0x8f7: 0x20,
	0x8fe: 0x1f,
	// Block 0x24, offset 0x900
	0x905: 0x21,
	// Block 0x25, offset 0x940
	0x966: 0x03,
	// Block 0x26, offset 0x980
	0x981: 0x07, 0x983: 0x11,
	0x989: 0x12, 0x98a: 0x13, 0x98e: 0x14, 0x98f: 0x15,
	0x992: 0x16, 0x995: 0x17, 0x996: 0x18,
	0x998: 0x19, 0x999: 0x1a, 0x99b: 0x1b, 0x99f: 0x1c,
	0x9a3: 0x1d,
	0x9ad: 0x1e, 0x9af: 0x1f,
	0x9b0: 0x20, 0x9b1: 0x21,
	0x9b8: 0x22, 0x9bd: 0x23,
	// Block 0x27, offset 0x9c0
	0x9cd: 0x22,
	// Block 0x28, offset 0xa00
	0xa0c: 0x08,
	// Block 0x29, offset 0xa40
	0xa6f: 0x1c,
	// Block 0x2a, offset 0xa80
	0xa90: 0x1a,
	0xaaf: 0x23,
	// Block 0x2b, offset 0xac0
	0xae3: 0x19,
	0xae8: 0x24,
	0xafc: 0x25,
	// Block 0x2c, offset 0xb00
	0xb13: 0x26,
	// Block 0x2d, offset 0xb40
	0xb67: 0x1c,
	// Block 0x2e, offset 0xb80
	0xb8f: 0x0b,
	// Block 0x2f, offset 0xbc0
	0xbcb: 0x27,
	0xbe7: 0x26,
	// Block 0x30, offset 0xc00
	0xc34: 0x16,
	// Block 0x31, offset 0xc40
	0xc62: 0x03,
	// Block 0x32, offset 0xc80
	0xcbb: 0x12,
	// Block 0x33, offset 0xcc0
	0xcdf: 0x09,
	// Block 0x34, offset 0xd00
	0xd34: 0x0a,
	// Block 0x35, offset 0xd40
	0xd41: 0x1e,
	// Block 0x36, offset 0xd80
	0xd83: 0x28,
	// Block 0x37, offset 0xdc0
	0xdc0: 0x15,
	// Block 0x38, offset 0xe00
	0xe1a: 0x15,
	// Block 0x39, offset 0xe40
	0xe65: 0x29,
	// Block 0x3a, offset 0xe80
	0xe86: 0x1f,
	// Block 0x3b, offset 0xec0
	0xeec: 0x18,
	// Block 0x3c, offset 0xf00
	0xf28: 0x2a,
	// Block 0x3d, offset 0xf40
	0xf53: 0x08,
	// Block 0x3e, offset 0xf80
	0xfa2: 0x2b,
	0xfaa: 0x17,
	// Block 0x3f, offset 0xfc0
	0xfc0: 0x25, 0xfc2: 0x26,
	0xfc9: 0x27, 0xfcd: 0x28, 0xfce: 0x29,
	0xfd5: 0x2a,
	0xfd8: 0x2b, 0xfd9: 0x2c, 0xfdf: 0x2d,
	0xfe1: 0x2e, 0xfe2: 0x2f, 0xfe3: 0x30, 0xfe6: 0x31,
	0xfe9: 0x32, 0xfec: 0x33, 0xfed: 0x34, 0xfef: 0x35,
	0xff1: 0x36, 0xff2: 0x37, 0xff3: 0x38, 0xff4: 0x39,
	0xffa: 0x3a, 0xffc: 0x3b, 0xffe: 0x3c,
	// Block 0x40, offset 0x1000
	0x102c: 0x2c,
	// Block 0x41, offset 0x1040
	0x1074: 0x2c,
	// Block 0x42, offset 0x1080
	0x108c: 0x08,
	0x10a0: 0x2d,
	// Block 0x43, offset 0x10c0
	0x10e8: 0x10,
	// Block 0x44, offset 0x1100
	0x110f: 0x13,
	// Block 0x45, offset 0x1140
	0x114b: 0x2e,
	// Block 0x46, offset 0x1180
	0x118b: 0x23,
	0x119d: 0x0c,
	// Block 0x47, offset 0x11c0
	0x11c3: 0x12,
	0x11f9: 0x0f,
	// Block 0x48, offset 0x1200
	0x121e: 0x1b,
	// Block 0x49, offset 0x1240
	0x1270: 0x2f,
	// Block 0x4a, offset 0x1280
	0x128a: 0x1b,
	0x12a7: 0x02,
	// Block 0x4b, offset 0x12c0
	0x12fb: 0x14,
	// Block 0x4c, offset 0x1300
	0x1333: 0x30,
	// Block 0x4d, offset 0x1340
	0x134d: 0x31,
	// Block 0x4e, offset 0x1380
	0x138e: 0x15,
	// Block 0x4f, offset 0x13c0
	0x13f4: 0x32,
	// Block 0x50, offset 0x1400
	0x141b: 0x33,
	// Block 0x51, offset 0x1440
	0x1448: 0x3e, 0x1449: 0x3f, 0x144a: 0x40, 0x144f: 0x41,
	0x1459: 0x42, 0x145c: 0x43, 0x145e: 0x44, 0x145f: 0x45,
	0x1468: 0x46, 0x1469: 0x47, 0x146c: 0x48, 0x146d: 0x49, 0x146e: 0x4a,
	0x1472: 0x4b, 0x1473: 0x4c,
	0x1479: 0x4d, 0x147b: 0x4e,
	// Block 0x52, offset 0x1480
	0x1480: 0x34,
	0x1499: 0x11,
	0x14b6: 0x2c,
	// Block 0x53, offset 0x14c0
	0x14e4: 0x0d,
	// Block 0x54, offset 0x1500
	0x1527: 0x08,
	// Block 0x55, offset 0x1540
	0x1555: 0x2b,
	// Block 0x56, offset 0x1580
	0x15b2: 0x35,
	// Block 0x57, offset 0x15c0
	0x15f2: 0x1c, 0x15f4: 0x29,
	// Block 0x58, offset 0x1600
	0x1600: 0x50, 0x1603: 0x51,
	0x1608: 0x52, 0x160a: 0x53, 0x160d: 0x54, 0x160e: 0x55,
}

// lookup returns the trie value for the first UTF-8 encoding in s and
// the width in bytes of this encoding. The size will be 0 if s does not
// hold enough bytes to complete the encoding. len(s) must be greater than 0.
func (t *multiTrie) lookup(s []byte) (v uint64, sz int) {
	c0 := s[0]
	switch {
	case c0 < 0x80: // is ASCII
		return t.ascii[c0], 1
	case c0 < 0xC0:
		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
	case c0 < 0xE0: // 2-byte UTF-8
		if len(s) < 2 {
			return 0, 0
		}
		i := t.utf8Start[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c1), 2
	case c0 < 0xF0: // 3-byte UTF-8
		if len(s) < 3 {
			return 0, 0
		}
		i := t.utf8Start[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = multiIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c2), 3
	case c0 < 0xF8: // 4-byte UTF-8
		if len(s) < 4 {
			return 0, 0
		}
		i := t.utf8Start[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = multiIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		o = uint32(i)<<6 + uint32(c2)
		i = multiIndex[o]
		c3 := s[3]
		if c3 < 0x80 || 0xC0 <= c3 {
			return 0, 3 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c3), 4
	}
	// Illegal rune
	return 0, 1
}

// lookupUnsafe returns the trie value for the first UTF-8 encoding in s.
// s must start with a full and valid UTF-8 encoded rune.
func (t *multiTrie) lookupUnsafe(s []byte) uint64 {
	c0 := s[0]
	if c0 < 0x80 { // is ASCII
		return t.ascii[c0]
	}
	i := t.utf8Start[c0]
	if c0 < 0xE0 { // 2-byte UTF-8
		return t.lookupValue(uint32(i), s[1])
	}
	i = multiIndex[uint32(i)<<6+uint32(s[1])]
	if c0 < 0xF0 { // 3-byte UTF-8
		return t.lookupValue(uint32(i), s[2])
	}
	i = multiIndex[uint32(i)<<6+uint32(s[2])]
	if c0 < 0xF8 { // 4-byte UTF-8
		return t.lookupValue(uint32(i), s[3])
	}
	return 0
}

// lookupString returns the trie value for the first UTF-8 encoding in s and
// the width in bytes of this encoding. The size will be 0 if s does not
// hold enough bytes to complete the encoding. len(s) must be greater than 0.
func (t *multiTrie) lookupString(s string) (v uint64, sz int) {
	c0 := s[0]
	switch {
	case c0 < 0x80: // is ASCII
		return t.ascii[c0], 1
	case c0 < 0xC0:
		return 0, 1 // Illegal UTF-8: not a starter, not ASCII.
	case c0 < 0xE0: // 2-byte UTF-8
		if len(s) < 2 {
			return 0, 0
		}
		i := t.utf8Start[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c1), 2
	case c0 < 0xF0: // 3-byte UTF-8
		if len(s) < 3 {
			return 0, 0
		}
		i := t.utf8Start[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = multiIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c2), 3
	case c0 < 0xF8: // 4-byte UTF-8
		if len(s) < 4 {
			return 0, 0
		}
		i := t.utf8Start[c0]
		c1 := s[1]
		if c1 < 0x80 || 0xC0 <= c1 {
			return 0, 1 // Illegal UTF-8: not a continuation byte.
		}
		o := uint32(i)<<6 + uint32(c1)
		i = multiIndex[o]
		c2 := s[2]
		if c2 < 0x80 || 0xC0 <= c2 {
			return 0, 2 // Illegal UTF-8: not a continuation byte.
		}
		o = uint32(i)<<6 + uint32(c2)
		i = multiIndex[o]
		c3 := s[3]
		if c3 < 0x80 || 0xC0 <= c3 {
			return 0, 3 // Illegal UTF-8: not a continuation byte.
		}
		return t.lookupValue(uint32(i), c3), 4
	}
	// Illegal rune
	return 0, 1
}

// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s.
// s must start with a full and valid UTF-8 encoded rune.
func (t *multiTrie) lookupStringUnsafe(s string) uint64 {
	c0 := s[0]
	if c0 < 0x80 { // is ASCII
		return t.ascii[c0]
	}
	i := t.utf8Start[c0]
	if c0 < 0xE0 { // 2-byte UTF-8
		return t.lookupValue(uint32(i), s[1])
	}
	i = multiIndex[uint32(i)<<6+uint32(s[1])]
	if c0 < 0xF0 { // 3-byte UTF-8
		return t.lookupValue(uint32(i), s[2])
	}
	i = multiIndex[uint32(i)<<6+uint32(s[2])]
	if c0 < 0xF8 { // 4-byte UTF-8
		return t.lookupValue(uint32(i), s[3])
	}
	return 0
}

// multiTrie. Total size: 18250 bytes (17.82 KiB). Checksum: a69a609d8696aa5e.
type multiTrie struct {
	ascii     []uint64 // index for ASCII bytes
	utf8Start []uint8  // index for UTF-8 bytes >= 0xC0
}

func newMultiTrie(i int) *multiTrie {
	h := multiTrieHandles[i]
	return &multiTrie{multiValues[uint32(h.ascii)<<6:], multiIndex[uint32(h.multi)<<6:]}
}

type multiTrieHandle struct {
	ascii, multi uint8
}

// multiTrieHandles: 5 handles, 10 bytes
var multiTrieHandles = [5]multiTrieHandle{
	{0, 0},   // 8c1e77823143d35c: all
	{0, 23},  // 8fb58ff8243b45b0: ASCII only
	{0, 23},  // 8fb58ff8243b45b0: ASCII only 2
	{0, 24},  // 2ccc43994f11046f: BMP only
	{30, 25}, // ce448591bdcb4733: No BMP
}

// lookupValue determines the type of block n and looks up the value for b.
func (t *multiTrie) lookupValue(n uint32, b byte) uint64 {
	switch {
	default:
		return uint64(multiValues[n<<6+uint32(b)])
	}
}

// multiValues: 32 blocks, 2048 entries, 16384 bytes
// Block 3 is the zero block.
var multiValues = [2048]uint64{
	// Block 0x0, offset 0x0
	0x03: 0x6e361699800b9fb8, 0x04: 0x52d3935a34f6f0b, 0x05: 0x2948319393e7ef10,
	0x07: 0x20f03b006704f663, 0x08: 0x6c15c0732bb2495f, 0x09: 0xe54e2c59d953551,
	0x0f: 0x33d8a825807d8037, 0x10: 0x6ecd93cb12168b92, 0x11: 0x6a81c9c0ce86e884,
	0x1f: 0xa03e77aac8be79b, 0x20: 0x28591d0e7e486efa, 0x21: 0x716fa3bc398dec8,
	0x3f: 0x4fd3bcfa72bce8b0,
	// Block 0x1, offset 0x40
	0x40: 0x3cbaef3db8ba5f12, 0x41: 0x2d262347c1f56357,
	0x7f: 0x782caa2d25a418a9,
	// Block 0x2, offset 0x80
	// Block 0x3, offset 0xc0
	0xc0: 0x6bbd1f937b1ff5d2, 0xc1: 0x732e23088d2eb8a4,
	// Block 0x4, offset 0x100
	0x13f: 0x56f8c4c82f5962dc,
	// Block 0x5, offset 0x140
	0x140: 0x57dc4544729a5da2, 0x141: 0x2f62f9cd307ffa0d,
	// Block 0x6, offset 0x180
	0x1bf: 0x7bf4d0ebf302a088,
	// Block 0x7, offset 0x1c0
	0x1c0: 0x1f0d67f249e59931, 0x1c1: 0x3011def73aa550c7,
	// Block 0x8, offset 0x200
	0x23f: 0x5de81c1dff6bf29d,
	// Block 0x9, offset 0x240
	0x240: 0x752c035737b825e8, 0x241: 0x1e793399081e3bb3,
	// Block 0xa, offset 0x280
	0x2bf: 0x6a28f01979cbf059,
	// Block 0xb, offset 0x2c0
	0x2c0: 0x373a4b0f2cbd4c74, 0x2c1: 0x4fd2c288683b767c,
	// Block 0xc, offset 0x300
	0x33f: 0x5a10ffa9e29184fb,
	// Block 0xd, offset 0x340
	0x340: 0x700f9bdb53fff6a5, 0x341: 0xcde93df0427eb79,
	// Block 0xe, offset 0x380
	0x3bf: 0x74071288fff39c76,
	// Block 0xf, offset 0x3c0
	0x3c0: 0x481fc2f510e5268a, 0x3c1: 0x7565c28164204849,
	// Block 0x10, offset 0x400
	0x43f: 0x5676a62fd49c6bec,
	// Block 0x11, offset 0x440
	0x440: 0x2f2d15776cbafc6b, 0x441: 0x4c55e8dc0ff11a3f,
	// Block 0x12, offset 0x480
	0x4bf: 0x69d6f0fe711fafc9,
	// Block 0x13, offset 0x4c0
	0x4c0: 0x33181de28cfb062d, 0x4c1: 0x2ef3adc6bb2f2d02,
	// Block 0x14, offset 0x500
	0x53f: 0xe03b31814c95f8b,
	// Block 0x15, offset 0x540
	0x540: 0x3bf6dc9a1c115603, 0x541: 0x6984ec9b7f51f7fc,
	// Block 0x16, offset 0x580
	0x5bf: 0x3c02ea92fb168559,
	// Block 0x17, offset 0x5c0
	0x5c0: 0x1badfe42e7629494, 0x5c1: 0x6dc4a554005f7645,
	// Block 0x18, offset 0x600
	0x63f: 0x3bb2ed2a72748f4b,
	// Block 0x19, offset 0x640
	0x640: 0x291354cd6767ec10, 0x641: 0x2c3a4715e3c070d6,
	// Block 0x1a, offset 0x680
	0x6bf: 0x352711cfb7236418,
	// Block 0x1b, offset 0x6c0
	0x6c0: 0x3a59d34fb8bceda, 0x6c1: 0x5e90d8ebedd64fa1,
	// Block 0x1c, offset 0x700
	0x73f: 0x7191a77b28d23110,
	// Block 0x1d, offset 0x740
	0x740: 0x4ca7f0c1623423d8, 0x741: 0x4f7156d996e2d0de,
	// Block 0x1e, offset 0x780
	// Block 0x1f, offset 0x7c0
}

// multiIndex: 29 blocks, 1856 entries, 1856 bytes
// Block 0 is the zero block.
var multiIndex = [1856]uint8{
	// Block 0x0, offset 0x0
	// Block 0x1, offset 0x40
	// Block 0x2, offset 0x80
	// Block 0x3, offset 0xc0
	0xc2: 0x01, 0xc3: 0x02, 0xc4: 0x03, 0xc7: 0x04,
	0xc8: 0x05, 0xcf: 0x06,
	0xd0: 0x07,
	0xdf: 0x08,
	0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, 0xe7: 0x07,
	0xe8: 0x08, 0xef: 0x09,
	0xf0: 0x0e, 0xf1: 0x11, 0xf2: 0x13, 0xf3: 0x15, 0xf4: 0x17,
	// Block 0x4, offset 0x100
	0x120: 0x09,
	0x13f: 0x0a,
	// Block 0x5, offset 0x140
	0x140: 0x0b,
	0x17f: 0x0c,
	// Block 0x6, offset 0x180
	0x180: 0x0d,
	// Block 0x7, offset 0x1c0
	0x1ff: 0x0e,
	// Block 0x8, offset 0x200
	0x200: 0x0f,
	// Block 0x9, offset 0x240
	0x27f: 0x10,
	// Block 0xa, offset 0x280
	0x280: 0x11,
	// Block 0xb, offset 0x2c0
	0x2ff: 0x12,
	// Block 0xc, offset 0x300
	0x300: 0x13,
	// Block 0xd, offset 0x340
	0x37f: 0x14,
	// Block 0xe, offset 0x380
	0x380: 0x15,
	// Block 0xf, offset 0x3c0
	0x3ff: 0x16,
	// Block 0x10, offset 0x400
	0x410: 0x0a,
	0x41f: 0x0b,
	0x420: 0x0c,
	0x43f: 0x0d,
	// Block 0x11, offset 0x440
	0x440: 0x17,
	// Block 0x12, offset 0x480
	0x4bf: 0x18,
	// Block 0x13, offset 0x4c0
	0x4c0: 0x0f,
	0x4ff: 0x10,
	// Block 0x14, offset 0x500
	0x500: 0x19,
	// Block 0x15, offset 0x540
	0x540: 0x12,
	// Block 0x16, offset 0x580
	0x5bf: 0x1a,
	// Block 0x17, offset 0x5c0
	0x5ff: 0x14,
	// Block 0x18, offset 0x600
	0x600: 0x1b,
	// Block 0x19, offset 0x640
	0x640: 0x16,
	// Block 0x1a, offset 0x680
	// Block 0x1b, offset 0x6c0
	0x6c2: 0x01, 0x6c3: 0x02, 0x6c4: 0x03, 0x6c7: 0x04,
	0x6c8: 0x05, 0x6cf: 0x06,
	0x6d0: 0x07,
	0x6df: 0x08,
	0x6e0: 0x02, 0x6e1: 0x03, 0x6e2: 0x04, 0x6e3: 0x05, 0x6e4: 0x06, 0x6e7: 0x07,
	0x6e8: 0x08, 0x6ef: 0x09,
	// Block 0x1c, offset 0x700
	0x730: 0x0e, 0x731: 0x11, 0x732: 0x13, 0x733: 0x15, 0x734: 0x17,
}
