Browse Source

Initial import.

Works, is timing side channel safe, but is not vectorized.
Yawning Angel 3 years ago
commit
27786e9054
12 changed files with 6780 additions and 0 deletions
  1. 2 0
      .gitignore
  2. 122 0
      LICENSE
  3. 30 0
      burn_safe.go
  4. 60 0
      burn_test.go
  5. 34 0
      burn_unsafe.go
  6. 214 0
      chacha20.go
  7. 250 0
      chacha20_test.go
  8. 122 0
      hs1.go
  9. 302 0
      hs1siv.go
  10. 5482 0
      hs1siv_kat_test.go
  11. 151 0
      hs1siv_test.go
  12. 11 0
      unsafe_linkname.s

+ 2 - 0
.gitignore

@@ -0,0 +1,2 @@
+*.swp
+*~

+ 122 - 0
LICENSE

@@ -0,0 +1,122 @@
+Creative Commons Legal Code
+
+CC0 1.0 Universal
+
+    CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
+    LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
+    ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
+    INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
+    REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
+    PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
+    THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
+    HEREUNDER.
+
+Statement of Purpose
+
+The laws of most jurisdictions throughout the world automatically confer
+exclusive Copyright and Related Rights (defined below) upon the creator
+and subsequent owner(s) (each and all, an "owner") of an original work of
+authorship and/or a database (each, a "Work").
+
+Certain owners wish to permanently relinquish those rights to a Work for
+the purpose of contributing to a commons of creative, cultural and
+scientific works ("Commons") that the public can reliably and without fear
+of later claims of infringement build upon, modify, incorporate in other
+works, reuse and redistribute as freely as possible in any form whatsoever
+and for any purposes, including without limitation commercial purposes.
+These owners may contribute to the Commons to promote the ideal of a free
+culture and the further production of creative, cultural and scientific
+works, or to gain reputation or greater distribution for their Work in
+part through the use and efforts of others.
+
+For these and/or other purposes and motivations, and without any
+expectation of additional consideration or compensation, the person
+associating CC0 with a Work (the "Affirmer"), to the extent that he or she
+is an owner of Copyright and Related Rights in the Work, voluntarily
+elects to apply CC0 to the Work and publicly distribute the Work under its
+terms, with knowledge of his or her Copyright and Related Rights in the
+Work and the meaning and intended legal effect of CC0 on those rights.
+
+1. Copyright and Related Rights. A Work made available under CC0 may be
+protected by copyright and related or neighboring rights ("Copyright and
+Related Rights"). Copyright and Related Rights include, but are not
+limited to, the following:
+
+  i. the right to reproduce, adapt, distribute, perform, display,
+     communicate, and translate a Work;
+ ii. moral rights retained by the original author(s) and/or performer(s);
+iii. publicity and privacy rights pertaining to a person's image or
+     likeness depicted in a Work;
+ iv. rights protecting against unfair competition in regards to a Work,
+     subject to the limitations in paragraph 4(a), below;
+  v. rights protecting the extraction, dissemination, use and reuse of data
+     in a Work;
+ vi. database rights (such as those arising under Directive 96/9/EC of the
+     European Parliament and of the Council of 11 March 1996 on the legal
+     protection of databases, and under any national implementation
+     thereof, including any amended or successor version of such
+     directive); and
+vii. other similar, equivalent or corresponding rights throughout the
+     world based on applicable law or treaty, and any national
+     implementations thereof.
+
+2. Waiver. To the greatest extent permitted by, but not in contravention
+of, applicable law, Affirmer hereby overtly, fully, permanently,
+irrevocably and unconditionally waives, abandons, and surrenders all of
+Affirmer's Copyright and Related Rights and associated claims and causes
+of action, whether now known or unknown (including existing as well as
+future claims and causes of action), in the Work (i) in all territories
+worldwide, (ii) for the maximum duration provided by applicable law or
+treaty (including future time extensions), (iii) in any current or future
+medium and for any number of copies, and (iv) for any purpose whatsoever,
+including without limitation commercial, advertising or promotional
+purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
+member of the public at large and to the detriment of Affirmer's heirs and
+successors, fully intending that such Waiver shall not be subject to
+revocation, rescission, cancellation, termination, or any other legal or
+equitable action to disrupt the quiet enjoyment of the Work by the public
+as contemplated by Affirmer's express Statement of Purpose.
+
+3. Public License Fallback. Should any part of the Waiver for any reason
+be judged legally invalid or ineffective under applicable law, then the
+Waiver shall be preserved to the maximum extent permitted taking into
+account Affirmer's express Statement of Purpose. In addition, to the
+extent the Waiver is so judged Affirmer hereby grants to each affected
+person a royalty-free, non transferable, non sublicensable, non exclusive,
+irrevocable and unconditional license to exercise Affirmer's Copyright and
+Related Rights in the Work (i) in all territories worldwide, (ii) for the
+maximum duration provided by applicable law or treaty (including future
+time extensions), (iii) in any current or future medium and for any number
+of copies, and (iv) for any purpose whatsoever, including without
+limitation commercial, advertising or promotional purposes (the
+"License"). The License shall be deemed effective as of the date CC0 was
+applied by Affirmer to the Work. Should any part of the License for any
+reason be judged legally invalid or ineffective under applicable law, such
+partial invalidity or ineffectiveness shall not invalidate the remainder
+of the License, and in such case Affirmer hereby affirms that he or she
+will not (i) exercise any of his or her remaining Copyright and Related
+Rights in the Work or (ii) assert any associated claims and causes of
+action with respect to the Work, in either case contrary to Affirmer's
+express Statement of Purpose.
+
+4. Limitations and Disclaimers.
+
+ a. No trademark or patent rights held by Affirmer are waived, abandoned,
+    surrendered, licensed or otherwise affected by this document.
+ b. Affirmer offers the Work as-is and makes no representations or
+    warranties of any kind concerning the Work, express, implied,
+    statutory or otherwise, including without limitation warranties of
+    title, merchantability, fitness for a particular purpose, non
+    infringement, or the absence of latent or other defects, accuracy, or
+    the present or absence of errors, whether or not discoverable, all to
+    the greatest extent permissible under applicable law.
+ c. Affirmer disclaims responsibility for clearing rights of other persons
+    that may apply to the Work or any use thereof, including without
+    limitation any person's Copyright and Related Rights in the Work.
+    Further, Affirmer disclaims responsibility for obtaining any necessary
+    consents, permissions or other rights required for any use of the
+    Work.
+ d. Affirmer understands and acknowledges that Creative Commons is not a
+    party to this document and has no duty or obligation with respect to
+    this CC0 or use of the Work.
+

+ 30 - 0
burn_safe.go

@@ -0,0 +1,30 @@
+// burn_safe.go - burn (unsafe not available)
+//
+// To the extent possible under law, Yawning Angel has waived all copyright
+// and related or neighboring rights to the software, using the Creative
+// Commons "CC0" public domain dedication. See LICENSE or
+// <http://creativecommons.org/publicdomain/zero/1.0/> for full details.
+
+// +build noasm appengine
+
+package hs1siv
+
+import "unsafe"
+
+func burnBytes(b []byte) {
+	for i := range b {
+		b[i] = 0
+	}
+}
+
+func burnUint64s(b []uint64) {
+	for i := range b {
+		b[i] = 0
+	}
+}
+
+func burnUint32s(b []uint32) {
+	for i := range b {
+		b[i] = 0
+	}
+}

+ 60 - 0
burn_test.go

@@ -0,0 +1,60 @@
+// burn_test.go - burn tests
+//
+// To the extent possible under law, Yawning Angel has waived all copyright
+// and related or neighboring rights to the software, using the Creative
+// Commons "CC0" public domain dedication. See LICENSE or
+// <http://creativecommons.org/publicdomain/zero/1.0/> for full details.
+
+package hs1siv
+
+import (
+	"crypto/rand"
+	"encoding/binary"
+	"testing"
+
+	"github.com/stretchr/testify/require"
+)
+
+// While it seems somewhat silly to test memset, the unsafe implementation
+// uses trickery to reach into the runtime library, so it's worth exercising.
+
+func TestBurnBytes(t *testing.T) {
+	require := require.New(t)
+
+	var buf [1024]byte
+	require.Zero(buf, "buf: Before random read")
+	_, err := rand.Read(buf[:])
+	require.NoError(err, "rand.Read()")
+	require.NotZero(buf, "buf: After random read")
+
+	burnBytes(buf[:])
+	require.Zero(buf, "buf: After burnBytes()")
+}
+
+func TestBurnUint64s(t *testing.T) {
+	require := require.New(t)
+
+	var buf [1024]uint64
+	require.Zero(buf, "buf: Before random read")
+
+	err := binary.Read(rand.Reader, binary.LittleEndian, &buf)
+	require.NoError(err, "binary.Read(rand.Reader)")
+	require.NotZero(buf, "buf: After random read")
+
+	burnUint64s(buf[:])
+	require.Zero(buf, "buf: After burnUint64s()")
+}
+
+func TestBurnUint32s(t *testing.T) {
+	require := require.New(t)
+
+	var buf [1024]uint32
+	require.Zero(buf, "buf: Before random read")
+
+	err := binary.Read(rand.Reader, binary.LittleEndian, &buf)
+	require.NoError(err, "binary.Read(rand.Reader)")
+	require.NotZero(buf, "buf: After random read")
+
+	burnUint32s(buf[:])
+	require.Zero(buf, "buf: After burnUint32s()")
+}

+ 34 - 0
burn_unsafe.go

@@ -0,0 +1,34 @@
+// burn_unsafe.go - burn (unsafe available)
+//
+// To the extent possible under law, Yawning Angel has waived all copyright
+// and related or neighboring rights to the software, using the Creative
+// Commons "CC0" public domain dedication. See LICENSE or
+// <http://creativecommons.org/publicdomain/zero/1.0/> for full details.
+
+// +build !noasm,!appengine
+
+package hs1siv
+
+import "unsafe"
+
+//go:noescape
+//go:linkname memclrNoHeapPointers runtime.memclrNoHeapPointers
+func memclrNoHeapPointers(ptr unsafe.Pointer, n uintptr)
+
+// Note: The compiler in theory always optimizes the "safe" variant of this
+// which uses a naive for loop to the unsafe equivalent, but there's no reason
+// to trust it.
+
+func burnBytes(b []byte) {
+	memclrNoHeapPointers(unsafe.Pointer(&b[0]), uintptr(len(b)))
+}
+
+func burnUint64s(b []uint64) {
+	l := len(b) * 8
+	memclrNoHeapPointers(unsafe.Pointer(&b[0]), uintptr(l))
+}
+
+func burnUint32s(b []uint32) {
+	l := len(b) * 4
+	memclrNoHeapPointers(unsafe.Pointer(&b[0]), uintptr(l))
+}

+ 214 - 0
chacha20.go

@@ -0,0 +1,214 @@
+// chacha20.go - RFC 7539 ChaCha20
+//
+// To the extent possible under law, Yawning Angel has waived all copyright
+// and related or neighboring rights to the software, using the Creative
+// Commons "CC0" public domain dedication. See LICENSE or
+// <http://creativecommons.org/publicdomain/zero/1.0/> for full details.
+
+package hs1siv
+
+import (
+	"encoding/binary"
+	"math/bits"
+)
+
+const (
+	sigma0 = 0x61707865
+	sigma1 = 0x3320646e
+	sigma2 = 0x79622d32
+	sigma3 = 0x6b206574
+
+	chachaKeySize   = 32
+	chachaNonceSize = 12
+	chachaStateSize = 16
+	chachaBlockSize = 64
+	chachaRounds    = 20 // Parameter r
+)
+
+type chachaState [chachaStateSize]uint32
+
+func chacha20(key, nonce, in, out []byte, initialCounter uint32) {
+	if len(key) != chachaKeySize {
+		panic("hs1siv: invalid chacha key size")
+	}
+	if len(nonce) != chachaNonceSize {
+		panic("hs1siv: invalid chacha nonce size")
+	}
+
+	if len(out) < len(in) {
+		in = in[:len(out)]
+	}
+
+	_, _ = key[31], nonce[11] // Bounds check elimination.
+	s := &chachaState{
+		sigma0, sigma1, sigma2, sigma3,
+		binary.LittleEndian.Uint32(key[0:4]),
+		binary.LittleEndian.Uint32(key[4:8]),
+		binary.LittleEndian.Uint32(key[8:12]),
+		binary.LittleEndian.Uint32(key[12:16]),
+		binary.LittleEndian.Uint32(key[16:20]),
+		binary.LittleEndian.Uint32(key[20:24]),
+		binary.LittleEndian.Uint32(key[24:28]),
+		binary.LittleEndian.Uint32(key[28:32]),
+		initialCounter,
+		binary.LittleEndian.Uint32(nonce[0:4]),
+		binary.LittleEndian.Uint32(nonce[4:8]),
+		binary.LittleEndian.Uint32(nonce[8:12]),
+	}
+
+	// Process full blocks.
+	off, inLen := 0, len(in)
+	if fullBlocks := inLen / chachaBlockSize; fullBlocks > 0 {
+		chachaBlocksRef(s, in, out, fullBlocks)
+		off += fullBlocks * chachaBlockSize
+		inLen -= fullBlocks * chachaBlockSize
+	}
+
+	// Process the partial block, if any.
+	if inLen > 0 {
+		var partial [chachaBlockSize]byte
+		copy(partial[:], in[off:])
+		chachaBlocksRef(s, partial[:], partial[:], 1)
+		copy(out[off:], partial[:])
+	}
+
+	// Purge the state off the stack.
+	burnUint32s(s[:])
+}
+
+func chachaBlocksRef(s *chachaState, in, out []byte, nrBlocks int) {
+	s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15 := s[0], s[1], s[2], s[3], s[4], s[5], s[6], s[7], s[8], s[9], s[10], s[11], s[12], s[13], s[14], s[15]
+
+	for nrBlocks > 0 {
+		x0, x1, x2, x3, x4, x5, x6, x7, x8, x9, x10, x11, x12, x13, x14, x15 := s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14, s15
+
+		for i := chachaRounds; i > 0; i -= 2 {
+			x0 += x4
+			x12 ^= x0
+			x12 = bits.RotateLeft32(x12, 16)
+			x8 += x12
+			x4 ^= x8
+			x4 = bits.RotateLeft32(x4, 12)
+			x0 += x4
+			x12 ^= x0
+			x12 = bits.RotateLeft32(x12, 8)
+			x8 += x12
+			x4 ^= x8
+			x4 = bits.RotateLeft32(x4, 7)
+
+			x1 += x5
+			x13 ^= x1
+			x13 = bits.RotateLeft32(x13, 16)
+			x9 += x13
+			x5 ^= x9
+			x5 = bits.RotateLeft32(x5, 12)
+			x1 += x5
+			x13 ^= x1
+			x13 = bits.RotateLeft32(x13, 8)
+			x9 += x13
+			x5 ^= x9
+			x5 = bits.RotateLeft32(x5, 7)
+
+			x2 += x6
+			x14 ^= x2
+			x14 = bits.RotateLeft32(x14, 16)
+			x10 += x14
+			x6 ^= x10
+			x6 = bits.RotateLeft32(x6, 12)
+			x2 += x6
+			x14 ^= x2
+			x14 = bits.RotateLeft32(x14, 8)
+			x10 += x14
+			x6 ^= x10
+			x6 = bits.RotateLeft32(x6, 7)
+
+			x3 += x7
+			x15 ^= x3
+			x15 = bits.RotateLeft32(x15, 16)
+			x11 += x15
+			x7 ^= x11
+			x7 = bits.RotateLeft32(x7, 12)
+			x3 += x7
+			x15 ^= x3
+			x15 = bits.RotateLeft32(x15, 8)
+			x11 += x15
+			x7 ^= x11
+			x7 = bits.RotateLeft32(x7, 7)
+
+			x0 += x5
+			x15 ^= x0
+			x15 = bits.RotateLeft32(x15, 16)
+			x10 += x15
+			x5 ^= x10
+			x5 = bits.RotateLeft32(x5, 12)
+			x0 += x5
+			x15 ^= x0
+			x15 = bits.RotateLeft32(x15, 8)
+			x10 += x15
+			x5 ^= x10
+			x5 = bits.RotateLeft32(x5, 7)
+
+			x1 += x6
+			x12 ^= x1
+			x12 = bits.RotateLeft32(x12, 16)
+			x11 += x12
+			x6 ^= x11
+			x6 = bits.RotateLeft32(x6, 12)
+			x1 += x6
+			x12 ^= x1
+			x12 = bits.RotateLeft32(x12, 8)
+			x11 += x12
+			x6 ^= x11
+			x6 = bits.RotateLeft32(x6, 7)
+
+			x2 += x7
+			x13 ^= x2
+			x13 = bits.RotateLeft32(x13, 16)
+			x8 += x13
+			x7 ^= x8
+			x7 = bits.RotateLeft32(x7, 12)
+			x2 += x7
+			x13 ^= x2
+			x13 = bits.RotateLeft32(x13, 8)
+			x8 += x13
+			x7 ^= x8
+			x7 = bits.RotateLeft32(x7, 7)
+
+			x3 += x4
+			x14 ^= x3
+			x14 = bits.RotateLeft32(x14, 16)
+			x9 += x14
+			x4 ^= x9
+			x4 = bits.RotateLeft32(x4, 12)
+			x3 += x4
+			x14 ^= x3
+			x14 = bits.RotateLeft32(x14, 8)
+			x9 += x14
+			x4 ^= x9
+			x4 = bits.RotateLeft32(x4, 7)
+		}
+
+		_, _ = in[chachaBlockSize-1], out[chachaBlockSize-1] // Bounds check elimination.
+		binary.LittleEndian.PutUint32(out[0:4], binary.LittleEndian.Uint32(in[0:4])^(x0+s0))
+		binary.LittleEndian.PutUint32(out[4:8], binary.LittleEndian.Uint32(in[4:8])^(x1+s1))
+		binary.LittleEndian.PutUint32(out[8:12], binary.LittleEndian.Uint32(in[8:12])^(x2+s2))
+		binary.LittleEndian.PutUint32(out[12:16], binary.LittleEndian.Uint32(in[12:16])^(x3+s3))
+		binary.LittleEndian.PutUint32(out[16:20], binary.LittleEndian.Uint32(in[16:20])^(x4+s4))
+		binary.LittleEndian.PutUint32(out[20:24], binary.LittleEndian.Uint32(in[20:24])^(x5+s5))
+		binary.LittleEndian.PutUint32(out[24:28], binary.LittleEndian.Uint32(in[24:28])^(x6+s6))
+		binary.LittleEndian.PutUint32(out[28:32], binary.LittleEndian.Uint32(in[28:32])^(x7+s7))
+		binary.LittleEndian.PutUint32(out[32:36], binary.LittleEndian.Uint32(in[32:36])^(x8+s8))
+		binary.LittleEndian.PutUint32(out[36:40], binary.LittleEndian.Uint32(in[36:40])^(x9+s9))
+		binary.LittleEndian.PutUint32(out[40:44], binary.LittleEndian.Uint32(in[40:44])^(x10+s10))
+		binary.LittleEndian.PutUint32(out[44:48], binary.LittleEndian.Uint32(in[44:48])^(x11+s11))
+		binary.LittleEndian.PutUint32(out[48:52], binary.LittleEndian.Uint32(in[48:52])^(x12+s12))
+		binary.LittleEndian.PutUint32(out[52:56], binary.LittleEndian.Uint32(in[52:56])^(x13+s13))
+		binary.LittleEndian.PutUint32(out[56:60], binary.LittleEndian.Uint32(in[56:60])^(x14+s14))
+		binary.LittleEndian.PutUint32(out[60:64], binary.LittleEndian.Uint32(in[60:64])^(x15+s15))
+
+		in, out = in[chachaBlockSize:], out[chachaBlockSize:]
+		s12, nrBlocks = s12+1, nrBlocks-1
+	}
+
+	s[12] = s12
+}

+ 250 - 0
chacha20_test.go

@@ -0,0 +1,250 @@
+// chacha20_test.go - RFC 7539 ChaCha20 tests
+//
+// To the extent possible under law, Yawning Angel has waived all copyright
+// and related or neighboring rights to the software, using the Creative
+// Commons "CC0" public domain dedication. See LICENSE or
+// <http://creativecommons.org/publicdomain/zero/1.0/> for full details.
+
+package hs1siv
+
+import (
+	"fmt"
+	"testing"
+
+	"github.com/stretchr/testify/require"
+)
+
+func TestChaCha20(t *testing.T) {
+	// Eventually this will go away, and be called per implementation.
+	doTestChaCha20(t)
+}
+
+var rfc7539TestVectors = []struct {
+	key            []byte
+	nonce          []byte
+	plaintext      []byte
+	ciphertext     []byte
+	initialCounter uint32
+}{
+	{
+		[]byte{
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		},
+		[]byte{
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00,
+		},
+		[]byte{
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+		},
+		[]byte{
+			0x76, 0xb8, 0xe0, 0xad, 0xa0, 0xf1, 0x3d, 0x90,
+			0x40, 0x5d, 0x6a, 0xe5, 0x53, 0x86, 0xbd, 0x28,
+			0xbd, 0xd2, 0x19, 0xb8, 0xa0, 0x8d, 0xed, 0x1a,
+			0xa8, 0x36, 0xef, 0xcc, 0x8b, 0x77, 0x0d, 0xc7,
+			0xda, 0x41, 0x59, 0x7c, 0x51, 0x57, 0x48, 0x8d,
+			0x77, 0x24, 0xe0, 0x3f, 0xb8, 0xd8, 0x4a, 0x37,
+			0x6a, 0x43, 0xb8, 0xf4, 0x15, 0x18, 0xa1, 0x1c,
+			0xc3, 0x87, 0xb6, 0x69, 0xb2, 0xee, 0x65, 0x86,
+		},
+		0,
+	},
+	{
+		[]byte{
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01,
+		},
+		[]byte{
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x02,
+		},
+		[]byte{
+			0x41, 0x6e, 0x79, 0x20, 0x73, 0x75, 0x62, 0x6d,
+			0x69, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x74,
+			0x6f, 0x20, 0x74, 0x68, 0x65, 0x20, 0x49, 0x45,
+			0x54, 0x46, 0x20, 0x69, 0x6e, 0x74, 0x65, 0x6e,
+			0x64, 0x65, 0x64, 0x20, 0x62, 0x79, 0x20, 0x74,
+			0x68, 0x65, 0x20, 0x43, 0x6f, 0x6e, 0x74, 0x72,
+			0x69, 0x62, 0x75, 0x74, 0x6f, 0x72, 0x20, 0x66,
+			0x6f, 0x72, 0x20, 0x70, 0x75, 0x62, 0x6c, 0x69,
+			0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x20, 0x61,
+			0x73, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x6f, 0x72,
+			0x20, 0x70, 0x61, 0x72, 0x74, 0x20, 0x6f, 0x66,
+			0x20, 0x61, 0x6e, 0x20, 0x49, 0x45, 0x54, 0x46,
+			0x20, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65,
+			0x74, 0x2d, 0x44, 0x72, 0x61, 0x66, 0x74, 0x20,
+			0x6f, 0x72, 0x20, 0x52, 0x46, 0x43, 0x20, 0x61,
+			0x6e, 0x64, 0x20, 0x61, 0x6e, 0x79, 0x20, 0x73,
+			0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e, 0x74,
+			0x20, 0x6d, 0x61, 0x64, 0x65, 0x20, 0x77, 0x69,
+			0x74, 0x68, 0x69, 0x6e, 0x20, 0x74, 0x68, 0x65,
+			0x20, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x78, 0x74,
+			0x20, 0x6f, 0x66, 0x20, 0x61, 0x6e, 0x20, 0x49,
+			0x45, 0x54, 0x46, 0x20, 0x61, 0x63, 0x74, 0x69,
+			0x76, 0x69, 0x74, 0x79, 0x20, 0x69, 0x73, 0x20,
+			0x63, 0x6f, 0x6e, 0x73, 0x69, 0x64, 0x65, 0x72,
+			0x65, 0x64, 0x20, 0x61, 0x6e, 0x20, 0x22, 0x49,
+			0x45, 0x54, 0x46, 0x20, 0x43, 0x6f, 0x6e, 0x74,
+			0x72, 0x69, 0x62, 0x75, 0x74, 0x69, 0x6f, 0x6e,
+			0x22, 0x2e, 0x20, 0x53, 0x75, 0x63, 0x68, 0x20,
+			0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e,
+			0x74, 0x73, 0x20, 0x69, 0x6e, 0x63, 0x6c, 0x75,
+			0x64, 0x65, 0x20, 0x6f, 0x72, 0x61, 0x6c, 0x20,
+			0x73, 0x74, 0x61, 0x74, 0x65, 0x6d, 0x65, 0x6e,
+			0x74, 0x73, 0x20, 0x69, 0x6e, 0x20, 0x49, 0x45,
+			0x54, 0x46, 0x20, 0x73, 0x65, 0x73, 0x73, 0x69,
+			0x6f, 0x6e, 0x73, 0x2c, 0x20, 0x61, 0x73, 0x20,
+			0x77, 0x65, 0x6c, 0x6c, 0x20, 0x61, 0x73, 0x20,
+			0x77, 0x72, 0x69, 0x74, 0x74, 0x65, 0x6e, 0x20,
+			0x61, 0x6e, 0x64, 0x20, 0x65, 0x6c, 0x65, 0x63,
+			0x74, 0x72, 0x6f, 0x6e, 0x69, 0x63, 0x20, 0x63,
+			0x6f, 0x6d, 0x6d, 0x75, 0x6e, 0x69, 0x63, 0x61,
+			0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x6d, 0x61,
+			0x64, 0x65, 0x20, 0x61, 0x74, 0x20, 0x61, 0x6e,
+			0x79, 0x20, 0x74, 0x69, 0x6d, 0x65, 0x20, 0x6f,
+			0x72, 0x20, 0x70, 0x6c, 0x61, 0x63, 0x65, 0x2c,
+			0x20, 0x77, 0x68, 0x69, 0x63, 0x68, 0x20, 0x61,
+			0x72, 0x65, 0x20, 0x61, 0x64, 0x64, 0x72, 0x65,
+			0x73, 0x73, 0x65, 0x64, 0x20, 0x74, 0x6f,
+		},
+		[]byte{
+			0xa3, 0xfb, 0xf0, 0x7d, 0xf3, 0xfa, 0x2f, 0xde,
+			0x4f, 0x37, 0x6c, 0xa2, 0x3e, 0x82, 0x73, 0x70,
+			0x41, 0x60, 0x5d, 0x9f, 0x4f, 0x4f, 0x57, 0xbd,
+			0x8c, 0xff, 0x2c, 0x1d, 0x4b, 0x79, 0x55, 0xec,
+			0x2a, 0x97, 0x94, 0x8b, 0xd3, 0x72, 0x29, 0x15,
+			0xc8, 0xf3, 0xd3, 0x37, 0xf7, 0xd3, 0x70, 0x05,
+			0x0e, 0x9e, 0x96, 0xd6, 0x47, 0xb7, 0xc3, 0x9f,
+			0x56, 0xe0, 0x31, 0xca, 0x5e, 0xb6, 0x25, 0x0d,
+			0x40, 0x42, 0xe0, 0x27, 0x85, 0xec, 0xec, 0xfa,
+			0x4b, 0x4b, 0xb5, 0xe8, 0xea, 0xd0, 0x44, 0x0e,
+			0x20, 0xb6, 0xe8, 0xdb, 0x09, 0xd8, 0x81, 0xa7,
+			0xc6, 0x13, 0x2f, 0x42, 0x0e, 0x52, 0x79, 0x50,
+			0x42, 0xbd, 0xfa, 0x77, 0x73, 0xd8, 0xa9, 0x05,
+			0x14, 0x47, 0xb3, 0x29, 0x1c, 0xe1, 0x41, 0x1c,
+			0x68, 0x04, 0x65, 0x55, 0x2a, 0xa6, 0xc4, 0x05,
+			0xb7, 0x76, 0x4d, 0x5e, 0x87, 0xbe, 0xa8, 0x5a,
+			0xd0, 0x0f, 0x84, 0x49, 0xed, 0x8f, 0x72, 0xd0,
+			0xd6, 0x62, 0xab, 0x05, 0x26, 0x91, 0xca, 0x66,
+			0x42, 0x4b, 0xc8, 0x6d, 0x2d, 0xf8, 0x0e, 0xa4,
+			0x1f, 0x43, 0xab, 0xf9, 0x37, 0xd3, 0x25, 0x9d,
+			0xc4, 0xb2, 0xd0, 0xdf, 0xb4, 0x8a, 0x6c, 0x91,
+			0x39, 0xdd, 0xd7, 0xf7, 0x69, 0x66, 0xe9, 0x28,
+			0xe6, 0x35, 0x55, 0x3b, 0xa7, 0x6c, 0x5c, 0x87,
+			0x9d, 0x7b, 0x35, 0xd4, 0x9e, 0xb2, 0xe6, 0x2b,
+			0x08, 0x71, 0xcd, 0xac, 0x63, 0x89, 0x39, 0xe2,
+			0x5e, 0x8a, 0x1e, 0x0e, 0xf9, 0xd5, 0x28, 0x0f,
+			0xa8, 0xca, 0x32, 0x8b, 0x35, 0x1c, 0x3c, 0x76,
+			0x59, 0x89, 0xcb, 0xcf, 0x3d, 0xaa, 0x8b, 0x6c,
+			0xcc, 0x3a, 0xaf, 0x9f, 0x39, 0x79, 0xc9, 0x2b,
+			0x37, 0x20, 0xfc, 0x88, 0xdc, 0x95, 0xed, 0x84,
+			0xa1, 0xbe, 0x05, 0x9c, 0x64, 0x99, 0xb9, 0xfd,
+			0xa2, 0x36, 0xe7, 0xe8, 0x18, 0xb0, 0x4b, 0x0b,
+			0xc3, 0x9c, 0x1e, 0x87, 0x6b, 0x19, 0x3b, 0xfe,
+			0x55, 0x69, 0x75, 0x3f, 0x88, 0x12, 0x8c, 0xc0,
+			0x8a, 0xaa, 0x9b, 0x63, 0xd1, 0xa1, 0x6f, 0x80,
+			0xef, 0x25, 0x54, 0xd7, 0x18, 0x9c, 0x41, 0x1f,
+			0x58, 0x69, 0xca, 0x52, 0xc5, 0xb8, 0x3f, 0xa3,
+			0x6f, 0xf2, 0x16, 0xb9, 0xc1, 0xd3, 0x00, 0x62,
+			0xbe, 0xbc, 0xfd, 0x2d, 0xc5, 0xbc, 0xe0, 0x91,
+			0x19, 0x34, 0xfd, 0xa7, 0x9a, 0x86, 0xf6, 0xe6,
+			0x98, 0xce, 0xd7, 0x59, 0xc3, 0xff, 0x9b, 0x64,
+			0x77, 0x33, 0x8f, 0x3d, 0xa4, 0xf9, 0xcd, 0x85,
+			0x14, 0xea, 0x99, 0x82, 0xcc, 0xaf, 0xb3, 0x41,
+			0xb2, 0x38, 0x4d, 0xd9, 0x02, 0xf3, 0xd1, 0xab,
+			0x7a, 0xc6, 0x1d, 0xd2, 0x9c, 0x6f, 0x21, 0xba,
+			0x5b, 0x86, 0x2f, 0x37, 0x30, 0xe3, 0x7c, 0xfd,
+			0xc4, 0xfd, 0x80, 0x6c, 0x22, 0xf2, 0x21,
+		},
+		1,
+	},
+	{
+		[]byte{
+			0x1c, 0x92, 0x40, 0xa5, 0xeb, 0x55, 0xd3, 0x8a,
+			0xf3, 0x33, 0x88, 0x86, 0x04, 0xf6, 0xb5, 0xf0,
+			0x47, 0x39, 0x17, 0xc1, 0x40, 0x2b, 0x80, 0x09,
+			0x9d, 0xca, 0x5c, 0xbc, 0x20, 0x70, 0x75, 0xc0,
+		},
+		[]byte{
+			0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			0x00, 0x00, 0x00, 0x02,
+		},
+		[]byte{
+			0x27, 0x54, 0x77, 0x61, 0x73, 0x20, 0x62, 0x72,
+			0x69, 0x6c, 0x6c, 0x69, 0x67, 0x2c, 0x20, 0x61,
+			0x6e, 0x64, 0x20, 0x74, 0x68, 0x65, 0x20, 0x73,
+			0x6c, 0x69, 0x74, 0x68, 0x79, 0x20, 0x74, 0x6f,
+			0x76, 0x65, 0x73, 0x0a, 0x44, 0x69, 0x64, 0x20,
+			0x67, 0x79, 0x72, 0x65, 0x20, 0x61, 0x6e, 0x64,
+			0x20, 0x67, 0x69, 0x6d, 0x62, 0x6c, 0x65, 0x20,
+			0x69, 0x6e, 0x20, 0x74, 0x68, 0x65, 0x20, 0x77,
+			0x61, 0x62, 0x65, 0x3a, 0x0a, 0x41, 0x6c, 0x6c,
+			0x20, 0x6d, 0x69, 0x6d, 0x73, 0x79, 0x20, 0x77,
+			0x65, 0x72, 0x65, 0x20, 0x74, 0x68, 0x65, 0x20,
+			0x62, 0x6f, 0x72, 0x6f, 0x67, 0x6f, 0x76, 0x65,
+			0x73, 0x2c, 0x0a, 0x41, 0x6e, 0x64, 0x20, 0x74,
+			0x68, 0x65, 0x20, 0x6d, 0x6f, 0x6d, 0x65, 0x20,
+			0x72, 0x61, 0x74, 0x68, 0x73, 0x20, 0x6f, 0x75,
+			0x74, 0x67, 0x72, 0x61, 0x62, 0x65, 0x2e,
+		},
+		[]byte{
+			0x62, 0xe6, 0x34, 0x7f, 0x95, 0xed, 0x87, 0xa4,
+			0x5f, 0xfa, 0xe7, 0x42, 0x6f, 0x27, 0xa1, 0xdf,
+			0x5f, 0xb6, 0x91, 0x10, 0x04, 0x4c, 0x0d, 0x73,
+			0x11, 0x8e, 0xff, 0xa9, 0x5b, 0x01, 0xe5, 0xcf,
+			0x16, 0x6d, 0x3d, 0xf2, 0xd7, 0x21, 0xca, 0xf9,
+			0xb2, 0x1e, 0x5f, 0xb1, 0x4c, 0x61, 0x68, 0x71,
+			0xfd, 0x84, 0xc5, 0x4f, 0x9d, 0x65, 0xb2, 0x83,
+			0x19, 0x6c, 0x7f, 0xe4, 0xf6, 0x05, 0x53, 0xeb,
+			0xf3, 0x9c, 0x64, 0x02, 0xc4, 0x22, 0x34, 0xe3,
+			0x2a, 0x35, 0x6b, 0x3e, 0x76, 0x43, 0x12, 0xa6,
+			0x1a, 0x55, 0x32, 0x05, 0x57, 0x16, 0xea, 0xd6,
+			0x96, 0x25, 0x68, 0xf8, 0x7d, 0x3f, 0x3f, 0x77,
+			0x04, 0xc6, 0xa8, 0xd1, 0xbc, 0xd1, 0xbf, 0x4d,
+			0x50, 0xd6, 0x15, 0x4b, 0x6d, 0xa7, 0x31, 0xb1,
+			0x87, 0xb5, 0x8d, 0xfd, 0x72, 0x8a, 0xfa, 0x36,
+			0x75, 0x7a, 0x79, 0x7a, 0xc1, 0x88, 0xd1,
+		},
+		42,
+	},
+}
+
+func doTestChaCha20(t *testing.T) {
+	require := require.New(t)
+
+	for i, vec := range rfc7539TestVectors {
+		buf := make([]byte, len(vec.ciphertext))
+		chacha20(vec.key, vec.nonce, vec.plaintext, buf, vec.initialCounter)
+		require.Equal(vec.ciphertext, buf, "Test Vector %d: chacha20(Encrypt)", i)
+	}
+}
+
+func BenchmarkChaCha20(b *testing.B) {
+	benchSizes := []int{8, 32, 64, 576, 1536, 4096, 1024768}
+	for _, sz := range benchSizes {
+		b.Run(fmt.Sprintf("ChaCha20_%d", sz), func(b *testing.B) { doBenchmarkChaCha20(b, sz) })
+	}
+}
+
+func doBenchmarkChaCha20(b *testing.B, sz int) {
+	var k [chachaKeySize]byte
+	var n [chachaNonceSize]byte
+	buf := make([]byte, sz)
+	b.SetBytes(int64(sz))
+	b.ResetTimer()
+	for i := 0; i < b.N; i++ {
+		chacha20(k[:], n[:], buf, buf, 0)
+	}
+}

+ 122 - 0
hs1.go

@@ -0,0 +1,122 @@
+// hs1.go - HS1 hash function
+//
+// To the extent possible under law, Yawning Angel has waived all copyright
+// and related or neighboring rights to the software, using the Creative
+// Commons "CC0" public domain dedication. See LICENSE or
+// <http://creativecommons.org/publicdomain/zero/1.0/> for full details.
+
+package hs1siv
+
+import "encoding/binary"
+
+const (
+	hs1NHLen      = 64 // Parameter b
+	hs1HashRounds = 6  // Parameter t
+	hs1SIVLen     = 32 // Parameter l
+
+	m60 = (1 << 60) - 1
+	m61 = (1 << 61) - 1
+
+	hashStateSize = (hs1NHLen/4+4*(hs1HashRounds-1))*4 + hs1HashRounds*8 + hs1HashRounds*3*8
+)
+
+type hs1Ctx struct {
+	nhKey   [hs1NHLen/4 + 4*(hs1HashRounds-1)]uint32
+	polyKey [hs1HashRounds]uint64
+	asuKey  [hs1HashRounds * 3]uint64
+}
+
+func (ctx *hs1Ctx) reset() {
+	burnUint32s(ctx.nhKey[:])
+	burnUint64s(ctx.polyKey[:])
+	burnUint64s(ctx.asuKey[:])
+}
+
+// Return 63 bits congruent to ak+b mod (2^61-1).  Assume 60-bit k,b 63-bit a.
+func polyStep(a, b, k uint64) uint64 {
+	// No uint128_t or equivalent.  Could use inline assembly here, but Go
+	// can't/won't inline it, and the function call overhead will eclipse any
+	// performance gain.
+	m := uint64(uint32(a>>32))*uint64(uint32(k)) + uint64(uint32(k>>32))*uint64(uint32(a))
+	h := uint64(uint32(a>>32)) * uint64(uint32(k>>32))
+	l := uint64(uint32(a)) * uint64(uint32(k))
+	return (l & m61) + (h << 3) + (l >> 61) + b + (m >> 29) + ((m << 32) & m61)
+}
+
+// Reduce a mod (2^61-1) in constant time.
+func polyFinalize(a uint64) uint64 {
+	a = (a & m61) + (a >> 61)
+	mask := uint64(int64((m61-1)-a) >> 63)
+	return a - (mask & m61)
+}
+
+func asuHash(x uint64, k []uint64) uint32 {
+	_ = k[2] // Bounds check elimination.
+	t := k[0] + k[1]*uint64(uint32(x)) + k[2]*uint64(uint32(x>>32))
+	return uint32(t >> 32)
+}
+
+func hashStepRef(ctx *hs1Ctx, in []byte, accum *[hs1HashRounds]uint64) {
+	// len(in) MUST be a multiple of hs1NHLen.
+	inBytes := len(in)
+	for inBytes > 0 {
+		var nhRes [hs1HashRounds]uint64
+		for i := 0; 4*i < hs1NHLen; i += 4 {
+			_ = in[15] // Bounds check elimination.
+			mp0 := binary.LittleEndian.Uint32(in[0:4])
+			mp1 := binary.LittleEndian.Uint32(in[4:8])
+			mp2 := binary.LittleEndian.Uint32(in[8:12])
+			mp3 := binary.LittleEndian.Uint32(in[12:16])
+			for j := 0; j < hs1HashRounds; j += 2 {
+				kp := ctx.nhKey[i+j*4:]
+				_ = kp[7] // Bounds check elimination.
+
+				nhRes[j+0] += uint64(mp0+kp[0]) * uint64(mp2+kp[2])
+				nhRes[j+1] += uint64(mp0+kp[4]) * uint64(mp2+kp[6])
+				nhRes[j+0] += uint64(mp1+kp[1]) * uint64(mp3+kp[3])
+				nhRes[j+1] += uint64(mp1+kp[5]) * uint64(mp3+kp[7])
+			}
+			in = in[16:]
+		}
+		for j := 0; j < hs1HashRounds; j += 2 {
+			accum[j] = polyStep(accum[j], nhRes[j]&m60, ctx.polyKey[j])
+			accum[j+1] = polyStep(accum[j+1], nhRes[j+1]&m60, ctx.polyKey[j+1])
+		}
+
+		inBytes -= hs1NHLen
+	}
+}
+
+func hashFinalizeRef(ctx *hs1Ctx, in []byte, accum *[hs1HashRounds]uint64, result []byte) {
+	inBytes := len(in)
+	if inBytes > 0 {
+		var nhRes [hs1HashRounds]uint64
+		for i := 0; 4*i < inBytes; i += 4 {
+			_ = in[15] // Bounds check elimination.
+			mp0 := binary.LittleEndian.Uint32(in[0:4])
+			mp1 := binary.LittleEndian.Uint32(in[4:8])
+			mp2 := binary.LittleEndian.Uint32(in[8:12])
+			mp3 := binary.LittleEndian.Uint32(in[12:16])
+			in = in[16:]
+			for j := 0; j < hs1HashRounds; j += 2 {
+				kp := ctx.nhKey[i+j*4:]
+				_ = kp[7] // Bounds check elimination.
+
+				nhRes[j+0] += uint64(mp0+kp[0]) * uint64(mp2+kp[2])
+				nhRes[j+1] += uint64(mp0+kp[4]) * uint64(mp2+kp[6])
+				nhRes[j+0] += uint64(mp1+kp[1]) * uint64(mp3+kp[3])
+				nhRes[j+1] += uint64(mp1+kp[5]) * uint64(mp3+kp[7])
+			}
+		}
+		for j := 0; j < hs1HashRounds; j += 2 {
+			accum[j] = polyStep(accum[j], nhRes[j]&m60, ctx.polyKey[j])
+			accum[j+1] = polyStep(accum[j+1], nhRes[j+1]&m60, ctx.polyKey[j+1])
+		}
+	}
+	for j := 0; j < hs1HashRounds; j += 2 {
+		s0 := asuHash(polyFinalize(accum[j]), ctx.asuKey[3*j:])
+		s1 := asuHash(polyFinalize(accum[j+1]), ctx.asuKey[3*j+3:])
+		binary.LittleEndian.PutUint32(result[j*4:], s0)
+		binary.LittleEndian.PutUint32(result[j*4+4:], s1)
+	}
+}

+ 302 - 0
hs1siv.go

@@ -0,0 +1,302 @@
+// hs1siv.go - HS1-SIV
+//
+// To the extent possible under law, Yawning Angel has waived all copyright
+// and related or neighboring rights to the software, using the Creative
+// Commons "CC0" public domain dedication. See LICENSE or
+// <http://creativecommons.org/publicdomain/zero/1.0/> for full details.
+
+// Package hs1siv implements the HS1-SIV Authenticated Cipher.
+//
+// While the specification defines multiple parameter sets, this implementation
+// deliberately only supprorts the most conservative "hs1-siv-hi".
+//
+// This implementation is derived from the reference implementation by Ted
+// Krovetz.
+package hs1siv
+
+import (
+	"crypto/subtle"
+	"encoding/binary"
+	"errors"
+)
+
+const (
+	// KeySize is the size of a key in bytes.
+	KeySize = 32
+
+	// NonceSize is the size of a nonce in bytes.
+	NonceSize = 12
+
+	// TagSize is the size of an authentication tag in bytes.
+	TagSize = 32
+
+	stateSize = chachaKeySize + hashStateSize
+)
+
+var (
+	// ErrInvalidKeySize is the error thrown via a panic when a key is an
+	// invalid size.
+	ErrInvalidKeySize = errors.New("hs1siv: invalid key size")
+
+	// ErrInvalidNonceSize is the error thrown via a panic when a nonce is
+	// an invalid size.
+	ErrInvalidNonceSize = errors.New("hs1siv: invalid nonce size")
+
+	// ErrOpen is the error returned when the message authentication fails
+	// during an Open call.
+	ErrOpen = errors.New("hs1siv: message authentication failed")
+
+	settings = [chachaNonceSize]byte{
+		0, 0, hs1SIVLen, 0, chachaRounds, hs1HashRounds, hs1NHLen,
+		0, 0, 0, 0,
+	}
+	zero [hs1SIVLen]byte
+)
+
+// AEAD is a HS1-SIV instance, implementing crypto/cipher.AEAD.
+type AEAD struct {
+	key []byte
+}
+
+// NonceSize returns the size of the nonce that must be passed to Seal and
+// Open.
+func (ae *AEAD) NonceSize() int {
+	return NonceSize
+}
+
+// Overhead returns the maximum difference between the lengths of a plaintext
+// and its ciphertext.
+func (ae *AEAD) Overhead() int {
+	return TagSize
+}
+
+// Seal encrypts and authenticates plaintext, authenticates the
+// additional data and appends the result to dst, returning the updated
+// slice. The nonce must be NonceSize() bytes long and should be unique for
+// all time, for a given key.
+//
+// The plaintext and dst must overlap exactly or not at all. To reuse
+// plaintext's storage for the encrypted output, use plaintext[:0] as dst.
+func (ae *AEAD) Seal(dst, nonce, plaintext, additionalData []byte) []byte {
+	if len(nonce) != NonceSize {
+		panic(ErrInvalidNonceSize)
+	}
+
+	var ctx aeadCtx
+	ctx.setup(ae.key)
+	ret, out := sliceForAppend(dst, len(plaintext)+TagSize)
+	ctx.encrypt(plaintext, additionalData, nonce, out)
+	ctx.reset()
+	return ret
+}
+
+// Open decrypts and authenticates ciphertext, authenticates the
+// additional data and, if successful, appends the resulting plaintext
+// to dst, returning the updated slice. The nonce must be NonceSize()
+// bytes long and both it and the additional data must match the
+// value passed to Seal.
+//
+// The ciphertext and dst must overlap exactly or not at all. To reuse
+// ciphertext's storage for the decrypted output, use ciphertext[:0] as dst.
+//
+// Even if the function fails, the contents of dst, up to its capacity,
+// may be overwritten.
+func (ae *AEAD) Open(dst, nonce, ciphertext, additionalData []byte) ([]byte, error) {
+	var err error
+	var ok bool
+
+	if len(nonce) != NonceSize {
+		panic(ErrInvalidNonceSize)
+	}
+
+	var ctx aeadCtx
+	ctx.setup(ae.key)
+	ret, out := sliceForAppend(dst, len(ciphertext)-TagSize)
+	ok = ctx.decrypt(ciphertext, additionalData, nonce, out)
+	ctx.reset()
+	if !ok {
+		// On decryption failures, purge the invalid plaintext.
+		if len(out) > 0 {
+			burnBytes(out)
+			ret = nil
+		}
+		err = ErrOpen
+	}
+	return ret, err
+}
+
+// Reset securely purges stored sensitive data from the AEAD instance.
+func (ae *AEAD) Reset() {
+	burnBytes(ae.key)
+}
+
+// New returns a new keyed HS1-SIV instance.
+func New(key []byte) *AEAD {
+	if len(key) != KeySize {
+		panic(ErrInvalidKeySize)
+	}
+	return &AEAD{key: append([]byte{}, key...)}
+}
+
+type aeadCtx struct {
+	chachaKey [chachaKeySize]byte
+	hashCtx   hs1Ctx
+
+	sivAccum  [hs1HashRounds]uint64
+	sivLenBuf [16]byte
+}
+
+func (ctx *aeadCtx) reset() {
+	burnBytes(ctx.chachaKey[:])
+	ctx.hashCtx.reset()
+}
+
+// XOR first n bytes of src into dst, then copy the next 32-n bytes.
+func xorCopyChaChaKey(dst, src []byte) {
+	const n = 24 // For 6 hash rounds.
+
+	for i, v := range src[:n] {
+		dst[i] ^= v
+	}
+	copy(dst[n:], src[n:])
+}
+
+func (ctx *aeadCtx) setup(userKey []byte) {
+	// The paper allows a variable length key of up to 256 bits, the reference
+	// implementation hard codes a 128 bit key.
+	//
+	// This implementation only supports a 256 bit key.
+	var chachaNonce [chachaNonceSize]byte
+	copy(chachaNonce[:], settings[:])
+	chachaNonce[0] = byte(len(userKey))
+	var buf [stateSize]byte
+	chacha20(userKey, chachaNonce[:], buf[:], buf[:], 0)
+
+	off := chachaKeySize
+	copy(ctx.chachaKey[:], buf[:off])
+	for i := range ctx.hashCtx.nhKey {
+		ctx.hashCtx.nhKey[i] = binary.LittleEndian.Uint32(buf[off:])
+		off += 4
+	}
+	for i := range ctx.hashCtx.polyKey {
+		ctx.hashCtx.polyKey[i] = binary.LittleEndian.Uint64(buf[off:]) & m60
+		off += 8
+	}
+	for i := range ctx.hashCtx.asuKey {
+		ctx.hashCtx.asuKey[i] = binary.LittleEndian.Uint64(buf[off:])
+		off += 8
+	}
+
+	burnBytes(buf[:])
+}
+
+func (ctx *aeadCtx) sivSetup(aBytes, mBytes int) {
+	// Init: set up lengths, accumulator.
+	binary.LittleEndian.PutUint64(ctx.sivLenBuf[0:8], uint64(aBytes))
+	binary.LittleEndian.PutUint64(ctx.sivLenBuf[8:16], uint64(mBytes))
+	for i := range ctx.sivAccum {
+		ctx.sivAccum[i] = 1
+	}
+}
+
+func (ctx *aeadCtx) sivHashAD(a []byte) {
+	aBytes := len(a)
+
+	// Hash associated data.
+	nhMultiple := aBytes & ^(hs1NHLen - 1)
+	hashStepRef(&ctx.hashCtx, a[:nhMultiple], &ctx.sivAccum)
+	if nhMultiple < aBytes {
+		var buf [hs1NHLen]byte
+		copy(buf[:], a[nhMultiple:])
+		hashStepRef(&ctx.hashCtx, buf[:], &ctx.sivAccum)
+	}
+}
+
+func (ctx *aeadCtx) sivGenerate(m, n, siv []byte) {
+	mBytes := len(m)
+
+	// Hash message data.
+	var chachaKey [chachaKeySize]byte
+	nhMultiple := mBytes & ^(hs1NHLen - 1)
+	hashStepRef(&ctx.hashCtx, m[:nhMultiple], &ctx.sivAccum)
+	mBytes = mBytes - nhMultiple
+	mBytesWithPadding := (mBytes + 15) & ^15
+	if mBytesWithPadding == hs1NHLen {
+		var buf [hs1NHLen]byte
+		copy(buf[:], m[nhMultiple:])
+		hashStepRef(&ctx.hashCtx, buf[:], &ctx.sivAccum)
+		hashFinalizeRef(&ctx.hashCtx, ctx.sivLenBuf[:], &ctx.sivAccum, chachaKey[:])
+	} else {
+		var buf [hs1NHLen]byte
+		copy(buf[:], m[nhMultiple:])
+		copy(buf[mBytesWithPadding:], ctx.sivLenBuf[:])
+		hashFinalizeRef(&ctx.hashCtx, buf[:mBytesWithPadding+16], &ctx.sivAccum, chachaKey[:])
+	}
+
+	// Derive the SIV.
+	xorCopyChaChaKey(chachaKey[:], ctx.chachaKey[:])
+	chacha20(chachaKey[:], n, zero[:], siv, 0)
+
+	burnBytes(chachaKey[:])
+}
+
+func (ctx *aeadCtx) encrypt(m, a, n, c []byte) {
+	mBytes := len(m)
+	var accum [hs1HashRounds]uint64
+	for i := range accum {
+		accum[i] = 1
+	}
+
+	var siv [hs1SIVLen]byte
+	ctx.sivSetup(len(a), len(m))
+	ctx.sivHashAD(a)
+	ctx.sivGenerate(m, n, siv[:])
+
+	var chachaKey [chachaKeySize]byte
+	hashFinalizeRef(&ctx.hashCtx, siv[:], &accum, chachaKey[:])
+	xorCopyChaChaKey(chachaKey[:], ctx.chachaKey[:])
+	chacha20(chachaKey[:], n, m, c, 1)
+	copy(c[mBytes:], siv[:])
+
+	burnBytes(chachaKey[:])
+}
+
+func (ctx *aeadCtx) decrypt(c, a, n, m []byte) bool {
+	cBytes := len(c)
+	if cBytes < hs1SIVLen {
+		return false
+	}
+	mBytes := cBytes - hs1SIVLen
+
+	var accum [hs1HashRounds]uint64
+	for i := range accum {
+		accum[i] = 1
+	}
+
+	var siv, maybeSIV [hs1SIVLen]byte
+	var nonce [NonceSize]byte
+	copy(siv[:], c[mBytes:])
+	copy(nonce[:], n) // Work with a copy, `m` and `n` may alias.
+
+	var chachaKey [chachaKeySize]byte
+	hashFinalizeRef(&ctx.hashCtx, siv[:], &accum, chachaKey[:])
+	xorCopyChaChaKey(chachaKey[:], ctx.chachaKey[:])
+	ctx.sivSetup(len(a), len(m))
+	ctx.sivHashAD(a) // Hash AD before decrption, `m` and `a` may alias.
+	chacha20(chachaKey[:], nonce[:], c[:mBytes], m, 1)
+	ctx.sivGenerate(m, nonce[:], maybeSIV[:])
+
+	return subtle.ConstantTimeCompare(siv[:], maybeSIV[:]) == 1
+}
+
+// Shamelessly stolen from the Go runtime library.
+func sliceForAppend(in []byte, n int) (head, tail []byte) {
+	if total := len(in) + n; cap(in) >= total {
+		head = in[:total]
+	} else {
+		head = make([]byte, total)
+		copy(head, in)
+	}
+	tail = head[len(in):]
+	return
+}

+ 5482 - 0
hs1siv_kat_test.go

@@ -0,0 +1,5482 @@
+// hs1siv_kat_test.go - HS1-SIV Known Answer Test results
+//
+// To the extent possible under law, Yawning Angel has waived all copyright
+// and related or neighboring rights to the software, using the Creative
+// Commons "CC0" public domain dedication. See LICENSE or
+// <http://creativecommons.org/publicdomain/zero/1.0/> for full details.
+
+package hs1siv
+
+var kaths1siv = []byte{
+	0xAD, 0x46, 0x0E, 0x2A, 0x4D, 0x1F, 0x9D, 0x2D,
+	0x45, 0xA6, 0x9B, 0x3B, 0x2C, 0xAE, 0xB6, 0xBF,
+	0xB3, 0x2F, 0x97, 0xF5, 0xD0, 0x59, 0x97, 0xAC,
+	0x32, 0x2C, 0x4E, 0xF1, 0x22, 0x65, 0x18, 0x36,
+
+	0x2B, 0x43, 0xEF, 0xBE, 0xB7, 0xD8, 0x0E, 0x90,
+	0xEE, 0x10, 0xD4, 0x92, 0x9F, 0x20, 0xEB, 0xC3,
+	0x4E, 0xD3, 0xE1, 0x98, 0xD3, 0x65, 0x93, 0x09,
+	0x85, 0x9F, 0x60, 0xF0, 0xAA, 0x4D, 0xEE, 0xE0,
+	0x7B,
+
+	0x75, 0xAF, 0x5D, 0x5E, 0x05, 0x54, 0x18, 0xDB,
+	0xC6, 0x85, 0xB0, 0xCA, 0x7A, 0x8B, 0x95, 0xF1,
+	0x95, 0x1A, 0x8F, 0x75, 0x8D, 0x1E, 0xA1, 0x35,
+	0x87, 0x6D, 0x70, 0x6B, 0xE9, 0xF3, 0x1C, 0xAC,
+	0x0F, 0x12,
+
+	0x19, 0x5E, 0x7F, 0xC4, 0x18, 0x80, 0x76, 0x09,
+	0x63, 0x30, 0xFB, 0x1C, 0xB2, 0x7A, 0xAA, 0xE8,
+	0x45, 0x02, 0xED, 0x8F, 0x59, 0xA7, 0x56, 0x00,
+	0x37, 0xC7, 0x3D, 0x41, 0x2E, 0x41, 0xC8, 0x45,
+	0xBA, 0x6F, 0xCF,
+
+	0xBB, 0xBB, 0x04, 0xF6, 0xAA, 0x65, 0x61, 0x20,
+	0xD5, 0x22, 0x33, 0xD8, 0x68, 0x75, 0x64, 0xE5,
+	0x38, 0x1E, 0x53, 0xC7, 0x9A, 0x5B, 0xD5, 0xAC,
+	0xC7, 0x98, 0xA3, 0x9B, 0x44, 0x5F, 0x0F, 0xA2,
+	0x45, 0x38, 0x7D, 0x44,
+
+	0xE7, 0x0F, 0xBA, 0xC3, 0x84, 0x4D, 0xC6, 0x61,
+	0x91, 0x51, 0xB6, 0xA0, 0x3A, 0x1C, 0xF1, 0xDC,
+	0x9A, 0xF2, 0xA7, 0x36, 0xD5, 0x5B, 0x2C, 0xFE,
+	0x76, 0x06, 0x6F, 0x01, 0x48, 0x9C, 0x24, 0x07,
+	0x2A, 0xBE, 0x2C, 0xA4, 0x52,
+
+	0x97, 0xBA, 0x4E, 0xBC, 0x3C, 0xB3, 0x5E, 0xE1,
+	0xE9, 0xE6, 0xF2, 0x7C, 0x72, 0x10, 0x9F, 0x5C,
+	0x2C, 0x1D, 0x57, 0x72, 0x98, 0x27, 0x26, 0x7E,
+	0x71, 0x3C, 0x11, 0x50, 0xB1, 0x29, 0xDC, 0x5F,
+	0x05, 0x68, 0x5F, 0xA4, 0x1D, 0x1F,
+
+	0x8B, 0x12, 0x07, 0x2F, 0xE4, 0x56, 0xA5, 0x70,
+	0xDF, 0x52, 0x62, 0xEF, 0x72, 0xA2, 0x0F, 0x02,
+	0x17, 0xE5, 0xDC, 0x70, 0x85, 0x74, 0xF4, 0xAA,
+	0x26, 0x10, 0x4A, 0x50, 0xDC, 0x85, 0xB7, 0x88,
+	0x2B, 0x2D, 0x2E, 0x80, 0x5E, 0xD8, 0xC7,
+
+	0xC5, 0x4B, 0xCE, 0xF5, 0xA6, 0x17, 0xC1, 0x13,
+	0xD7, 0x21, 0xDB, 0x45, 0x14, 0x00, 0x99, 0x76,
+	0xE4, 0x44, 0x50, 0x24, 0x63, 0x46, 0x9E, 0x24,
+	0x25, 0x92, 0x63, 0x53, 0x59, 0xF0, 0xBB, 0x87,
+	0xD2, 0x07, 0x5B, 0x23, 0x17, 0x5D, 0xC0, 0x42,
+
+	0x18, 0x01, 0x59, 0x8C, 0x62, 0xC5, 0x63, 0x74,
+	0xB6, 0x48, 0x1B, 0x87, 0x87, 0x7C, 0x4A, 0xFE,
+	0x81, 0xB1, 0x86, 0x18, 0xF4, 0xF9, 0xD2, 0x22,
+	0xFA, 0x67, 0x57, 0x0D, 0x93, 0x01, 0x9C, 0x59,
+	0x69, 0xD0, 0x89, 0x65, 0xC3, 0xBB, 0x62, 0x7A,
+	0x44,
+
+	0x4E, 0x56, 0x73, 0x42, 0xCD, 0x24, 0xB5, 0xCE,
+	0x32, 0x96, 0x27, 0xEB, 0x57, 0xF9, 0x49, 0x8F,
+	0x57, 0x43, 0x85, 0xA3, 0x28, 0x19, 0x70, 0xDA,
+	0xFD, 0x09, 0x32, 0x5D, 0xCB, 0x51, 0xFF, 0x36,
+	0x5C, 0xC0, 0x3D, 0x09, 0xDF, 0xF9, 0x47, 0x76,
+	0x2C, 0x0B,
+
+	0x57, 0x05, 0x82, 0xEA, 0xFE, 0x92, 0x8A, 0x3A,
+	0x40, 0xFC, 0x42, 0x7A, 0x06, 0x6F, 0xD2, 0xA3,
+	0x52, 0xB5, 0x92, 0x91, 0xD5, 0x1C, 0x1D, 0x73,
+	0xAA, 0x01, 0x05, 0x91, 0x51, 0xFF, 0x95, 0x23,
+	0x9B, 0xCF, 0xB6, 0x48, 0x61, 0xE7, 0x90, 0xD8,
+	0xB7, 0x57, 0x3B,
+
+	0x0A, 0x9D, 0x1C, 0x4D, 0x15, 0x43, 0x22, 0x89,
+	0xF4, 0x83, 0xE0, 0xD4, 0xB8, 0x63, 0x05, 0xB4,
+	0xE1, 0x42, 0x81, 0xF7, 0xFE, 0x02, 0x8A, 0xDE,
+	0x7E, 0x92, 0xFD, 0xFE, 0xB2, 0xCD, 0x95, 0xC8,
+	0xC6, 0x12, 0x8B, 0xBD, 0xB7, 0xAA, 0xD5, 0x04,
+	0x35, 0x92, 0x48, 0x65,
+
+	0x9B, 0x9C, 0x46, 0x0D, 0xA5, 0x56, 0x89, 0xF0,
+	0x6C, 0x49, 0x4F, 0x84, 0x82, 0xF9, 0x96, 0xD6,
+	0xA0, 0x39, 0xE9, 0x43, 0xBB, 0xDE, 0x21, 0x86,
+	0x77, 0xF4, 0xFF, 0xD8, 0x58, 0x00, 0x26, 0x13,
+	0x30, 0x2D, 0xE3, 0x0E, 0xF4, 0x61, 0x40, 0xDE,
+	0xFB, 0x3A, 0x7C, 0x8E, 0x12,
+
+	0xB9, 0xA5, 0xD0, 0x49, 0xC1, 0x0A, 0xD9, 0x84,
+	0xE7, 0x9E, 0xE4, 0x9E, 0x3E, 0x03, 0xB7, 0xB6,
+	0x37, 0xA4, 0x3E, 0x8B, 0x1A, 0x84, 0x4F, 0x05,
+	0x3D, 0xA0, 0xD3, 0xC0, 0x17, 0xE6, 0xF3, 0xA7,
+	0xDE, 0xF1, 0x4B, 0xF7, 0xFB, 0x3F, 0x51, 0x87,
+	0x8D, 0xD8, 0xF8, 0xC5, 0xC0, 0x23,
+
+	0x2A, 0xAA, 0xF5, 0xC7, 0x08, 0x76, 0x56, 0x8C,
+	0xAD, 0x5A, 0x56, 0x5B, 0x0C, 0x43, 0x40, 0x74,
+	0x2A, 0x48, 0x54, 0x17, 0xC5, 0x18, 0x5E, 0x49,
+	0x05, 0x77, 0xE0, 0x8F, 0xF7, 0x51, 0xC4, 0xE9,
+	0x21, 0x13, 0xD8, 0x98, 0x8E, 0xF2, 0xAD, 0xB4,
+	0x2A, 0x4F, 0x64, 0x17, 0x06, 0x70, 0xA8,
+
+	0xB2, 0x7A, 0xCF, 0x11, 0x90, 0xF5, 0xCC, 0x63,
+	0x41, 0xC6, 0x9F, 0x08, 0x65, 0xDB, 0xAC, 0x51,
+	0x27, 0x59, 0xE7, 0xE8, 0xBF, 0x68, 0xD2, 0xAA,
+	0xFA, 0xCB, 0xE1, 0x02, 0x1C, 0x12, 0x52, 0x6F,
+	0x8D, 0x8E, 0x63, 0xAF, 0xA1, 0xD7, 0x4D, 0xF6,
+	0x3D, 0x90, 0x38, 0x1E, 0x69, 0x1A, 0xD1, 0xFB,
+
+	0x80, 0xDA, 0x80, 0xD3, 0xAF, 0x6E, 0x07, 0x1C,
+	0xCB, 0x0D, 0x4C, 0x94, 0x06, 0x1A, 0xBD, 0x0B,
+	0xE0, 0x74, 0x28, 0x05, 0xC0, 0x89, 0x1D, 0xE3,
+	0x74, 0xBF, 0x81, 0x24, 0xB5, 0xE4, 0x0A, 0xB6,
+	0x09, 0xB6, 0xAC, 0x66, 0x25, 0xCB, 0x55, 0xD3,
+	0xE4, 0x8D, 0x64, 0xCA, 0x82, 0x66, 0xE3, 0x64,
+	0xA1,
+
+	0x5E, 0xBF, 0x96, 0x2D, 0x58, 0x47, 0x9C, 0x73,
+	0x3A, 0x9D, 0x40, 0x4C, 0x1F, 0xD9, 0x8B, 0x73,
+	0x52, 0x6B, 0x8A, 0x49, 0xE4, 0x55, 0x3A, 0xFD,
+	0x80, 0xEE, 0x07, 0x87, 0x2C, 0x82, 0x0A, 0x68,
+	0x16, 0x4F, 0x4E, 0xD3, 0xCE, 0xAB, 0x3A, 0xC6,
+	0x26, 0x26, 0x47, 0xBC, 0xE7, 0x9F, 0x6E, 0x7B,
+	0x5D, 0xE3,
+
+	0x36, 0x76, 0x57, 0xEC, 0x94, 0xE1, 0x71, 0x34,
+	0x8F, 0x87, 0x54, 0xAC, 0x0C, 0x7F, 0x79, 0xE2,
+	0xB8, 0xE0, 0x92, 0x9A, 0x8B, 0x00, 0x9E, 0x83,
+	0x7F, 0xEB, 0x43, 0xD1, 0xE3, 0xC3, 0x4B, 0xF8,
+	0x90, 0xAB, 0x44, 0x2C, 0x06, 0xBD, 0x0C, 0x82,
+	0x15, 0x69, 0x27, 0x5D, 0x4D, 0x81, 0x02, 0x77,
+	0x0E, 0x03, 0x04,
+
+	0x78, 0x25, 0xD8, 0xB4, 0xF2, 0x1C, 0x88, 0xBC,
+	0x4C, 0xFC, 0x98, 0x86, 0x87, 0xEF, 0x5F, 0x4F,
+	0x99, 0xD3, 0x2A, 0xBC, 0xA0, 0x9B, 0x72, 0xFF,
+	0x48, 0xDA, 0x42, 0x09, 0x00, 0xDC, 0x37, 0xDC,
+	0x53, 0xDE, 0xDE, 0x1A, 0xA9, 0x51, 0x93, 0x36,
+	0x52, 0x07, 0x03, 0x77, 0x5C, 0x7A, 0xD2, 0x3C,
+	0x85, 0xB7, 0xC3, 0xA2,
+
+	0x35, 0x78, 0x7D, 0x01, 0x9A, 0x72, 0xB2, 0x07,
+	0x4D, 0xAE, 0x99, 0x84, 0x21, 0x05, 0xB7, 0x17,
+	0xB0, 0x85, 0x97, 0xCE, 0xB8, 0x30, 0xDE, 0x59,
+	0x78, 0xA2, 0x9E, 0x18, 0x7C, 0x15, 0x5C, 0xC1,
+	0xC7, 0xA8, 0x7D, 0x64, 0x4A, 0x48, 0xEB, 0x22,
+	0xA3, 0x20, 0x80, 0x3C, 0x3E, 0x2B, 0x83, 0x32,
+	0x44, 0x5A, 0x99, 0x4C, 0x12,
+
+	0xF0, 0x96, 0x45, 0x03, 0xF6, 0x30, 0xF2, 0xFF,
+	0x47, 0xC8, 0x91, 0x79, 0x4D, 0xCC, 0x25, 0x5F,
+	0x49, 0x70, 0x86, 0x24, 0x9E, 0x11, 0x8E, 0xED,
+	0xC9, 0x55, 0x28, 0x6F, 0xBC, 0xB4, 0xC8, 0x1D,
+	0x2A, 0xF9, 0x65, 0x45, 0x2A, 0xF1, 0x54, 0x19,
+	0xE0, 0x8C, 0xE3, 0xF1, 0xFE, 0x28, 0x20, 0xEF,
+	0xA2, 0x5A, 0xC2, 0xAC, 0x69, 0x94,
+
+	0x22, 0x49, 0xC5, 0x54, 0x0B, 0xE3, 0x6A, 0x54,
+	0x3C, 0x13, 0xC0, 0xDE, 0x3F, 0xDC, 0x37, 0xCD,
+	0x97, 0xC4, 0x6E, 0xA9, 0xF6, 0x00, 0x96, 0xA5,
+	0xF3, 0x41, 0x59, 0x72, 0x6C, 0x39, 0x60, 0x3E,
+	0x54, 0x51, 0x3A, 0x6A, 0xA4, 0x58, 0x1F, 0xB8,
+	0xDC, 0xC9, 0xCC, 0x75, 0x64, 0xDD, 0xD4, 0xB0,
+	0xD6, 0x01, 0x40, 0xA4, 0x32, 0xB0, 0x30,
+
+	0x02, 0x24, 0x07, 0x17, 0x42, 0xC5, 0xB3, 0xAE,
+	0x44, 0x77, 0xB9, 0x7E, 0x3D, 0x31, 0x72, 0xA6,
+	0x1A, 0x3B, 0xBD, 0xEE, 0xDF, 0x4E, 0x21, 0xC4,
+	0xD4, 0x5A, 0xB2, 0x32, 0x6A, 0xB5, 0x45, 0xFB,
+	0x97, 0x07, 0xAB, 0x8B, 0x2F, 0x82, 0xF7, 0x02,
+	0xD9, 0x68, 0x60, 0x9A, 0x13, 0x4E, 0xCA, 0xC7,
+	0xDB, 0x64, 0x63, 0x60, 0x3A, 0x6F, 0x61, 0xAA,
+
+	0x5A, 0xD1, 0xF7, 0x87, 0xE9, 0x01, 0xA2, 0x90,
+	0xDC, 0xA1, 0x2D, 0x29, 0x5C, 0x5E, 0xE0, 0xE5,
+	0xAA, 0x7C, 0x14, 0x5F, 0x8A, 0x9B, 0x48, 0x43,
+	0x50, 0xC4, 0x4B, 0x49, 0xCA, 0xE6, 0x12, 0x04,
+	0x69, 0x29, 0xE5, 0xF0, 0x29, 0xD6, 0x72, 0x0D,
+	0x37, 0xE5, 0x07, 0x2C, 0x07, 0xEF, 0xCF, 0xEB,
+	0x35, 0xAF, 0x04, 0xB3, 0x8C, 0xFF, 0x13, 0xD4,
+	0x42,
+
+	0x18, 0x92, 0x59, 0xF5, 0xA6, 0x88, 0xBE, 0x57,
+	0x98, 0x6C, 0x95, 0x93, 0x80, 0x75, 0xE8, 0x2C,
+	0xC5, 0x6D, 0x9E, 0x76, 0xD7, 0xFA, 0x4C, 0x5B,
+	0xD9, 0xDA, 0x70, 0x30, 0x3B, 0x07, 0x92, 0x45,
+	0x1F, 0x31, 0x66, 0xD3, 0x79, 0x68, 0x05, 0x5B,
+	0x9E, 0x94, 0x86, 0x9A, 0x1A, 0x17, 0x8D, 0x0E,
+	0x57, 0x99, 0xCB, 0xFC, 0x34, 0x3E, 0x34, 0x9D,
+	0x41, 0xC8,
+
+	0x82, 0x3B, 0x70, 0x7F, 0x46, 0x77, 0xE1, 0xCB,
+	0x79, 0x90, 0xEC, 0x41, 0x7B, 0xF2, 0x4A, 0xDB,
+	0x91, 0xBF, 0xBE, 0xCE, 0xD9, 0xDE, 0x4D, 0xB3,
+	0xF8, 0x19, 0xFD, 0x89, 0x4F, 0x43, 0xE5, 0x2D,
+	0x50, 0xB0, 0xD9, 0xD8, 0x87, 0x9F, 0xB1, 0xCB,
+	0x1F, 0x2F, 0xD8, 0xB1, 0xD6, 0x91, 0xEC, 0x0D,
+	0x32, 0xDA, 0x89, 0xC6, 0x4C, 0x9E, 0xB4, 0xF4,
+	0x69, 0xAF, 0x73,
+
+	0x6C, 0x86, 0x9F, 0x19, 0x78, 0x73, 0xAD, 0x0E,
+	0xD1, 0x35, 0x58, 0x61, 0x98, 0xDF, 0x97, 0x91,
+	0x6F, 0xF5, 0x73, 0x64, 0x18, 0x19, 0x1B, 0x52,
+	0xDA, 0x9F, 0x6C, 0x89, 0xA4, 0xFE, 0x19, 0xBB,
+	0x52, 0x97, 0x82, 0x11, 0xD8, 0x9E, 0x1A, 0xFE,
+	0xB7, 0x9F, 0x80, 0x70, 0x9A, 0xB0, 0x16, 0xB1,
+	0xD3, 0x8A, 0xDC, 0xCA, 0x06, 0xEE, 0xE6, 0xE0,
+	0x9E, 0x7D, 0x37, 0x7B,
+
+	0x61, 0xCB, 0x9A, 0xB8, 0xDF, 0x1E, 0xD9, 0x66,
+	0x2A, 0xB5, 0xF7, 0x36, 0xD8, 0x5A, 0x6D, 0x02,
+	0x74, 0x55, 0x40, 0x0B, 0xD7, 0xD3, 0x8B, 0xD3,
+	0x74, 0xEF, 0x55, 0x96, 0x30, 0x57, 0xA4, 0xA7,
+	0xEE, 0xFD, 0x9E, 0x5C, 0x73, 0xA0, 0x4E, 0xDD,
+	0x72, 0x29, 0xF7, 0x31, 0x71, 0x05, 0x80, 0x15,
+	0x54, 0x0B, 0x7F, 0x25, 0x7B, 0xDC, 0x7D, 0xC6,
+	0x71, 0x91, 0x84, 0x18, 0x4C,
+
+	0xE4, 0x0A, 0x55, 0x4B, 0xE5, 0x5B, 0x3A, 0xA5,
+	0xEC, 0xE9, 0x13, 0x74, 0xB5, 0xF1, 0x29, 0xBA,
+	0xC4, 0x86, 0x4F, 0xEF, 0x6F, 0x29, 0xEC, 0x80,
+	0x62, 0x8F, 0xA6, 0x28, 0xD8, 0xAE, 0x05, 0x0C,
+	0x07, 0x09, 0x8C, 0x20, 0x57, 0x22, 0x06, 0x3A,
+	0x90, 0xCD, 0xBD, 0xF9, 0x56, 0xE0, 0x7B, 0xC8,
+	0x98, 0x31, 0xC3, 0x6C, 0xDF, 0xC1, 0x73, 0x58,
+	0x8F, 0x7A, 0x3E, 0xA0, 0x86, 0x3D,
+
+	0x75, 0xB5, 0x24, 0x11, 0x67, 0x1A, 0x07, 0x91,
+	0x5B, 0xF1, 0xF7, 0x26, 0xC9, 0xF9, 0xF3, 0xB7,
+	0x3E, 0x6A, 0x25, 0x43, 0x0A, 0x3F, 0xB1, 0x59,
+	0x87, 0xBF, 0xC5, 0xC6, 0x8A, 0x71, 0xCD, 0x02,
+	0xEB, 0xE9, 0x8A, 0xFB, 0xFF, 0x5A, 0xA9, 0x2B,
+	0x8A, 0x3B, 0x97, 0xF0, 0xC0, 0x42, 0x04, 0x55,
+	0xED, 0xDF, 0x6F, 0x7C, 0xC1, 0x57, 0x92, 0x5F,
+	0x7D, 0x1D, 0x47, 0x85, 0x53, 0xAD, 0xD6,
+
+	0x26, 0x35, 0x5D, 0x15, 0x66, 0xD0, 0xDC, 0xFD,
+	0x3A, 0x07, 0x39, 0x12, 0xF5, 0xEA, 0x5F, 0xC9,
+	0x00, 0x12, 0xEE, 0x98, 0x51, 0x41, 0x36, 0xBC,
+	0x15, 0x76, 0x66, 0xFD, 0x93, 0x5A, 0xA1, 0x2E,
+	0x7C, 0x29, 0x83, 0x1B, 0x1F, 0xFE, 0x60, 0x36,
+	0xAB, 0xBF, 0xA4, 0xB5, 0xBA, 0x06, 0x38, 0x9E,
+	0x5C, 0x7A, 0x1D, 0x2C, 0x27, 0xA8, 0xBA, 0x2E,
+	0x83, 0xF3, 0x40, 0x3C, 0x80, 0x4B, 0x0D, 0xCA,
+
+	0xC3, 0xDE, 0xAE, 0x65, 0xB5, 0x49, 0x05, 0xD4,
+	0x65, 0x84, 0xA6, 0x9B, 0x54, 0x4C, 0x4F, 0x72,
+	0xBD, 0x45, 0x64, 0x46, 0x94, 0xF7, 0x5F, 0xB4,
+	0x3C, 0xA1, 0xA3, 0x95, 0x1D, 0x80, 0x40, 0x93,
+	0x9B, 0x20, 0xDC, 0x9C, 0x54, 0x31, 0xC2, 0x67,
+	0xD9, 0xB7, 0x07, 0x5E, 0x5F, 0x7B, 0x36, 0x0B,
+	0x66, 0xDF, 0x93, 0x6A, 0xA1, 0x38, 0x31, 0x68,
+	0xDA, 0x33, 0x63, 0x14, 0x08, 0x4A, 0x19, 0x77,
+	0x77,
+
+	0xDA, 0x19, 0xE5, 0x84, 0xD0, 0x2B, 0x37, 0x75,
+	0xCC, 0xDE, 0xC6, 0x7D, 0xF8, 0x98, 0x5E, 0x36,
+	0x66, 0x43, 0xE3, 0x5D, 0x73, 0xC2, 0x49, 0xA0,
+	0x8B, 0x57, 0x37, 0x21, 0x45, 0xA4, 0x13, 0xEA,
+	0xB6, 0x6A, 0xA2, 0xEB, 0x16, 0x1D, 0x3A, 0x69,
+	0x77, 0x2E, 0xB6, 0x0F, 0xBE, 0xB2, 0xDB, 0x2C,
+	0x1F, 0xEB, 0x64, 0x78, 0x11, 0x96, 0xFD, 0xD9,
+	0x95, 0xBD, 0x61, 0x69, 0x63, 0x8C, 0xE2, 0x4D,
+	0x5B, 0x2E,
+
+	0x84, 0xD8, 0x6C, 0x5A, 0xAF, 0x3A, 0xB4, 0x9A,
+	0xB7, 0x45, 0xCE, 0x4B, 0x73, 0x80, 0x34, 0x6F,
+	0x81, 0x53, 0xDB, 0x13, 0x1C, 0x39, 0x94, 0x88,
+	0x0C, 0x67, 0xD5, 0x7B, 0x95, 0x01, 0x69, 0x55,
+	0x88, 0xBC, 0xC1, 0x3D, 0xA4, 0x50, 0xC9, 0x02,
+	0x8D, 0xA5, 0x47, 0xCF, 0xB9, 0x5F, 0x52, 0xC2,
+	0xB8, 0x37, 0xB7, 0x25, 0x74, 0x55, 0x6F, 0xC8,
+	0xCF, 0x91, 0xF4, 0xC6, 0xBE, 0xC7, 0x6D, 0xEC,
+	0x5B, 0xD5, 0xCD,
+
+	0x3C, 0x80, 0x7C, 0x89, 0xC6, 0x65, 0x1A, 0xEC,
+	0xAA, 0x39, 0x74, 0xA0, 0x9C, 0xFA, 0xAC, 0xED,
+	0x27, 0xA4, 0x3F, 0xC1, 0xF9, 0x59, 0xD9, 0xFE,
+	0xC0, 0x39, 0x4A, 0x51, 0x92, 0x3D, 0x86, 0x4F,
+	0x42, 0xCB, 0xE2, 0x73, 0xE1, 0xA3, 0xDF, 0xB0,
+	0x93, 0x4F, 0x2E, 0x11, 0x13, 0x71, 0xA8, 0x43,
+	0xBB, 0xB5, 0x0E, 0xD1, 0x4B, 0x5A, 0x54, 0xBD,
+	0x6C, 0x18, 0xAD, 0xBC, 0x39, 0xF2, 0xDF, 0xAE,
+	0x5D, 0xBF, 0x17, 0x41,
+
+	0xBA, 0x19, 0x46, 0x75, 0x2F, 0xA4, 0xD7, 0xB2,
+	0x09, 0x1B, 0x89, 0x05, 0x6C, 0x0A, 0x6E, 0xB3,
+	0x4C, 0x80, 0x89, 0x21, 0x9E, 0x07, 0x47, 0x76,
+	0x00, 0x93, 0x16, 0x37, 0xB7, 0x31, 0xEB, 0x5F,
+	0x52, 0x5C, 0xB1, 0xD4, 0xFE, 0xCC, 0x1C, 0x97,
+	0xE6, 0x3F, 0x4C, 0x98, 0x00, 0xFA, 0x4B, 0x01,
+	0x18, 0x3A, 0xBB, 0x85, 0xCA, 0xA0, 0x3B, 0x7B,
+	0x23, 0x75, 0xD6, 0xC7, 0x84, 0x29, 0xDF, 0xB1,
+	0x2D, 0x31, 0x8E, 0x59, 0x8E,
+
+	0x7D, 0x8D, 0x59, 0x44, 0xEA, 0x2A, 0x7F, 0x65,
+	0x27, 0x57, 0xF4, 0x77, 0x50, 0x59, 0xB1, 0xB2,
+	0xE5, 0x65, 0x4B, 0x54, 0x4F, 0x12, 0x6A, 0x6F,
+	0xDB, 0x53, 0xF3, 0x58, 0x41, 0xC2, 0xFB, 0x5B,
+	0xCB, 0x3D, 0x23, 0xEB, 0x3C, 0x6A, 0x32, 0x1A,
+	0x1D, 0x09, 0xF8, 0xB3, 0xF9, 0x50, 0xB7, 0xA5,
+	0xC4, 0x89, 0x87, 0x4C, 0x14, 0x0C, 0x3C, 0x0F,
+	0x9B, 0x7C, 0xD2, 0x3F, 0xFC, 0xDB, 0x7A, 0xD8,
+	0xDB, 0x32, 0xF0, 0x72, 0x49, 0xC1,
+
+	0xBB, 0xE0, 0xE3, 0x2D, 0x11, 0xC8, 0xF6, 0x2E,
+	0xA7, 0x92, 0x3D, 0x25, 0xAB, 0x25, 0x20, 0xD0,
+	0x66, 0x2F, 0x4B, 0x4B, 0x41, 0xB7, 0x97, 0xC0,
+	0x44, 0x98, 0x03, 0x1B, 0x90, 0xB7, 0x83, 0xE8,
+	0x26, 0x02, 0xA2, 0xB5, 0x95, 0xF1, 0x6C, 0xCA,
+	0x0D, 0x0D, 0x3B, 0xF0, 0x38, 0xD3, 0xF2, 0x92,
+	0x1E, 0xE6, 0xC7, 0xC8, 0xFD, 0x29, 0x5A, 0x78,
+	0x47, 0xC6, 0x2D, 0x30, 0x18, 0xC6, 0x64, 0x00,
+	0x67, 0xB6, 0xCF, 0x1F, 0xC3, 0x43, 0xF3,
+
+	0x3A, 0x18, 0xD5, 0x0A, 0x25, 0x9A, 0x27, 0x83,
+	0xDC, 0x4B, 0x7C, 0xFA, 0x52, 0x76, 0xD9, 0xE5,
+	0x7C, 0x15, 0xE8, 0x88, 0x9A, 0xAA, 0xF2, 0xB7,
+	0x98, 0x4C, 0xCD, 0x70, 0xC4, 0x2A, 0x34, 0xBF,
+	0x1C, 0xE5, 0xC0, 0xB4, 0xD6, 0x6C, 0xBC, 0x4B,
+	0xED, 0x31, 0x92, 0x2C, 0x72, 0xC0, 0x89, 0x98,
+	0x2E, 0x25, 0x3B, 0x0D, 0x97, 0xF5, 0x58, 0x36,
+	0xDB, 0x10, 0x00, 0xAA, 0x03, 0x46, 0xEB, 0x74,
+	0x9A, 0x06, 0xB3, 0x8F, 0x1E, 0xFF, 0x09, 0xD5,
+
+	0xB9, 0x97, 0x04, 0x5A, 0xEF, 0x14, 0xCD, 0x74,
+	0xF1, 0x8F, 0xDB, 0x7D, 0x6F, 0x82, 0xC0, 0x92,
+	0x58, 0x7B, 0x06, 0x54, 0x4E, 0xC3, 0x63, 0x8E,
+	0x2D, 0x1C, 0x20, 0x15, 0x1A, 0xF1, 0x62, 0x18,
+	0xAD, 0xC9, 0x11, 0xA6, 0x58, 0x77, 0x11, 0xF2,
+	0x44, 0xDE, 0xC6, 0x7B, 0xAE, 0xFC, 0x7E, 0xF6,
+	0x08, 0x7C, 0xB5, 0x45, 0x5F, 0x1C, 0x13, 0x51,
+	0xDA, 0xAC, 0x4D, 0xE0, 0xB3, 0xDA, 0xB6, 0xFC,
+	0x36, 0xCE, 0xCA, 0x4B, 0x2E, 0xEB, 0xD9, 0x66,
+	0xAE,
+
+	0x94, 0x56, 0x3A, 0xFD, 0x33, 0x4F, 0xD4, 0xB9,
+	0xFE, 0x62, 0x23, 0x18, 0x82, 0x21, 0x51, 0x64,
+	0x6C, 0x2E, 0x1D, 0xEA, 0x10, 0x8A, 0xA0, 0x2A,
+	0xCF, 0xF0, 0x0A, 0x03, 0x1E, 0x58, 0x4F, 0xDF,
+	0x9E, 0x09, 0xBD, 0x32, 0x61, 0xF6, 0xAB, 0x4D,
+	0xF3, 0xDB, 0x08, 0xA9, 0xCF, 0x78, 0xF0, 0x5E,
+	0x76, 0x72, 0xB7, 0xDC, 0x38, 0xB8, 0x40, 0xA9,
+	0xC9, 0x47, 0x6B, 0x22, 0x0C, 0x41, 0xA3, 0x90,
+	0x93, 0xBA, 0x77, 0x61, 0xFA, 0x3C, 0x5E, 0x15,
+	0x9D, 0x14,
+
+	0x8F, 0x75, 0xA1, 0x3A, 0x71, 0xAF, 0x1D, 0x56,
+	0x89, 0x03, 0xEB, 0x7A, 0x81, 0x73, 0x93, 0xA4,
+	0xC2, 0xCA, 0x50, 0x4C, 0x46, 0xE1, 0x81, 0x22,
+	0x9C, 0x05, 0xC1, 0xF1, 0x0E, 0xEA, 0x6B, 0x93,
+	0x52, 0xEF, 0xDF, 0x14, 0xEB, 0x5F, 0xB3, 0x13,
+	0xB0, 0xA2, 0x16, 0x71, 0x1C, 0xC3, 0x7D, 0x33,
+	0xAA, 0x83, 0xFD, 0xD9, 0xF7, 0x7C, 0xD3, 0xF3,
+	0x66, 0x69, 0xBA, 0x7E, 0x5A, 0xD0, 0x94, 0x46,
+	0x95, 0xD9, 0x05, 0xC1, 0x70, 0x58, 0x1C, 0xB8,
+	0xAB, 0x5D, 0xCC,
+
+	0x19, 0x26, 0xA6, 0xA1, 0xCC, 0xEE, 0xC0, 0xD8,
+	0x70, 0x12, 0xDC, 0x63, 0xFC, 0xFE, 0x49, 0x30,
+	0x18, 0x48, 0x73, 0x69, 0x97, 0x45, 0x24, 0x39,
+	0x27, 0xD1, 0xCF, 0x2F, 0xE9, 0xDC, 0x4B, 0x46,
+	0xC9, 0xDF, 0x8B, 0x80, 0x36, 0x67, 0x48, 0xDA,
+	0x62, 0x17, 0xBD, 0x12, 0x55, 0x0C, 0xC7, 0x12,
+	0x83, 0x8B, 0x89, 0x29, 0x63, 0x8E, 0x2C, 0x15,
+	0xDD, 0x4A, 0xBA, 0xBC, 0x21, 0xAE, 0x67, 0x49,
+	0x5C, 0x04, 0x80, 0x0E, 0x03, 0xDD, 0x00, 0xB2,
+	0xD2, 0x20, 0x2D, 0x0D,
+
+	0x03, 0x00, 0x24, 0x0C, 0x10, 0xE8, 0x64, 0x17,
+	0x02, 0x46, 0x7E, 0x12, 0xDE, 0xC2, 0x53, 0x28,
+	0x3C, 0x7E, 0x18, 0x08, 0x23, 0xB9, 0xF5, 0xA4,
+	0x61, 0x30, 0xBC, 0x09, 0xBB, 0xEA, 0x14, 0x3A,
+	0xE6, 0xEA, 0x09, 0x4E, 0x60, 0xAB, 0x08, 0xE4,
+	0xE3, 0x9C, 0x30, 0x64, 0xA0, 0xF9, 0xAB, 0x3F,
+	0x6D, 0x6D, 0x6E, 0x06, 0x55, 0x98, 0x81, 0xB0,
+	0x0B, 0x68, 0x4B, 0x92, 0x96, 0x34, 0x6B, 0xC8,
+	0x43, 0x04, 0x65, 0x9B, 0x24, 0xA1, 0x7F, 0x6E,
+	0xCD, 0xEA, 0x3A, 0xBC, 0x5E,
+
+	0xAD, 0x92, 0x4A, 0xD1, 0xF5, 0xEC, 0xE8, 0xA1,
+	0xB1, 0x18, 0x19, 0x98, 0x0E, 0xF7, 0x40, 0xF6,
+	0x55, 0xB6, 0x1D, 0x6B, 0x38, 0x71, 0xB0, 0x46,
+	0xD3, 0xED, 0xAB, 0x5C, 0x9A, 0x15, 0x7A, 0x67,
+	0xDE, 0xCC, 0x61, 0x30, 0x00, 0x2A, 0x4E, 0xB4,
+	0x69, 0x0A, 0xC1, 0x6F, 0x2C, 0x5B, 0x2B, 0x74,
+	0xC8, 0x66, 0x56, 0x64, 0x52, 0x43, 0x2F, 0x43,
+	0x61, 0x30, 0x38, 0x37, 0x02, 0xD0, 0x06, 0x45,
+	0x9A, 0x61, 0xD6, 0xFF, 0xFA, 0xDF, 0x1B, 0x7B,
+	0xAE, 0x03, 0x92, 0xA5, 0xCA, 0x3C,
+
+	0x44, 0x9E, 0x03, 0xCC, 0xC2, 0x15, 0x9A, 0x49,
+	0x9D, 0x5B, 0xD0, 0x02, 0x53, 0x07, 0xCB, 0x82,
+	0xDF, 0x6D, 0x9E, 0x25, 0xFF, 0x1F, 0x61, 0xAC,
+	0xC1, 0xD2, 0x15, 0x0D, 0x9F, 0x77, 0xE5, 0xED,
+	0xB1, 0xF7, 0xD7, 0xEE, 0x5B, 0x5A, 0xA8, 0xE6,
+	0x6B, 0xEE, 0x3A, 0x96, 0xF7, 0x8A, 0x14, 0xBE,
+	0xF4, 0xC1, 0xDE, 0x20, 0xDC, 0xBC, 0x8A, 0x3F,
+	0x03, 0x49, 0x8E, 0xC8, 0xCC, 0xD9, 0x8D, 0x6C,
+	0xE9, 0x32, 0x08, 0xDE, 0xF8, 0x96, 0x73, 0x5D,
+	0x79, 0xA3, 0xA9, 0x23, 0x37, 0x7E, 0x46,
+
+	0x2D, 0x1F, 0xBE, 0xFE, 0x1D, 0x93, 0x19, 0x6A,
+	0x02, 0xF3, 0x2D, 0x49, 0x43, 0x2B, 0xA4, 0x07,
+	0xA8, 0xFF, 0xC4, 0x66, 0xEB, 0x3E, 0x18, 0xE9,
+	0x18, 0x21, 0x0B, 0xBA, 0x1F, 0xC5, 0xF3, 0xD7,
+	0xC7, 0x99, 0x6D, 0x52, 0x76, 0x14, 0xEC, 0x62,
+	0x27, 0xF8, 0x1A, 0x87, 0x8C, 0x41, 0x69, 0x73,
+	0x6E, 0xC9, 0x46, 0x0E, 0xE9, 0x9C, 0x1E, 0x18,
+	0xEB, 0x58, 0x93, 0x48, 0x7C, 0xF6, 0x2E, 0x73,
+	0x63, 0x63, 0x77, 0xA0, 0x47, 0x0C, 0xE6, 0x2D,
+	0x14, 0xF4, 0xEB, 0xC3, 0x8E, 0x1C, 0x0A, 0xD9,
+
+	0xDF, 0xFF, 0x0F, 0x0A, 0x59, 0x0A, 0x90, 0x5A,
+	0xD7, 0xCA, 0x60, 0xEE, 0xA2, 0x2A, 0xE0, 0x22,
+	0x8A, 0xA1, 0xF4, 0x4C, 0x45, 0x48, 0x29, 0x4B,
+	0xC5, 0x81, 0xF8, 0x58, 0x88, 0x67, 0x8F, 0x2F,
+	0xF1, 0x82, 0x16, 0x59, 0x71, 0x27, 0x7D, 0xE7,
+	0x70, 0x01, 0x03, 0xE6, 0x11, 0x4E, 0x74, 0x72,
+	0xB3, 0x49, 0x7E, 0x3E, 0x69, 0xD1, 0x44, 0x60,
+	0xE4, 0x93, 0xB5, 0x4F, 0xD4, 0xC2, 0x44, 0xE4,
+	0xAB, 0xC1, 0xAE, 0xF4, 0x36, 0xA1, 0x5C, 0x62,
+	0xB6, 0x80, 0xCB, 0xD1, 0x45, 0x73, 0xF7, 0xA9,
+	0xEF,
+
+	0x70, 0x51, 0x59, 0x19, 0xD5, 0x82, 0xE2, 0xDE,
+	0x76, 0x8A, 0xF4, 0xC3, 0x38, 0xB4, 0x6D, 0x28,
+	0x98, 0x62, 0xD3, 0xBC, 0x95, 0x82, 0x98, 0x72,
+	0x70, 0x41, 0x26, 0x59, 0xA6, 0xB0, 0x6F, 0xC9,
+	0x2B, 0x43, 0x07, 0xF3, 0x16, 0xDB, 0x19, 0xB4,
+	0x1A, 0x4A, 0x6D, 0x6C, 0x7A, 0x02, 0x74, 0x02,
+	0xE0, 0x27, 0xEB, 0xCD, 0x9A, 0xC6, 0x80, 0x55,
+	0xBD, 0x78, 0x90, 0x35, 0xE0, 0xFD, 0xED, 0xEE,
+	0x4B, 0xDD, 0x75, 0x05, 0x45, 0xBF, 0x83, 0xBD,
+	0x6A, 0x21, 0xAE, 0x97, 0xED, 0xDB, 0x2D, 0x33,
+	0x64, 0xEC,
+
+	0xB9, 0xE6, 0xC4, 0x5F, 0x34, 0x1B, 0x92, 0x1C,
+	0xC4, 0xE9, 0x2D, 0x7B, 0x07, 0xFE, 0x54, 0x63,
+	0x36, 0x20, 0x8D, 0x91, 0x62, 0xBD, 0xDF, 0xC9,
+	0xCA, 0xE1, 0x5A, 0x60, 0x77, 0x31, 0x2E, 0xCC,
+	0x0E, 0x4D, 0xD5, 0xAB, 0x89, 0x66, 0x25, 0x99,
+	0x41, 0xC1, 0x26, 0x7C, 0x2A, 0x3F, 0xD1, 0x02,
+	0xE1, 0x14, 0x05, 0x10, 0x0E, 0x3F, 0x64, 0x7B,
+	0xFB, 0x9D, 0x48, 0x63, 0x04, 0xAD, 0xD1, 0xBB,
+	0x83, 0x47, 0x89, 0x10, 0xF1, 0x98, 0xCE, 0x31,
+	0x61, 0x35, 0x74, 0xE5, 0x52, 0x67, 0xE1, 0x33,
+	0x01, 0xFE, 0xBE,
+
+	0xD1, 0x6C, 0x8B, 0x94, 0x6E, 0x05, 0x5B, 0xC7,
+	0x3F, 0x04, 0x1C, 0x5E, 0xC5, 0xD2, 0x94, 0x20,
+	0x49, 0xBD, 0x97, 0x10, 0x40, 0x17, 0x4C, 0xFA,
+	0x73, 0x32, 0x3A, 0xB6, 0x8E, 0xF2, 0xA1, 0x2F,
+	0x0B, 0x0F, 0xCC, 0x14, 0x7F, 0x9E, 0x22, 0xA6,
+	0xC0, 0x43, 0x63, 0xFA, 0xAB, 0x50, 0x62, 0x81,
+	0x74, 0xAB, 0x88, 0xC8, 0xAE, 0x67, 0xE7, 0xAC,
+	0x0B, 0xBF, 0xBA, 0xA7, 0x0D, 0x23, 0xDD, 0x63,
+	0x29, 0x86, 0xAF, 0x44, 0xD9, 0x86, 0x6D, 0x6C,
+	0x35, 0x39, 0x99, 0xF4, 0xCD, 0x94, 0x6E, 0x89,
+	0x96, 0xB7, 0x56, 0xD1,
+
+	0xDB, 0x06, 0x00, 0x29, 0xD1, 0xC3, 0x3B, 0x11,
+	0xB8, 0xFE, 0x2F, 0xE1, 0x0E, 0xD0, 0xF3, 0xDD,
+	0x9C, 0xE4, 0xD3, 0x50, 0x91, 0x69, 0x2D, 0x30,
+	0xFD, 0xEC, 0x69, 0x6D, 0xCA, 0x20, 0x39, 0xBC,
+	0xAC, 0x20, 0x45, 0xB9, 0x09, 0x34, 0xFE, 0xD1,
+	0x9B, 0x57, 0xAA, 0xFB, 0xD9, 0x44, 0xF4, 0xED,
+	0xC6, 0x7A, 0x95, 0x71, 0x7B, 0x12, 0x02, 0xC0,
+	0x6E, 0x7D, 0x2D, 0x94, 0x57, 0x77, 0xF1, 0xB0,
+	0xDC, 0x9D, 0x6D, 0x17, 0xAE, 0x90, 0x70, 0xE6,
+	0xED, 0x5C, 0xE5, 0xDF, 0x38, 0xF0, 0x0E, 0xF0,
+	0xA8, 0x61, 0x02, 0x4D, 0x33,
+
+	0x37, 0x67, 0xC0, 0x19, 0x38, 0x6A, 0x41, 0x30,
+	0x4A, 0x6D, 0x9D, 0xF0, 0xF6, 0x7B, 0x99, 0x71,
+	0x7A, 0xFF, 0x0B, 0x57, 0xC8, 0x61, 0xE8, 0x1B,
+	0xFC, 0x34, 0x55, 0xE1, 0x64, 0xD5, 0xEF, 0x73,
+	0x68, 0xB6, 0xA6, 0x17, 0x08, 0xDF, 0x58, 0x9B,
+	0x88, 0xEC, 0x66, 0xE8, 0xE6, 0x52, 0xC7, 0xB2,
+	0x20, 0xCA, 0x86, 0x88, 0x8C, 0xF2, 0x31, 0xA1,
+	0x28, 0xAD, 0xAA, 0x0A, 0x26, 0x8F, 0x61, 0x94,
+	0xE3, 0xE3, 0xD2, 0xFF, 0x4F, 0x78, 0x77, 0x11,
+	0x1A, 0xE1, 0x9C, 0x9B, 0xBF, 0x96, 0x82, 0x6E,
+	0x8B, 0x14, 0xB8, 0xBF, 0x6E, 0x26,
+
+	0x9C, 0x6E, 0x6D, 0x0C, 0x02, 0x60, 0xF3, 0xC0,
+	0x0C, 0x8B, 0x75, 0xAD, 0x03, 0x89, 0x55, 0x5E,
+	0xC7, 0x4C, 0xBF, 0x08, 0x0E, 0x8C, 0x9F, 0xE1,
+	0x3B, 0x35, 0xFB, 0x5C, 0xD3, 0x9B, 0x6C, 0x40,
+	0x16, 0x75, 0xDF, 0xD7, 0x74, 0x67, 0x63, 0x13,
+	0x94, 0x62, 0xAB, 0x7A, 0xCB, 0xD1, 0xBE, 0xD8,
+	0x5D, 0x03, 0x53, 0x31, 0x2A, 0xF0, 0xD5, 0x18,
+	0x37, 0x77, 0x35, 0x07, 0x2D, 0x87, 0xF6, 0xD5,
+	0xBD, 0xCA, 0x0D, 0x5A, 0x89, 0x8B, 0xCB, 0x6F,
+	0x24, 0x6F, 0x5B, 0xE8, 0xE9, 0xAB, 0x9A, 0x81,
+	0x83, 0x5E, 0xC8, 0x9F, 0xFD, 0x68, 0x65,
+
+	0x4F, 0x40, 0xA7, 0xFA, 0x0C, 0x9F, 0xD0, 0xC0,
+	0x51, 0xD5, 0x4D, 0xD4, 0xDB, 0xE2, 0x95, 0xEA,
+	0xC1, 0x42, 0x65, 0x37, 0x3C, 0x95, 0x1D, 0x2B,
+	0x9E, 0xE2, 0xA0, 0xCB, 0x4E, 0xF9, 0xD4, 0x97,
+	0x92, 0x9E, 0xD2, 0xA1, 0x7A, 0xAB, 0x33, 0x56,
+	0x52, 0x3A, 0x04, 0x71, 0xAA, 0x0F, 0x9E, 0xC0,
+	0xC0, 0xD2, 0x97, 0x6C, 0xE2, 0x5C, 0xB7, 0xA4,
+	0xD3, 0x74, 0x85, 0x6C, 0xFD, 0xFB, 0xB1, 0xCB,
+	0xE1, 0xA7, 0xCC, 0x9B, 0x7F, 0x6B, 0x08, 0xA6,
+	0x11, 0x07, 0x7F, 0x2A, 0x1B, 0xD9, 0x6C, 0xA2,
+	0xFF, 0xF8, 0xC4, 0x39, 0xD2, 0x6E, 0xFC, 0xA1,
+
+	0xE1, 0x29, 0xBC, 0x00, 0x8A, 0xC8, 0x46, 0x97,
+	0x0E, 0x8D, 0x0D, 0x59, 0xF1, 0xA7, 0x6D, 0xEB,
+	0xEC, 0x3D, 0x6E, 0x77, 0x77, 0x76, 0x80, 0x15,
+	0x54, 0xC7, 0x8D, 0xAF, 0xD1, 0xE4, 0x28, 0x43,
+	0xF6, 0x3F, 0xA8, 0x99, 0x89, 0xA6, 0xF3, 0xC6,
+	0x33, 0x48, 0x7B, 0xC0, 0x48, 0xCE, 0xB2, 0xDC,
+	0xA8, 0x34, 0x52, 0xB8, 0x32, 0x06, 0xFB, 0x75,
+	0x87, 0x31, 0x2B, 0xD6, 0xEC, 0xD9, 0x6F, 0xC0,
+	0xDC, 0xC0, 0x99, 0xE1, 0xBF, 0xB5, 0xA0, 0xEC,
+	0x41, 0xD1, 0x92, 0xD0, 0x25, 0xDD, 0x02, 0xB4,
+	0xC2, 0xEC, 0xDF, 0xB5, 0xEA, 0xA7, 0xBE, 0xB8,
+	0x69,
+
+	0xC9, 0x64, 0xEE, 0x27, 0xE6, 0x2B, 0xB0, 0xD0,
+	0x24, 0x14, 0x28, 0xFA, 0x0C, 0xAB, 0x25, 0x10,
+	0x6C, 0xA4, 0xF7, 0xF6, 0xDC, 0xF2, 0xB5, 0x57,
+	0x56, 0x45, 0x0E, 0x21, 0xC0, 0x10, 0xFA, 0x25,
+	0xCE, 0x71, 0x5C, 0x1D, 0x3F, 0x3B, 0xA3, 0xC8,
+	0xD5, 0xBC, 0xDA, 0x80, 0x5C, 0xC1, 0x07, 0x02,
+	0x00, 0xAE, 0x02, 0x56, 0x86, 0xB8, 0x2D, 0x6E,
+	0xE6, 0x82, 0x92, 0x40, 0x8B, 0x2D, 0xBD, 0x14,
+	0x2A, 0x8D, 0xAA, 0x19, 0x3F, 0x2B, 0x3C, 0x2D,
+	0x6F, 0x1C, 0xAD, 0x49, 0x4F, 0xE8, 0x6F, 0x81,
+	0xA2, 0x1D, 0x60, 0x4E, 0xFA, 0xFE, 0x69, 0x8B,
+	0xF2, 0x2E,
+
+	0x2A, 0x8E, 0xE1, 0xBB, 0x06, 0xE4, 0xC0, 0xF3,
+	0x86, 0x7B, 0x0C, 0x63, 0xE7, 0xAD, 0x9E, 0xD0,
+	0x6E, 0x9A, 0x6A, 0x00, 0x17, 0x1D, 0xFF, 0xFE,
+	0x4C, 0x7E, 0x01, 0x87, 0xF7, 0x52, 0x57, 0x45,
+	0xC4, 0x0A, 0xB1, 0xB9, 0xF3, 0x18, 0xF5, 0xC8,
+	0x3B, 0x26, 0x18, 0xA2, 0x69, 0x50, 0xAF, 0x0A,
+	0x30, 0x95, 0xB9, 0xC9, 0xE5, 0xF6, 0xE4, 0x19,
+	0x7F, 0x35, 0x36, 0x8E, 0x9C, 0x3F, 0xDD, 0xE6,
+	0xFE, 0x9A, 0xF5, 0x03, 0x88, 0x85, 0xF0, 0x27,
+	0xEB, 0x40, 0x8E, 0xE9, 0xC8, 0x63, 0x5F, 0x10,
+	0x5E, 0x8C, 0x48, 0xAA, 0x6D, 0x83, 0x7F, 0xF4,
+	0xEF, 0xEC, 0x81,
+
+	0x45, 0x2B, 0x48, 0x34, 0x74, 0x37, 0xC2, 0x98,
+	0xDB, 0x5D, 0x82, 0xB3, 0xB7, 0x79, 0x86, 0xD2,
+	0x55, 0x2F, 0xAA, 0x71, 0x53, 0xA8, 0x44, 0x3E,
+	0x06, 0x5C, 0x5A, 0xA5, 0x4A, 0x29, 0x47, 0x86,
+	0xDD, 0x41, 0x28, 0x84, 0x7D, 0x03, 0xA3, 0x73,
+	0x48, 0x51, 0xAA, 0xF4, 0xBF, 0xEB, 0x58, 0x7B,
+	0xD0, 0x69, 0x93, 0x0B, 0xCF, 0x8E, 0x1B, 0xED,
+	0xA5, 0x95, 0x20, 0xE9, 0x5B, 0x21, 0x6C, 0xC2,
+	0x17, 0xBE, 0xEB, 0x98, 0x76, 0x22, 0x0C, 0xAA,
+	0x2C, 0x9D, 0xA3, 0x6E, 0xDD, 0xAC, 0x5A, 0x21,
+	0x57, 0xA3, 0xC1, 0x5D, 0xD0, 0xD0, 0x4C, 0x90,
+	0xF8, 0xED, 0xF7, 0x70,
+
+	0xD2, 0xDB, 0x8F, 0x36, 0xA5, 0x1A, 0xBF, 0xD1,
+	0x97, 0x3A, 0x55, 0x60, 0x61, 0x19, 0xC1, 0x62,
+	0x3D, 0x64, 0x5C, 0xF2, 0x01, 0x95, 0x8C, 0x78,
+	0xFE, 0x40, 0x8C, 0xEA, 0x0B, 0xF6, 0x15, 0x89,
+	0x2A, 0x65, 0xF3, 0x16, 0x17, 0xF0, 0xE0, 0xA7,
+	0x8D, 0xDF, 0xAE, 0x61, 0x75, 0x14, 0x84, 0xED,
+	0x44, 0xEC, 0xFE, 0x2C, 0xCD, 0x6F, 0x9E, 0xE9,
+	0x7C, 0x6C, 0xE1, 0xA7, 0xDF, 0x31, 0x8C, 0x6D,
+	0x14, 0x17, 0xB2, 0x78, 0xE2, 0xED, 0x88, 0x7C,
+	0x81, 0x00, 0x08, 0xFA, 0x47, 0x93, 0x2D, 0x14,
+	0x79, 0xCC, 0x26, 0x3A, 0xAB, 0xB0, 0x9B, 0x79,
+	0x88, 0xD0, 0x76, 0x27, 0xEC,
+
+	0x8C, 0x45, 0x63, 0xDC, 0x80, 0x83, 0x7E, 0x95,
+	0xB4, 0x07, 0xEA, 0x25, 0xE4, 0xF1, 0x9A, 0x31,
+	0x69, 0x04, 0x38, 0xDE, 0x9E, 0x57, 0xEA, 0xD1,
+	0x14, 0xD7, 0xE4, 0x8E, 0x3C, 0xAB, 0x33, 0xF2,
+	0xB0, 0xFF, 0x2E, 0x7E, 0x2C, 0x70, 0xB4, 0x8F,
+	0x63, 0xCF, 0x2F, 0xF3, 0xB5, 0x83, 0xAE, 0x44,
+	0x3B, 0xA8, 0xAF, 0x4C, 0x84, 0xDF, 0xB9, 0x08,
+	0xFE, 0x42, 0xBC, 0xBC, 0x4E, 0xDD, 0xEC, 0x35,
+	0xEB, 0x7D, 0xAB, 0x8E, 0x04, 0x4C, 0x05, 0xED,
+	0xDB, 0xCC, 0x0B, 0x83, 0xA4, 0x6C, 0x58, 0x29,
+	0xB6, 0xA6, 0x7A, 0xEE, 0x7C, 0xF0, 0x07, 0x30,
+	0xCA, 0x78, 0x80, 0xBE, 0x74, 0x67,
+
+	0x22, 0xAB, 0xCA, 0x01, 0x09, 0xCF, 0x59, 0xC2,
+	0xBD, 0xA9, 0xD4, 0xBB, 0x08, 0xA3, 0xA9, 0x12,
+	0x8A, 0x0D, 0x42, 0xD5, 0xFE, 0x94, 0x8E, 0x57,
+	0xFF, 0xD4, 0x03, 0xC6, 0x0F, 0x18, 0xBD, 0x17,
+	0x2B, 0x6F, 0x35, 0x83, 0x30, 0x6C, 0x09, 0xE3,
+	0x53, 0x2C, 0xF2, 0xA8, 0xDB, 0xE6, 0xB2, 0x0B,
+	0x9F, 0x36, 0x39, 0xAC, 0xC9, 0x4E, 0x30, 0x18,
+	0x0F, 0x32, 0x5C, 0x14, 0x34, 0x68, 0xC0, 0x0A,
+	0x62, 0xD6, 0xA4, 0x18, 0xF3, 0x87, 0xE4, 0x08,
+	0xA1, 0x02, 0x57, 0xC8, 0xD9, 0x24, 0x55, 0x0D,
+	0xA6, 0xD4, 0xBF, 0x78, 0x23, 0x7D, 0x59, 0x50,
+	0xD7, 0x1D, 0x97, 0x4E, 0xA5, 0x1D, 0x26,
+
+	0x2E, 0xC2, 0x44, 0xD0, 0x5B, 0x2A, 0xE9, 0xA0,
+	0x50, 0xEA, 0xC8, 0x04, 0xDB, 0xA9, 0x77, 0x94,
+	0xE7, 0x64, 0x74, 0xBF, 0x0A, 0xE8, 0x34, 0xE8,
+	0x46, 0x06, 0xE1, 0xB3, 0x48, 0xA0, 0x3B, 0x48,
+	0x81, 0x9B, 0x63, 0x6D, 0x6A, 0x48, 0x02, 0x8B,
+	0x6C, 0x13, 0x95, 0x49, 0x67, 0xC1, 0x59, 0x5A,
+	0x7D, 0x41, 0x3F, 0x94, 0x4B, 0x62, 0x4B, 0xEA,
+	0x8F, 0x40, 0xB9, 0x6A, 0x23, 0xF6, 0xC8, 0xDF,
+	0x41, 0x9E, 0xBE, 0x57, 0xC9, 0x68, 0x4E, 0x13,
+	0x70, 0xBA, 0xCF, 0x7E, 0xC8, 0x38, 0xB5, 0x8F,
+	0x35, 0xEF, 0xA0, 0x1F, 0x40, 0xD1, 0x4D, 0xFE,
+	0x19, 0x07, 0x1A, 0x97, 0xC7, 0x78, 0xE0, 0x1A,
+
+	0xC9, 0x9C, 0xAF, 0xCA, 0x7C, 0xB2, 0x53, 0x4B,
+	0x97, 0x9C, 0xEF, 0x33, 0x9D, 0xA6, 0x13, 0xF8,
+	0xF2, 0x8A, 0x1A, 0x6E, 0xD0, 0xD4, 0x27, 0x3B,
+	0x2C, 0xD9, 0x6E, 0x93, 0xC4, 0xFE, 0x43, 0xBC,
+	0x35, 0x40, 0x86, 0x11, 0xBC, 0xEC, 0xDA, 0x53,
+	0x5D, 0x39, 0x96, 0xDF, 0x77, 0xAE, 0xB8, 0x79,
+	0x6A, 0xD0, 0xBC, 0x3E, 0x63, 0x01, 0x51, 0x6D,
+	0x5C, 0xB4, 0x8C, 0x7B, 0xE6, 0x73, 0x9B, 0xBA,
+	0x27, 0xDE, 0x5C, 0x84, 0x28, 0xFD, 0xE4, 0x37,
+	0x70, 0xC9, 0x3F, 0xF8, 0x9C, 0x54, 0xA1, 0xBC,
+	0xCA, 0xAB, 0x09, 0xE9, 0x43, 0xCA, 0x7D, 0xF7,
+	0x9B, 0x37, 0xAB, 0x9C, 0x72, 0x7A, 0xE3, 0x20,
+	0x92,
+
+	0xF9, 0xDE, 0x6B, 0xCF, 0x2F, 0xD9, 0x00, 0x65,
+	0x51, 0x46, 0x7A, 0xBE, 0x73, 0xD1, 0x37, 0xB8,
+	0x69, 0x20, 0x96, 0x79, 0xB1, 0x4B, 0x19, 0x3E,
+	0xFA, 0x9A, 0xB1, 0xA0, 0x17, 0x57, 0xBF, 0x3A,
+	0xA0, 0x0C, 0xFF, 0xF1, 0xAD, 0x70, 0x75, 0x94,
+	0x6C, 0x4B, 0x26, 0x29, 0x9B, 0x63, 0x8B, 0xE1,
+	0xEE, 0xA5, 0xE4, 0xCC, 0x9A, 0x06, 0xD5, 0x1F,
+	0xAA, 0xCB, 0x86, 0x8F, 0x92, 0x40, 0x84, 0x54,
+	0x51, 0xE5, 0x6A, 0xD5, 0xE3, 0x73, 0x6D, 0xAA,
+	0x8A, 0x54, 0x88, 0x96, 0xCF, 0x99, 0xA9, 0xFB,
+	0x93, 0xC7, 0x1A, 0xC2, 0x14, 0x0C, 0x62, 0x23,
+	0x5B, 0x63, 0x5F, 0x03, 0x9B, 0x89, 0xA5, 0xE4,
+	0x89, 0x08,
+
+	0x39, 0x66, 0x05, 0x68, 0x58, 0xE1, 0x89, 0xE3,
+	0x94, 0x1B, 0xE4, 0xB3, 0x13, 0x27, 0x0D, 0xE9,
+	0x41, 0x7F, 0x20, 0x62, 0xFA, 0x29, 0x2B, 0x4A,
+	0x14, 0x4B, 0x35, 0x18, 0x69, 0xD1, 0xC5, 0x34,
+	0xDA, 0x13, 0xCA, 0x40, 0x22, 0x1D, 0x69, 0x28,
+	0x40, 0x1A, 0xC2, 0x6E, 0xAA, 0x22, 0x45, 0xE3,
+	0x06, 0x22, 0x22, 0x32, 0xBD, 0xFD, 0x86, 0x78,
+	0x58, 0x93, 0x27, 0x32, 0x08, 0x8C, 0xB8, 0x3B,
+	0x81, 0x20, 0xAC, 0x7A, 0x73, 0x10, 0x39, 0xC4,
+	0xD7, 0xB5, 0x44, 0x63, 0x91, 0x07, 0x04, 0x54,
+	0x04, 0xA9, 0x01, 0x30, 0x8F, 0x7D, 0xB4, 0x18,
+	0x6C, 0x31, 0x69, 0x7B, 0x55, 0xCC, 0x25, 0x9D,
+	0xD5, 0xF9, 0x77,
+
+	0xC4, 0xCF, 0xF6, 0x33, 0x54, 0xED, 0x91, 0x89,
+	0x6C, 0xB5, 0xE0, 0x6B, 0x09, 0x0B, 0x68, 0x5A,
+	0x77, 0xD7, 0x77, 0x73, 0x81, 0xEF, 0x7B, 0x1E,
+	0xD6, 0x89, 0x75, 0x7F, 0x2B, 0x9C, 0xCC, 0x20,
+	0x21, 0x88, 0x54, 0xFA, 0x7A, 0x30, 0x41, 0xC3,
+	0x8D, 0xDE, 0x11, 0x47, 0xEE, 0x4D, 0x85, 0x75,
+	0xB3, 0x36, 0x05, 0xCD, 0xBE, 0xE3, 0xC3, 0x9D,
+	0x10, 0x22, 0x63, 0x20, 0xD0, 0x91, 0x91, 0x5E,
+	0x16, 0xD3, 0x1B, 0xDC, 0x2D, 0x62, 0x89, 0xB5,
+	0xB5, 0xBE, 0x1E, 0x89, 0x21, 0x0C, 0x26, 0xEA,
+	0xD2, 0x9C, 0x68, 0xB7, 0x23, 0xB6, 0x23, 0x23,
+	0xEB, 0x31, 0x21, 0xD3, 0x04, 0xD6, 0x95, 0x1E,
+	0x6E, 0xCA, 0x86, 0x49,
+
+	0x2F, 0x13, 0x49, 0x15, 0x99, 0x1D, 0xB8, 0xD4,
+	0x2E, 0x22, 0x22, 0x76, 0x04, 0x17, 0x67, 0xA7,
+	0x10, 0x12, 0xF9, 0x9A, 0x97, 0x1A, 0x46, 0x76,
+	0xAF, 0xD2, 0x88, 0x89, 0x08, 0xA2, 0x31, 0xE0,
+	0xA6, 0x2E, 0xD9, 0x32, 0x62, 0xC2, 0xA3, 0xCE,
+	0x32, 0x01, 0x67, 0x66, 0x29, 0xE4, 0x6E, 0x04,
+	0x12, 0x6B, 0x2B, 0x4D, 0xAE, 0xA0, 0x72, 0x22,
+	0x67, 0x2C, 0x64, 0xE2, 0x1D, 0x5A, 0x20, 0xC7,
+	0xF8, 0x40, 0xDA, 0xC3, 0x99, 0xFD, 0xE8, 0x4C,
+	0x7C, 0xDA, 0x9E, 0xF9, 0xF0, 0x0E, 0x43, 0xEF,
+	0x31, 0xB7, 0x86, 0x8D, 0x8C, 0x4C, 0x3B, 0x85,
+	0x14, 0x7D, 0x37, 0xE6, 0x50, 0xDF, 0x34, 0x0C,
+	0x6E, 0x2C, 0x8C, 0x72, 0x5B,
+
+	0xF2, 0x59, 0x8F, 0x8F, 0x68, 0x8E, 0xE6, 0x0B,
+	0xCC, 0xF2, 0x2E, 0xD9, 0x61, 0xDE, 0xD3, 0x3A,
+	0x83, 0xED, 0xCF, 0xC5, 0x26, 0x4D, 0x0C, 0xAA,
+	0x45, 0x61, 0x98, 0x2C, 0x66, 0x55, 0x25, 0x93,
+	0x55, 0x0E, 0x8C, 0x86, 0x7E, 0x02, 0x67, 0x35,
+	0xE1, 0x05, 0x1D, 0x11, 0xF4, 0x56, 0x3B, 0xAC,
+	0xF9, 0x4F, 0x2C, 0x7F, 0x5E, 0x3A, 0x1B, 0xCA,
+	0x76, 0xAE, 0x44, 0xA8, 0x37, 0xA6, 0xFC, 0xEE,
+	0xE4, 0x8D, 0xAA, 0xD0, 0x7B, 0x1B, 0xDA, 0x48,
+	0x87, 0x24, 0x24, 0xD3, 0x9F, 0xBB, 0xD2, 0x84,
+	0x9A, 0x1D, 0x61, 0xD5, 0x5F, 0xCE, 0xF8, 0x2B,
+	0xBA, 0x96, 0x82, 0xED, 0xF1, 0x52, 0xA1, 0xF4,
+	0xFA, 0x29, 0x91, 0x63, 0xAD, 0x2D,
+
+	0xA2, 0x4E, 0xC1, 0x52, 0x07, 0x3A, 0x0E, 0x1A,
+	0x3E, 0x82, 0x7D, 0xBC, 0x77, 0xC7, 0x50, 0x4F,
+	0x10, 0xA3, 0xBF, 0xDB, 0x2E, 0x92, 0x02, 0x20,
+	0x7D, 0x0A, 0xD1, 0x93, 0xE8, 0x89, 0xF9, 0x21,
+	0xA0, 0xAD, 0x35, 0x0D, 0x10, 0xDA, 0xB4, 0xA2,
+	0xED, 0xF6, 0x72, 0x09, 0xAE, 0x2F, 0xBF, 0x5D,
+	0xA3, 0x93, 0xD5, 0xF1, 0x1F, 0x34, 0x19, 0x00,
+	0x60, 0xB8, 0xC0, 0xFB, 0x96, 0x95, 0x35, 0x28,
+	0x8C, 0x27, 0xA0, 0x74, 0xFD, 0x1D, 0xA8, 0x49,
+	0x53, 0x0E, 0x79, 0x9A, 0x02, 0x2D, 0xD5, 0xEA,
+	0xC2, 0xEA, 0x67, 0x75, 0xE1, 0x77, 0x60, 0xB4,
+	0x14, 0xE8, 0x04, 0xE3, 0x91, 0x19, 0x44, 0x4F,
+	0xE1, 0x50, 0x95, 0x1D, 0xBE, 0x98, 0x11,
+
+	0xF0, 0x0B, 0x87, 0x25, 0xD2, 0x1B, 0x69, 0xB0,
+	0xEE, 0x86, 0x70, 0xB8, 0x0D, 0xE3, 0x8A, 0xC0,
+	0x49, 0x67, 0x2A, 0x81, 0xB6, 0x6B, 0x3E, 0x9E,
+	0x95, 0xE1, 0xED, 0x98, 0xD0, 0xDF, 0x33, 0x7E,
+	0xF8, 0xA2, 0xA6, 0x4C, 0x75, 0x4C, 0x23, 0x7E,
+	0x8E, 0xFA, 0xCA, 0x4A, 0x60, 0xA3, 0x4C, 0x15,
+	0x57, 0x6B, 0x25, 0x2A, 0xEE, 0x14, 0x05, 0x67,
+	0x5C, 0x96, 0x4F, 0x92, 0xFA, 0x83, 0x05, 0xDA,
+	0xFD, 0x14, 0xE9, 0x00, 0xB6, 0x17, 0xCC, 0xD4,
+	0xFD, 0xA9, 0x9A, 0xE9, 0x49, 0x58, 0xFE, 0x8E,
+	0x5F, 0xC8, 0x2D, 0x30, 0xC1, 0x73, 0x5E, 0x77,
+	0x97, 0x00, 0xC5, 0x95, 0xDB, 0x3C, 0x0F, 0x8E,
+	0x06, 0xD5, 0xCC, 0x8B, 0xE0, 0x3C, 0xEF, 0xB1,
+
+	0x05, 0xC8, 0xFE, 0xDE, 0x00, 0x91, 0x71, 0x50,
+	0x89, 0x26, 0x18, 0x51, 0x00, 0x84, 0x90, 0x48,
+	0xAC, 0xB0, 0x93, 0x1F, 0x57, 0x3B, 0x3D, 0x18,
+	0x57, 0x4A, 0x02, 0x14, 0x41, 0xC9, 0xA3, 0x13,
+	0x93, 0xD0, 0x09, 0x8C, 0xDC, 0x5F, 0xE6, 0x0A,
+	0x7F, 0xB2, 0x6C, 0xC2, 0x0D, 0x35, 0x09, 0x24,
+	0xA9, 0xBD, 0x5F, 0x9B, 0x30, 0x14, 0x46, 0xC9,
+	0x5B, 0x77, 0x2A, 0xE7, 0x18, 0xA7, 0x15, 0xBB,
+	0xBC, 0x7C, 0x53, 0x2D, 0x24, 0x17, 0xA5, 0x07,
+	0xF8, 0xDA, 0x11, 0x28, 0xAA, 0x26, 0x8F, 0xC3,
+	0xB0, 0xA1, 0x74, 0x93, 0xC6, 0xF3, 0x37, 0xE2,
+	0xFF, 0x33, 0x82, 0xCF, 0x10, 0x76, 0xFF, 0xBC,
+	0x05, 0x06, 0x0D, 0x2C, 0x1C, 0x7F, 0x9E, 0x5E,
+	0xAB,
+
+	0xF0, 0xF7, 0x86, 0xDB, 0xB0, 0x51, 0xD9, 0xDC,
+	0x3F, 0x00, 0xC7, 0x79, 0x95, 0x6B, 0x90, 0xE8,
+	0xEB, 0xC2, 0xDF, 0x75, 0x6A, 0x3B, 0x4E, 0x1E,
+	0xA0, 0xD6, 0x70, 0x57, 0x5E, 0xF1, 0x8B, 0x3A,
+	0xE0, 0xF1, 0x6A, 0xD0, 0x66, 0xD4, 0x96, 0xB6,
+	0xC7, 0x33, 0x50, 0xF3, 0x20, 0xB1, 0x90, 0x93,
+	0xFC, 0xF1, 0x77, 0x74, 0x18, 0x4F, 0x5A, 0x0B,
+	0xA8, 0x1F, 0xD7, 0x3A, 0xF8, 0x36, 0x30, 0xD7,
+	0x26, 0x63, 0x6A, 0x3A, 0x84, 0x73, 0x2D, 0x2A,
+	0xF9, 0x37, 0xB1, 0x56, 0xB9, 0x8F, 0xEE, 0x02,
+	0xE1, 0x55, 0xA8, 0x17, 0xD7, 0xEB, 0x71, 0x0D,
+	0xF0, 0x88, 0xCF, 0xAB, 0x56, 0x5B, 0x41, 0xA5,
+	0xDB, 0xE5, 0x00, 0x15, 0xB9, 0x4A, 0x6A, 0xFF,
+	0x5D, 0x66,
+
+	0xDA, 0x41, 0x38, 0xA5, 0xAF, 0xB0, 0xBD, 0x58,
+	0x23, 0x07, 0xF3, 0x9F, 0x88, 0x82, 0x7A, 0xF1,
+	0x19, 0xEE, 0xAF, 0x53, 0x5F, 0xA3, 0xC8, 0x77,
+	0x3B, 0x85, 0x2D, 0xD2, 0x4B, 0xE3, 0x6A, 0xD3,
+	0x10, 0x2D, 0xBB, 0xC3, 0xB8, 0x2A, 0x03, 0x37,
+	0xC1, 0x96, 0x5D, 0x79, 0x19, 0xCB, 0x53, 0x7E,
+	0xEC, 0xC9, 0xA1, 0x94, 0x03, 0xFE, 0x70, 0xBC,
+	0x1B, 0x05, 0xFB, 0x35, 0xA1, 0x14, 0xA2, 0x64,
+	0x8A, 0xBC, 0x74, 0x27, 0xD7, 0xA4, 0x8A, 0x6B,
+	0x7D, 0x8F, 0xDF, 0x6C, 0x27, 0x8B, 0xE4, 0x5B,
+	0xA4, 0xD0, 0xA0, 0x6A, 0x23, 0xA9, 0x83, 0x5B,
+	0x05, 0xF5, 0x5C, 0xE3, 0x91, 0x3C, 0x25, 0xA8,
+	0x20, 0x40, 0xA4, 0xCF, 0xF0, 0x1A, 0xA4, 0x3A,
+	0x13, 0xBF, 0xE1,
+
+	0x3A, 0xCA, 0xBE, 0x5D, 0x16, 0x7F, 0xAE, 0xBE,
+	0x71, 0xE1, 0x5D, 0x01, 0x3E, 0x7E, 0xE7, 0x29,
+	0x9C, 0x1C, 0x3F, 0x4E, 0xCE, 0x23, 0x73, 0xF3,
+	0x89, 0xD5, 0xFA, 0xDD, 0x9E, 0x1E, 0xC2, 0x14,
+	0x02, 0x9B, 0x70, 0x66, 0xC0, 0x65, 0xF5, 0xBA,
+	0x5B, 0x78, 0x35, 0x81, 0xF1, 0x38, 0xEC, 0x1F,
+	0x74, 0x59, 0x4C, 0x67, 0x2A, 0xE7, 0xCA, 0x1E,
+	0x98, 0xFD, 0xCD, 0x2A, 0x2B, 0x5D, 0x63, 0x5F,
+	0xB9, 0x9E, 0x81, 0x6D, 0x1B, 0xE8, 0xCB, 0x95,
+	0x62, 0xC4, 0xEA, 0x3E, 0x60, 0x92, 0xA3, 0xA5,
+	0xC2, 0x10, 0x92, 0x65, 0x95, 0x4D, 0x42, 0xC5,
+	0x9A, 0xBF, 0x83, 0x97, 0xA4, 0x67, 0x30, 0xE1,
+	0x9A, 0xE1, 0x27, 0x96, 0x29, 0xC4, 0x5E, 0xA5,
+	0x70, 0x57, 0x65, 0xB0,
+
+	0x48, 0x66, 0x88, 0x63, 0x79, 0x8D, 0x5D, 0xEB,
+	0x15, 0x55, 0xBA, 0xBC, 0xC5, 0xB3, 0xD9, 0xFF,
+	0xFC, 0x02, 0xD2, 0xA3, 0x21, 0x37, 0xD3, 0xEC,
+	0x5A, 0xC0, 0xB3, 0x1F, 0x07, 0x06, 0x60, 0x72,
+	0xB2, 0xCA, 0x9A, 0x46, 0x7B, 0x99, 0x75, 0xE3,
+	0xA8, 0xFA, 0x01, 0x08, 0x0E, 0x22, 0x49, 0x4E,
+	0x1B, 0xA9, 0x4D, 0x20, 0x4F, 0x7A, 0x8D, 0xFE,
+	0x12, 0x75, 0x55, 0x65, 0xBD, 0xB3, 0xB3, 0x18,
+	0x3A, 0x3E, 0x44, 0x3A, 0x71, 0xED, 0xB1, 0xE9,
+	0xAC, 0x5B, 0xE4, 0x7A, 0xD2, 0x7A, 0x20, 0x5A,
+	0x59, 0xA9, 0x38, 0xF9, 0xF4, 0x28, 0x85, 0xB2,
+	0xB2, 0xF1, 0x53, 0x7F, 0x0F, 0x82, 0xAE, 0x85,
+	0x00, 0xAB, 0x11, 0x13, 0x12, 0xD7, 0xB5, 0x10,
+	0x68, 0xA2, 0x73, 0xDB, 0x1D,
+
+	0xD5, 0xAA, 0x28, 0x8D, 0xD1, 0xBF, 0x7E, 0xB1,
+	0xF5, 0x08, 0xC6, 0xA8, 0xD9, 0xB5, 0x27, 0xB5,
+	0x68, 0x33, 0xD8, 0xB5, 0x61, 0xEB, 0x52, 0xA5,
+	0x1D, 0xA8, 0xA0, 0x5A, 0xD3, 0x27, 0x29, 0xA4,
+	0x86, 0xAF, 0xA5, 0x89, 0x32, 0xE8, 0x66, 0x67,
+	0xEC, 0xC6, 0xD9, 0xE3, 0x51, 0x43, 0x22, 0x28,
+	0x45, 0x9A, 0x0C, 0x1A, 0x66, 0x56, 0x09, 0xD7,
+	0x01, 0x79, 0xA6, 0x78, 0x1E, 0x10, 0xC5, 0x03,
+	0x4D, 0xA5, 0x1F, 0x73, 0x7C, 0x5C, 0xB7, 0x14,
+	0x2F, 0x6C, 0x2F, 0x22, 0x48, 0x1C, 0x33, 0x92,
+	0x13, 0xB6, 0xB2, 0xBD, 0xF2, 0xD3, 0x07, 0x55,
+	0x9A, 0x5C, 0x9A, 0xD0, 0x77, 0x74, 0x59, 0xB5,
+	0x3F, 0xF2, 0xB3, 0xF5, 0x52, 0xE7, 0xB6, 0x1C,
+	0xC3, 0x0E, 0x3E, 0x9A, 0x6D, 0x1E,
+
+	0xDC, 0x15, 0x34, 0xF0, 0x88, 0x49, 0x66, 0x4E,
+	0x2E, 0x8D, 0x42, 0x70, 0xF4, 0x02, 0xD9, 0x43,
+	0x5E, 0xBE, 0x94, 0xDC, 0x71, 0xFD, 0x83, 0x93,
+	0xB6, 0x64, 0x37, 0x69, 0x32, 0xDA, 0x1E, 0x56,
+	0xE9, 0x48, 0x64, 0x98, 0x3F, 0x88, 0xC1, 0x2E,
+	0x3A, 0xDF, 0xF9, 0x46, 0x42, 0xCD, 0xAE, 0x03,
+	0x68, 0x7F, 0xFF, 0xBF, 0x58, 0xD9, 0x1F, 0x9B,
+	0x52, 0x86, 0xD6, 0x7B, 0xA6, 0xB0, 0x7D, 0x54,
+	0x4A, 0x13, 0x30, 0x35, 0xE2, 0xAE, 0x17, 0x61,
+	0x11, 0x91, 0x6B, 0xBC, 0x3D, 0x4B, 0x65, 0xFC,
+	0x3C, 0xE9, 0xA1, 0x07, 0x54, 0x3D, 0x37, 0x02,
+	0x45, 0xBA, 0xCE, 0xCF, 0xF2, 0x4B, 0x25, 0x4D,
+	0x10, 0x81, 0xEE, 0x9E, 0xCF, 0x37, 0x1C, 0x01,
+	0x3E, 0xD6, 0xB0, 0xEE, 0xB3, 0x0B, 0x71,
+
+	0x2F, 0xBD, 0x42, 0xB0, 0x19, 0x61, 0xE2, 0xEE,
+	0x6B, 0xF9, 0xB2, 0xAF, 0xE0, 0xC5, 0x73, 0x23,
+	0x97, 0xA3, 0x6F, 0x47, 0xDC, 0x4B, 0x2A, 0xCA,
+	0xB4, 0x64, 0x26, 0x34, 0x4F, 0x4D, 0x76, 0xBC,
+	0x4E, 0x46, 0xDF, 0xE7, 0x4E, 0x1D, 0x86, 0xC2,
+	0x7F, 0x6B, 0x6E, 0xE9, 0x97, 0xB6, 0x79, 0xA1,
+	0x2C, 0xDB, 0xA3, 0x22, 0xD4, 0x04, 0x32, 0x18,
+	0x8C, 0xB0, 0xE1, 0xF3, 0x54, 0x16, 0x47, 0xB0,
+	0x77, 0x11, 0x88, 0x4F, 0x36, 0x05, 0x9C, 0x52,
+	0xBF, 0x2D, 0x4D, 0xAE, 0x12, 0xA1, 0xF0, 0x67,
+	0xF2, 0x4B, 0x72, 0x4C, 0x35, 0x8B, 0x4B, 0xA7,
+	0x4A, 0x71, 0x3B, 0xBA, 0x34, 0x09, 0xED, 0x13,
+	0xF8, 0xC7, 0x96, 0x93, 0x4F, 0xA0, 0x2A, 0x1B,
+	0xD7, 0x2C, 0xA2, 0xC2, 0x58, 0xE8, 0xAD, 0x79,
+
+	0xD0, 0xEF, 0xA3, 0x15, 0xF5, 0xAB, 0x98, 0x49,
+	0xBC, 0x13, 0xF2, 0x11, 0x71, 0x05, 0x44, 0x63,
+	0x37, 0x16, 0x87, 0x34, 0x31, 0x56, 0x86, 0x4D,
+	0x14, 0x88, 0x8F, 0xAB, 0xB2, 0xB7, 0xEF, 0x79,
+	0x04, 0x65, 0xF9, 0x2A, 0xD0, 0xE2, 0xB4, 0x38,
+	0x7E, 0x1D, 0xB3, 0x77, 0x76, 0xF6, 0xCE, 0xA2,
+	0x75, 0xF8, 0x16, 0xF1, 0x5B, 0x39, 0xC7, 0x66,
+	0x17, 0x97, 0x40, 0xC9, 0x35, 0x75, 0x24, 0xB0,
+	0xA6, 0x74, 0x89, 0x98, 0x12, 0x37, 0x04, 0xBC,
+	0xCE, 0x4E, 0x62, 0xEB, 0x8D, 0xC3, 0x5E, 0x80,
+	0x16, 0x5C, 0x4E, 0x3F, 0xBD, 0xF7, 0xCF, 0x79,
+	0x49, 0x81, 0xE0, 0xDC, 0xC3, 0x6F, 0xD6, 0x5D,
+	0x99, 0x61, 0x74, 0x63, 0x69, 0x4B, 0x61, 0x25,
+	0xE7, 0xE1, 0x7C, 0x6B, 0x9F, 0xBC, 0x72, 0xE2,
+	0x9B,
+
+	0x93, 0x70, 0x24, 0x40, 0xCD, 0x11, 0x70, 0x66,
+	0xA2, 0x7A, 0x58, 0xBD, 0x93, 0x0F, 0xDB, 0xC1,
+	0x9A, 0xFE, 0xAE, 0x95, 0x37, 0x87, 0x15, 0x6E,
+	0x52, 0xF9, 0xF9, 0xD8, 0x81, 0x3D, 0xCD, 0x27,
+	0xCE, 0x72, 0x53, 0x03, 0xD3, 0xF3, 0xDF, 0x3C,
+	0x81, 0xB0, 0xEA, 0xD1, 0x1C, 0xB6, 0x60, 0xC9,
+	0xE9, 0x4D, 0x31, 0x4E, 0x16, 0xF5, 0x56, 0x18,
+	0x0C, 0x3F, 0x88, 0x5A, 0xC5, 0x5B, 0xB5, 0xC4,
+	0xC4, 0xFB, 0xFF, 0xF2, 0x1B, 0xB2, 0x48, 0x3D,
+	0xF0, 0xE2, 0x67, 0xA5, 0x13, 0x6C, 0xFB, 0x77,
+	0x95, 0x5E, 0x18, 0xEE, 0x02, 0xA1, 0x01, 0xB9,
+	0xB8, 0x83, 0xD5, 0x40, 0xD4, 0x70, 0x6C, 0x94,
+	0x4A, 0x76, 0x6D, 0x1F, 0x25, 0x6C, 0x14, 0xDB,
+	0xA4, 0x61, 0xBF, 0xA3, 0xED, 0x86, 0x06, 0x64,
+	0xF9, 0x5C,
+
+	0x63, 0xEE, 0x91, 0xCD, 0xF2, 0x1F, 0x20, 0x17,
+	0x62, 0x99, 0x35, 0xB9, 0x23, 0x15, 0x1C, 0xF2,
+	0xAC, 0x25, 0xA1, 0x42, 0xC2, 0x69, 0x40, 0x38,
+	0x5B, 0x1C, 0x43, 0x70, 0x4D, 0x43, 0x59, 0x20,
+	0xCA, 0xB8, 0x05, 0x8A, 0xA9, 0x56, 0x40, 0x74,
+	0x4D, 0x85, 0x3B, 0x45, 0x2D, 0xC0, 0x58, 0x77,
+	0x20, 0xFA, 0x79, 0x2E, 0x68, 0x3E, 0xB9, 0x40,
+	0x3D, 0xA6, 0x5E, 0x1A, 0xB7, 0x5B, 0x4C, 0xCF,
+	0xCA, 0x0E, 0x6E, 0x4E, 0x8C, 0xA6, 0x2F, 0xC9,
+	0xFF, 0xB6, 0x06, 0xCF, 0xD1, 0x2B, 0x41, 0x94,
+	0x3D, 0x88, 0x8F, 0xE6, 0x00, 0x92, 0x94, 0xD7,
+	0x08, 0xAD, 0xA8, 0x36, 0x17, 0xF6, 0x08, 0x86,
+	0x0D, 0xA7, 0x59, 0x3C, 0xF0, 0xB8, 0xE9, 0x32,
+	0x67, 0xEF, 0xE5, 0x71, 0xE6, 0x52, 0x60, 0x64,
+	0x87, 0x00, 0xA0,
+
+	0x96, 0x56, 0x12, 0xC3, 0x9F, 0x76, 0xF4, 0x5B,
+	0x5D, 0x07, 0xE9, 0xAB, 0x25, 0x21, 0x71, 0xDE,
+	0x4D, 0x1B, 0xC8, 0x49, 0xFD, 0x53, 0x06, 0x92,
+	0x19, 0x62, 0xAB, 0x87, 0xF2, 0xAA, 0xAA, 0xBD,
+	0xF4, 0x0F, 0x04, 0xAF, 0xFC, 0x88, 0xCF, 0x80,
+	0xD6, 0x80, 0x6B, 0x26, 0xD9, 0x17, 0x23, 0xD1,
+	0x38, 0xF7, 0x9C, 0x57, 0xC3, 0x54, 0x26, 0xF3,
+	0x9C, 0xD2, 0xB1, 0xD4, 0x59, 0x96, 0xBB, 0x1E,
+	0x97, 0xFA, 0x62, 0x1C, 0xB1, 0x33, 0xD9, 0xC5,
+	0x13, 0x36, 0x46, 0x40, 0x82, 0x14, 0x20, 0x7D,
+	0x8C, 0xE9, 0x39, 0x19, 0xFB, 0x17, 0xA4, 0xC3,
+	0xD8, 0x82, 0xAD, 0xAF, 0x92, 0xB4, 0x13, 0x1B,
+	0x7E, 0x34, 0x52, 0x79, 0xD8, 0xB1, 0xE3, 0x2F,
+	0x73, 0x10, 0xF5, 0xA5, 0xC1, 0xCD, 0xA3, 0xC3,
+	0x64, 0xDC, 0xCC, 0xF1,
+
+	0xCA, 0x9F, 0xA3, 0x36, 0x80, 0x43, 0x2D, 0xDB,
+	0x25, 0x14, 0x94, 0xB9, 0x99, 0xC6, 0x0C, 0x77,
+	0xF9, 0xAB, 0x7C, 0xF4, 0x53, 0x3F, 0xB3, 0x63,
+	0x62, 0x57, 0xC7, 0xDF, 0xCB, 0x2F, 0x87, 0x9B,
+	0x5D, 0x10, 0x49, 0x08, 0x3C, 0xB1, 0x19, 0xC6,
+	0xDF, 0xA6, 0x5A, 0x82, 0xFC, 0x89, 0x77, 0xAC,
+	0x55, 0x20, 0x7C, 0x8B, 0x45, 0x8B, 0xD8, 0x02,
+	0x1B, 0xFC, 0x93, 0xC6, 0x04, 0x5C, 0x39, 0x96,
+	0xA5, 0x5A, 0xBB, 0x5F, 0x2C, 0xE2, 0x6E, 0xA3,
+	0xEA, 0x84, 0x28, 0xD4, 0x96, 0x68, 0x73, 0x58,
+	0x64, 0x53, 0x29, 0xBA, 0x91, 0x4B, 0xF8, 0x97,
+	0xB0, 0x5F, 0x4B, 0xEF, 0xE5, 0x2E, 0x9C, 0x0F,
+	0x90, 0xCE, 0x10, 0xCE, 0x8D, 0x88, 0x69, 0x84,
+	0x99, 0x1A, 0xDF, 0x5A, 0x20, 0x33, 0xB8, 0x3B,
+	0xA6, 0x6B, 0x3B, 0xF5, 0xB9,
+
+	0xA2, 0xFC, 0x78, 0xC1, 0x84, 0x0B, 0x5D, 0xA2,
+	0x7B, 0x98, 0xA7, 0x17, 0xAE, 0xC4, 0x70, 0x66,
+	0x73, 0xF8, 0x3B, 0x3A, 0x62, 0xA0, 0xF2, 0xCD,
+	0x14, 0xD4, 0x2E, 0xF5, 0x62, 0x90, 0xDF, 0xDA,
+	0xF3, 0xAD, 0xD9, 0x4C, 0x1A, 0x67, 0xCA, 0x14,
+	0x83, 0x84, 0xEB, 0x51, 0x9C, 0x2F, 0x45, 0x92,
+	0xE9, 0xF4, 0xCF, 0x91, 0xFA, 0x4C, 0x92, 0x7C,
+	0x53, 0x36, 0x48, 0xC6, 0x1D, 0x2E, 0xB2, 0x66,
+	0x94, 0x5D, 0xA6, 0x4D, 0x01, 0xCA, 0x61, 0x3C,
+	0xB6, 0x2D, 0xE1, 0x09, 0xD9, 0xFA, 0x47, 0x97,
+	0x04, 0xB4, 0x2F, 0xFA, 0x56, 0x42, 0x66, 0xA7,
+	0x44, 0xD5, 0x7C, 0x36, 0x3F, 0x2B, 0xE9, 0xB2,
+	0x3A, 0x23, 0x90, 0xF4, 0x73, 0xC1, 0xA2, 0x2D,
+	0x4A, 0x98, 0x6E, 0xB9, 0x8A, 0xC1, 0xA8, 0x8D,
+	0x18, 0xA5, 0xF4, 0x35, 0x51, 0xBD,
+
+	0xE3, 0x62, 0xBB, 0xEF, 0x7C, 0x72, 0xCE, 0x4E,
+	0xEF, 0xB7, 0xF6, 0x81, 0xE4, 0xAA, 0x1C, 0x7A,
+	0x29, 0xD6, 0x66, 0xFA, 0xD4, 0xEE, 0xB3, 0x2E,
+	0x8E, 0xED, 0x32, 0x42, 0x21, 0x01, 0xEC, 0xD1,
+	0x4A, 0xE7, 0x85, 0xFA, 0x70, 0x05, 0x74, 0xCA,
+	0xFF, 0x29, 0x10, 0xD7, 0x53, 0xBC, 0xBE, 0xC7,
+	0x79, 0x1F, 0xA0, 0xF0, 0xD0, 0xEB, 0x50, 0xCF,
+	0xF2, 0x8C, 0xE0, 0x20, 0xE7, 0x50, 0xD3, 0x46,
+	0xF6, 0x02, 0xE1, 0x11, 0x07, 0x29, 0xC1, 0x19,
+	0x02, 0x10, 0x3F, 0xD0, 0xF7, 0x1B, 0x02, 0xF7,
+	0x43, 0xD8, 0xBB, 0x6E, 0x74, 0x5E, 0x6A, 0xC7,
+	0xB4, 0x2D, 0x46, 0x90, 0x80, 0x0B, 0x95, 0xB0,
+	0x91, 0x3C, 0x57, 0xC2, 0x9E, 0x20, 0xAC, 0x5F,
+	0x7D, 0xEE, 0x19, 0x26, 0xC2, 0x7A, 0xD2, 0x8A,
+	0xAC, 0xB4, 0xC0, 0x69, 0xB8, 0xEB, 0x5D,
+
+	0x79, 0x77, 0xA5, 0x1A, 0x5F, 0x56, 0x44, 0x1D,
+	0xC3, 0x81, 0x69, 0xFC, 0xE3, 0xEA, 0x41, 0x6C,
+	0x34, 0x81, 0xC5, 0xDE, 0x93, 0x9B, 0x0F, 0x12,
+	0x1C, 0xE1, 0x15, 0x44, 0x40, 0x90, 0xE7, 0x1B,
+	0xE8, 0xCC, 0x27, 0x23, 0x3E, 0x96, 0x77, 0x69,
+	0x02, 0x9B, 0xD0, 0xAB, 0x56, 0x87, 0x9C, 0x1F,
+	0x3D, 0x1E, 0x91, 0x79, 0xB4, 0xE5, 0x27, 0x26,
+	0x1A, 0x29, 0x43, 0xE9, 0x87, 0xC7, 0xAA, 0x06,
+	0x7C, 0xE9, 0x48, 0xF3, 0xAE, 0x98, 0x88, 0xF0,
+	0xEB, 0x48, 0x86, 0xD9, 0x07, 0xF2, 0x5A, 0xC3,
+	0xC2, 0xBF, 0x4C, 0xEE, 0x11, 0x70, 0x46, 0xE8,
+	0xCF, 0x36, 0xDB, 0x12, 0x99, 0x7E, 0x8A, 0x84,
+	0x65, 0x5E, 0xDE, 0x55, 0x42, 0x50, 0xD1, 0xAE,
+	0x05, 0x75, 0xD0, 0x29, 0x1D, 0xEE, 0xC3, 0x0F,
+	0x24, 0x2E, 0xF7, 0x62, 0x57, 0x08, 0x3A, 0xAB,
+
+	0xC6, 0x8A, 0xC5, 0x08, 0x86, 0x4E, 0x0F, 0xB8,
+	0xD5, 0x48, 0x84, 0x60, 0x4F, 0x04, 0x95, 0x74,
+	0x26, 0xA2, 0x1A, 0x4C, 0xE6, 0xC9, 0x4D, 0xDE,
+	0x81, 0x4A, 0x58, 0xC3, 0x40, 0x24, 0xEF, 0xF4,
+	0xBE, 0xA8, 0x1C, 0xA7, 0xA6, 0x2B, 0x8A, 0x16,
+	0x13, 0xB5, 0xAB, 0x46, 0x2D, 0xC0, 0x82, 0x00,
+	0x7A, 0x53, 0x68, 0xBB, 0xD5, 0xB5, 0x12, 0x73,
+	0xC3, 0x22, 0x02, 0x35, 0xCC, 0x65, 0x55, 0xA6,
+	0xBE, 0xA8, 0x5B, 0x8C, 0x83, 0xC7, 0x45, 0x6D,
+	0xB1, 0xA7, 0x1C, 0x69, 0xB1, 0x5E, 0x0F, 0x75,
+	0xD9, 0x2C, 0x90, 0x58, 0x46, 0xCC, 0x27, 0x22,
+	0x25, 0xD2, 0xF3, 0xA8, 0x93, 0xB9, 0x74, 0x94,
+	0x4D, 0xBB, 0x22, 0x4A, 0xC0, 0x63, 0x5E, 0x5E,
+	0x87, 0xDA, 0x0E, 0xC2, 0x26, 0xB7, 0x32, 0x08,
+	0x5E, 0xBE, 0x00, 0x2B, 0x9A, 0xBE, 0x9A, 0x9D,
+	0x81,
+
+	0xDC, 0x50, 0xBE, 0x7F, 0xD9, 0x0A, 0xC1, 0xC2,
+	0x25, 0x85, 0x5F, 0x06, 0x4E, 0x7F, 0x11, 0x25,
+	0xC9, 0x5E, 0x88, 0x8F, 0xBA, 0x04, 0x58, 0x3C,
+	0xF6, 0xB0, 0x17, 0xC0, 0x20, 0x45, 0x67, 0xBC,
+	0x03, 0x65, 0xDC, 0xDF, 0xBF, 0x0B, 0x22, 0x6D,
+	0xAF, 0x8E, 0x69, 0xC7, 0x5E, 0x29, 0x7F, 0x3A,
+	0x13, 0x7B, 0x6E, 0x5E, 0xC2, 0x89, 0xE7, 0xF1,
+	0xFD, 0xC6, 0xB0, 0x23, 0x75, 0x25, 0x59, 0x04,
+	0x1F, 0xC1, 0x0C, 0x72, 0x33, 0x47, 0xEC, 0x62,
+	0xB3, 0x9A, 0xD8, 0x61, 0xB9, 0x0B, 0x71, 0x8F,
+	0x8E, 0x46, 0xA9, 0x3B, 0xA8, 0xEC, 0x9A, 0xBE,
+	0xC7, 0xB8, 0xD9, 0x2B, 0xD5, 0x8D, 0xC9, 0x82,
+	0x1F, 0x7E, 0x7F, 0xF4, 0xAD, 0x42, 0x19, 0x58,
+	0x0F, 0xE9, 0xF6, 0xE1, 0x90, 0x93, 0x92, 0xD8,
+	0x99, 0x92, 0xC2, 0x47, 0x49, 0x58, 0xDA, 0x62,
+	0x7A, 0xF3,
+
+	0xBE, 0x69, 0x4F, 0xC2, 0xD8, 0xEB, 0x4A, 0xA8,
+	0x49, 0xAE, 0xA7, 0x85, 0x4E, 0x66, 0xE8, 0xC5,
+	0x50, 0x8F, 0x26, 0xA4, 0x41, 0x07, 0x0C, 0x7F,
+	0x54, 0x6F, 0x1B, 0xF5, 0x7F, 0xCD, 0x8C, 0x2F,
+	0xE0, 0x95, 0x32, 0x6A, 0x85, 0xA1, 0x9B, 0x29,
+	0x04, 0xE0, 0xDA, 0xC1, 0xBF, 0x72, 0xDF, 0xEC,
+	0x61, 0xF6, 0x43, 0xBE, 0xB0, 0x5D, 0x8B, 0x41,
+	0x91, 0x2C, 0x81, 0xBF, 0x0B, 0xF7, 0x1E, 0x46,
+	0xE4, 0x4F, 0xC4, 0x96, 0xE8, 0x58, 0xA2, 0x4D,
+	0x72, 0x61, 0x12, 0x9C, 0x53, 0x15, 0x7C, 0x88,
+	0x5D, 0x4A, 0x99, 0x7A, 0x66, 0x9D, 0x61, 0x17,
+	0xD2, 0x6B, 0xFE, 0x3F, 0x25, 0x2D, 0xC8, 0x14,
+	0x86, 0x8D, 0x7A, 0x50, 0xC1, 0x00, 0xC2, 0x5E,
+	0xA3, 0x4E, 0xB4, 0x69, 0xA7, 0xDD, 0x5D, 0xFD,
+	0xC3, 0xEE, 0x1B, 0x56, 0xE0, 0x4B, 0x92, 0xB0,
+	0xA7, 0xA3, 0x18,
+
+	0x09, 0xD9, 0xC8, 0x32, 0x61, 0x24, 0x9E, 0xF9,
+	0x6D, 0x63, 0x06, 0x79, 0xB0, 0x62, 0x4B, 0xB0,
+	0xA1, 0x8B, 0xEC, 0x3D, 0x77, 0xE9, 0xFB, 0x29,
+	0x2D, 0x50, 0xDD, 0xFE, 0x53, 0x08, 0x53, 0xC7,
+	0xCE, 0xE1, 0xAF, 0x73, 0x8A, 0x1B, 0x2E, 0x80,
+	0x7C, 0x39, 0x76, 0x91, 0xAF, 0x73, 0xAB, 0x5B,
+	0x2C, 0x0A, 0xAB, 0xF0, 0x62, 0x6F, 0xD6, 0xF1,
+	0xB2, 0xC7, 0xC7, 0x67, 0x97, 0xB9, 0xBC, 0x3C,
+	0xEE, 0x69, 0x35, 0xB8, 0x88, 0xD1, 0x1D, 0x68,
+	0xD0, 0xF1, 0xD1, 0x2C, 0x44, 0x8B, 0x7E, 0xCF,
+	0x44, 0x61, 0x24, 0x13, 0x66, 0x72, 0x1E, 0x02,
+	0x49, 0xFD, 0xD4, 0xFF, 0xE1, 0x4D, 0xDC, 0xF5,
+	0xFE, 0xF3, 0xDD, 0x6A, 0x86, 0x55, 0xAD, 0x30,
+	0xEB, 0x65, 0xDF, 0x18, 0xA3, 0xB2, 0x77, 0xE7,
+	0xDE, 0xAF, 0x95, 0x1F, 0x68, 0xB4, 0x31, 0x50,
+	0xF4, 0x85, 0xAC, 0x20,
+
+	0x18, 0x7D, 0x5F, 0x19, 0x05, 0x22, 0x3F, 0xA4,
+	0x9C, 0x52, 0xF4, 0x34, 0x9D, 0x19, 0xB1, 0xD9,
+	0x27, 0x5B, 0xEE, 0x11, 0x34, 0x4B, 0xDB, 0x4B,
+	0x0B, 0x67, 0x17, 0x39, 0x84, 0x57, 0x07, 0x0A,
+	0x7A, 0xC2, 0x28, 0x74, 0xCF, 0x32, 0x30, 0x89,
+	0xBE, 0x3B, 0x48, 0xC1, 0x9C, 0x46, 0x6A, 0xA7,
+	0xFE, 0x5F, 0x8C, 0x14, 0x4C, 0xFD, 0xDB, 0xF2,
+	0x59, 0x6E, 0xA4, 0x65, 0x0A, 0xED, 0xEB, 0x8B,
+	0x47, 0xEC, 0x74, 0x90, 0x9D, 0x5D, 0xD9, 0x47,
+	0xEB, 0x49, 0x7E, 0x71, 0xB0, 0x53, 0x74, 0x41,
+	0x31, 0x04, 0x29, 0xB0, 0xE0, 0xEC, 0xA0, 0x7F,
+	0xB0, 0xAE, 0x11, 0x10, 0xB0, 0x8B, 0xA2, 0xFB,
+	0x14, 0x14, 0xFE, 0x68, 0x85, 0x25, 0x6E, 0x4F,
+	0x18, 0x70, 0xE9, 0xF8, 0x09, 0x68, 0x9F, 0xB2,
+	0xB2, 0x50, 0xFC, 0x3F, 0x5D, 0xB0, 0x90, 0x3E,
+	0xF8, 0x08, 0xA0, 0x46, 0xF0,
+
+	0xCA, 0x12, 0xD8, 0x25, 0xF4, 0x8B, 0x20, 0xF6,
+	0x11, 0x2F, 0x69, 0x5C, 0xCE, 0xD9, 0x81, 0xA7,
+	0xBB, 0xA6, 0x02, 0x01, 0x21, 0x27, 0x79, 0x74,
+	0xC9, 0x1E, 0x19, 0xB6, 0xB3, 0x41, 0x05, 0xE5,
+	0xEE, 0x3A, 0x85, 0x38, 0x60, 0xBE, 0x5C, 0x84,
+	0x7D, 0x2D, 0x9D, 0xE8, 0x29, 0x07, 0xB0, 0x8D,
+	0x0A, 0x4C, 0xA8, 0xF5, 0xD0, 0x53, 0xE1, 0xED,
+	0x82, 0x9C, 0x63, 0x03, 0xD4, 0x62, 0x53, 0x56,
+	0x85, 0x60, 0x87, 0x30, 0x50, 0xEA, 0xF9, 0x4A,
+	0x1D, 0x91, 0xD0, 0xE3, 0x98, 0x51, 0xBD, 0x8C,
+	0xBC, 0xE4, 0xE8, 0x5E, 0x4D, 0x32, 0x0B, 0xC4,
+	0xDE, 0xF8, 0x1A, 0xFF, 0xC6, 0x67, 0x5A, 0x02,
+	0xBE, 0x52, 0x85, 0xD4, 0x37, 0x92, 0x0A, 0x9A,
+	0xCF, 0x92, 0x20, 0x8A, 0x40, 0x07, 0xAE, 0xA4,
+	0x1D, 0x32, 0xFA, 0x8E, 0x95, 0xF4, 0x30, 0x92,
+	0x78, 0xD0, 0xE8, 0x75, 0x83, 0x6D,
+
+	0xAC, 0x13, 0xFB, 0x65, 0x6F, 0x6B, 0x27, 0xDB,
+	0xD7, 0xD7, 0xE2, 0x29, 0xB1, 0xEE, 0xEE, 0x22,
+	0x4D, 0x05, 0x41, 0x4A, 0x07, 0xA0, 0x61, 0x94,
+	0x5B, 0x7B, 0x69, 0xBF, 0xFC, 0x59, 0x08, 0x5C,
+	0x95, 0x6E, 0x48, 0x90, 0xA6, 0x74, 0xFE, 0x63,
+	0x4D, 0x2E, 0x5C, 0xE1, 0x1B, 0xF3, 0x52, 0x99,
+	0x53, 0x91, 0x60, 0x6C, 0xF8, 0x34, 0xB9, 0x2C,
+	0x39, 0x2C, 0x2F, 0x8A, 0x62, 0x58, 0x85, 0xCF,
+	0x30, 0x50, 0x1C, 0xF5, 0x3E, 0x07, 0x03, 0xB4,
+	0xB2, 0x58, 0xC9, 0xCA, 0xD8, 0x98, 0x2C, 0x03,
+	0x64, 0x54, 0xB1, 0x08, 0x24, 0xDA, 0xBE, 0xF4,
+	0x67, 0x43, 0xAA, 0xBA, 0x17, 0xAE, 0x52, 0x10,
+	0x6D, 0x00, 0x22, 0x9F, 0x17, 0x79, 0x0F, 0xEC,
+	0x48, 0x90, 0x76, 0xBB, 0xFD, 0xD4, 0x4B, 0xFE,
+	0x39, 0x91, 0xAB, 0xDA, 0xE1, 0xAA, 0xED, 0xB4,
+	0xF2, 0x04, 0xB8, 0x02, 0x1E, 0xE9, 0x7A,
+
+	0x28, 0xBF, 0x80, 0x60, 0x1C, 0x3A, 0x11, 0x9D,
+	0x4A, 0xAC, 0xA9, 0x13, 0xDB, 0x78, 0x74, 0x64,
+	0xBD, 0xCA, 0x7E, 0xE4, 0xC5, 0xD3, 0xD3, 0x75,
+	0x38, 0xC8, 0x9E, 0xF0, 0xFC, 0x8C, 0x96, 0x1C,
+	0x48, 0xDB, 0xB6, 0x9A, 0x26, 0x52, 0xEB, 0x3A,
+	0xFE, 0x01, 0xC6, 0x99, 0xBD, 0x49, 0x38, 0xAE,
+	0xA9, 0xB3, 0xD5, 0x51, 0x59, 0x91, 0x88, 0xF1,
+	0xB6, 0xA6, 0xE0, 0x9E, 0xF9, 0xA3, 0x16, 0xDB,
+	0xC4, 0x72, 0x35, 0x33, 0xA9, 0x05, 0x8A, 0x97,
+	0xCA, 0x11, 0x7D, 0xA4, 0x5D, 0xEC, 0x96, 0x10,
+	0xD5, 0x98, 0x53, 0x17, 0x91, 0x09, 0x58, 0x4E,
+	0x27, 0x32, 0x50, 0xFB, 0x85, 0xE6, 0xF1, 0xC3,
+	0x46, 0xBC, 0x20, 0x7D, 0x14, 0xFD, 0xAF, 0x02,
+	0x3B, 0xFB, 0x27, 0x7F, 0xB4, 0x34, 0x26, 0xC0,
+	0x68, 0x3D, 0x65, 0x5D, 0x60, 0x35, 0xD8, 0xF8,
+	0x3A, 0xF0, 0x18, 0xC5, 0x08, 0x43, 0xB2, 0xA1,
+
+	0xBB, 0x6C, 0xA2, 0x1F, 0x91, 0x6E, 0x5E, 0xB6,
+	0x47, 0x2C, 0x98, 0xBB, 0xCE, 0x04, 0x80, 0xA6,
+	0x4E, 0x14, 0x2A, 0x0F, 0x99, 0x14, 0x04, 0xC4,
+	0x0D, 0xA2, 0x29, 0x20, 0xDE, 0x47, 0x4C, 0x71,
+	0x30, 0xBB, 0x32, 0x49, 0x0A, 0xAF, 0x38, 0x6E,
+	0xCC, 0xDC, 0xEC, 0x2B, 0xC0, 0xA0, 0x32, 0xE9,
+	0x03, 0xB7, 0x8C, 0x8C, 0x45, 0x51, 0x2A, 0x25,
+	0x83, 0x53, 0x3A, 0xB2, 0xB6, 0x5C, 0x7A, 0x43,
+	0x7B, 0x9F, 0xE1, 0x7D, 0xF6, 0xA4, 0x1D, 0x21,
+	0x33, 0xB3, 0x91, 0xC7, 0xF3, 0xE4, 0x66, 0x85,
+	0xD2, 0xE7, 0xE5, 0x22, 0xFC, 0xFC, 0xAD, 0x3B,
+	0x0D, 0x4E, 0x4D, 0xDA, 0xAD, 0x57, 0x24, 0xD2,
+	0x99, 0xEA, 0x48, 0x24, 0x0D, 0xD9, 0x17, 0xA4,
+	0x69, 0xBD, 0x9A, 0x7B, 0xA6, 0x1A, 0xED, 0xBD,
+	0x7A, 0x07, 0x07, 0xAE, 0x19, 0x28, 0xD9, 0xB7,
+	0x4B, 0x3C, 0x07, 0x8A, 0xC8, 0x6A, 0xAD, 0x9E,
+	0x1E,
+
+	0xC8, 0xB8, 0xA5, 0x88, 0x44, 0x39, 0x2B, 0xBF,
+	0xB4, 0x90, 0x17, 0x57, 0x40, 0xAC, 0x21, 0xFE,
+	0xE6, 0xBE, 0xA4, 0x3A, 0xFD, 0x0A, 0xFA, 0x3A,
+	0x27, 0x60, 0xB3, 0x7C, 0xBB, 0xC9, 0xA6, 0x98,
+	0x90, 0xC7, 0x16, 0x20, 0x30, 0x77, 0x33, 0x8A,
+	0xCB, 0xE2, 0xB9, 0x41, 0xAB, 0xD4, 0x8B, 0x20,
+	0x0B, 0x11, 0xB8, 0x52, 0x9C, 0x35, 0xB1, 0x1F,
+	0xFF, 0xEE, 0x84, 0xC1, 0xE0, 0x67, 0x13, 0x89,
+	0x2D, 0x83, 0xE5, 0x1B, 0x58, 0x92, 0x3A, 0x3E,
+	0xE3, 0xEF, 0x8A, 0xC3, 0x67, 0x10, 0xBF, 0x73,
+	0x36, 0x8B, 0x48, 0xC9, 0xA9, 0x00, 0x66, 0x93,
+	0x0D, 0x92, 0xA3, 0xE9, 0xD6, 0xFC, 0x86, 0xF5,
+	0xC1, 0x01, 0xEF, 0x63, 0xCA, 0xA9, 0x65, 0x91,
+	0xF9, 0x81, 0x0F, 0x6D, 0x29, 0x74, 0xB7, 0xAD,
+	0x49, 0x9A, 0xCD, 0x4F, 0x3E, 0x9B, 0xC1, 0x1F,
+	0xA1, 0x83, 0x46, 0xB3, 0x0D, 0x4C, 0xCF, 0xA0,
+	0x30, 0xBD,
+
+	0x20, 0x63, 0x9B, 0x73, 0x78, 0x5B, 0x87, 0x5D,
+	0x64, 0x11, 0x55, 0x52, 0x1C, 0x99, 0xCE, 0x0F,
+	0x71, 0x94, 0x92, 0x42, 0xAF, 0xCE, 0x89, 0x62,
+	0xFE, 0xB4, 0x36, 0x95, 0xA9, 0x10, 0x89, 0x0B,
+	0x03, 0xC4, 0x28, 0xA3, 0xF3, 0x93, 0xFE, 0xF3,
+	0xE7, 0xFA, 0x06, 0x02, 0xD7, 0x2F, 0xBF, 0x36,
+	0x69, 0x07, 0x13, 0x38, 0xD3, 0x89, 0x5B, 0x49,
+	0xD1, 0x7C, 0x80, 0xF7, 0x8D, 0x36, 0x44, 0x33,
+	0x1B, 0x96, 0xED, 0x73, 0x04, 0x63, 0x96, 0x2D,
+	0x62, 0xF8, 0x1E, 0xAF, 0x02, 0xCD, 0xDF, 0x10,
+	0xEA, 0x0C, 0x39, 0xF6, 0xFF, 0xA3, 0x48, 0x0C,
+	0x05, 0x92, 0xA5, 0x3E, 0x7E, 0x6F, 0x23, 0xF0,
+	0xB4, 0x12, 0x34, 0x9C, 0x29, 0xD8, 0xBA, 0x5B,
+	0x27, 0x39, 0x9B, 0x5B, 0x00, 0x09, 0xCF, 0x16,
+	0x44, 0x7A, 0x82, 0xA3, 0xBC, 0x45, 0x51, 0x88,
+	0xC0, 0x4E, 0x0D, 0x7D, 0xE8, 0x22, 0x49, 0x14,
+	0x63, 0xE1, 0x5A,
+
+	0x95, 0x8D, 0x81, 0x68, 0x72, 0x2A, 0x56, 0xBB,
+	0xFA, 0x02, 0xC1, 0xF9, 0x31, 0x28, 0x0E, 0x0D,
+	0x04, 0x6C, 0xC2, 0x7C, 0xD7, 0x90, 0xEA, 0xA4,
+	0xE8, 0x70, 0x62, 0xB0, 0xC0, 0x18, 0xD8, 0x1D,
+	0x93, 0x26, 0x9A, 0x91, 0xDC, 0x7B, 0x83, 0xEB,
+	0xB7, 0x98, 0x7A, 0x88, 0x83, 0x8D, 0xB3, 0x25,
+	0xB8, 0x97, 0x27, 0xA5, 0x02, 0xC6, 0x24, 0x63,
+	0xE5, 0x10, 0xAB, 0x86, 0xF6, 0x50, 0xD5, 0x8B,
+	0x20, 0x16, 0x37, 0xCD, 0xD2, 0x47, 0x5F, 0xC0,
+	0x79, 0x72, 0x9A, 0x78, 0x4E, 0xE1, 0xFB, 0xC2,
+	0x90, 0x70, 0xD9, 0x9F, 0x6E, 0x30, 0xDB, 0x0E,
+	0x43, 0x44, 0x0F, 0x3B, 0x00, 0xF8, 0xD6, 0xE0,
+	0x0C, 0x8F, 0x66, 0x2E, 0xE0, 0x57, 0x17, 0xA1,
+	0x6F, 0xE5, 0xC7, 0xAA, 0xB8, 0x3C, 0x5F, 0x02,
+	0x0F, 0x56, 0x50, 0x9A, 0x23, 0xDF, 0x96, 0xE7,
+	0x97, 0x59, 0x3E, 0xBB, 0x7A, 0x45, 0xCC, 0x74,
+	0xF7, 0xDE, 0x23, 0x50,
+
+	0x4D, 0x6F, 0x1E, 0x0C, 0x30, 0x98, 0x65, 0xAF,
+	0xE7, 0x4E, 0x93, 0xDB, 0x6B, 0x11, 0x1D, 0x77,
+	0x28, 0x11, 0xF0, 0x17, 0xB5, 0xE8, 0x76, 0x60,
+	0x26, 0x60, 0xDE, 0xA4, 0x94, 0x59, 0x37, 0x8A,
+	0xF3, 0xF4, 0xDE, 0xE4, 0x4D, 0xB0, 0x90, 0x8A,
+	0xE3, 0x51, 0xB7, 0x00, 0x45, 0xD3, 0x04, 0x10,
+	0x23, 0x2C, 0x62, 0x29, 0x28, 0xCF, 0xD7, 0x80,
+	0x27, 0xCF, 0x80, 0x1E, 0x7F, 0x0F, 0xF1, 0x61,
+	0x9A, 0x70, 0xB1, 0x13, 0x32, 0x3E, 0xE7, 0x02,
+	0x86, 0x12, 0xDC, 0xD1, 0x8F, 0x08, 0x6E, 0xDE,
+	0x1C, 0x2F, 0x33, 0xAB, 0xB2, 0x4C, 0x7E, 0x20,
+	0x79, 0xDD, 0xC2, 0xF1, 0x54, 0xEE, 0xB6, 0xCF,
+	0xCE, 0x0E, 0x3B, 0x91, 0xBD, 0xA2, 0x60, 0x76,
+	0x52, 0xD7, 0xE4, 0x42, 0x0F, 0x04, 0x88, 0xAB,
+	0xD5, 0xA0, 0x3D, 0x30, 0x64, 0x3D, 0xAE, 0x2C,
+	0xD2, 0xBA, 0x9A, 0xA2, 0x27, 0x39, 0xB4, 0x3C,
+	0x04, 0x60, 0xBF, 0xFA, 0xDE,
+
+	0x29, 0xEE, 0x39, 0x47, 0x8F, 0x5E, 0x96, 0xC8,
+	0x62, 0x96, 0x58, 0xAD, 0x0A, 0x71, 0xA3, 0x6A,
+	0xB6, 0x91, 0x6E, 0xC8, 0xC3, 0x94, 0xEC, 0xC9,
+	0xAF, 0x53, 0x56, 0x18, 0x94, 0x10, 0x4B, 0xC0,
+	0xBD, 0xFD, 0x88, 0xEC, 0x7F, 0xFC, 0x45, 0xB1,
+	0x5D, 0x2F, 0x9B, 0x06, 0xF7, 0x5D, 0xF3, 0x9B,
+	0x56, 0xFD, 0x00, 0x42, 0x7C, 0x42, 0xC8, 0x2B,
+	0xD0, 0xD1, 0x55, 0xE5, 0x88, 0xEC, 0x04, 0x9A,
+	0x74, 0x0D, 0x97, 0xBA, 0xF5, 0x6D, 0xE6, 0x7D,
+	0x07, 0x19, 0x3E, 0x89, 0x25, 0x4F, 0x2A, 0x22,
+	0xF2, 0xCE, 0x5A, 0x57, 0x90, 0x37, 0xE6, 0x70,
+	0x64, 0x0C, 0xED, 0xD2, 0xAF, 0x60, 0x8D, 0xED,
+	0xD8, 0x87, 0xA8, 0x3D, 0x1F, 0x54, 0x27, 0x44,
+	0xE2, 0x66, 0xFA, 0xE1, 0xCB, 0x1D, 0x42, 0x21,
+	0x7A, 0x29, 0x82, 0xB0, 0x4F, 0x7E, 0x5A, 0x30,
+	0xCD, 0x51, 0x10, 0x07, 0xD7, 0xDA, 0x25, 0xDA,
+	0xFD, 0x66, 0x11, 0x76, 0x2E, 0xAB,
+
+	0x81, 0xBA, 0x9E, 0x8B, 0x44, 0x9A, 0xA6, 0xC6,
+	0x16, 0x9F, 0xF6, 0x0E, 0x9D, 0xF5, 0x6D, 0x10,
+	0x79, 0x3D, 0xD8, 0x27, 0xCD, 0xB7, 0x93, 0xD6,
+	0x81, 0x70, 0xF9, 0x4F, 0xFF, 0xA0, 0xA6, 0xCF,
+	0x8C, 0xF7, 0x3C, 0xA7, 0x27, 0xDF, 0x44, 0xD0,
+	0x29, 0x16, 0x54, 0x8D, 0x5C, 0x9E, 0x43, 0xE8,
+	0xCA, 0x7F, 0xFA, 0x06, 0x92, 0xB6, 0x2E, 0x29,
+	0x73, 0xCE, 0xFF, 0x75, 0xE1, 0x71, 0xCF, 0xA6,
+	0x04, 0x7D, 0xDB, 0x45, 0x16, 0x7A, 0xA7, 0xC8,
+	0xC4, 0xEA, 0x24, 0x77, 0xE7, 0xA8, 0x52, 0x16,
+	0xE9, 0x85, 0xEA, 0xD3, 0x41, 0x63, 0x76, 0xDE,
+	0xC5, 0x68, 0xFF, 0x54, 0x85, 0xB0, 0x85, 0xEA,
+	0x71, 0x54, 0x5F, 0x3A, 0xF6, 0xB3, 0xC4, 0x18,
+	0x41, 0x5C, 0x23, 0x01, 0xAF, 0x9D, 0x6E, 0x5E,
+	0xAD, 0xEA, 0x0C, 0x12, 0xCD, 0x44, 0xD6, 0xA2,
+	0x69, 0xF6, 0x1A, 0xBD, 0xFE, 0x2C, 0xE4, 0x42,
+	0xBA, 0x00, 0x19, 0xF9, 0x70, 0x7B, 0x8B,
+
+	0x62, 0xEB, 0xD5, 0xE7, 0xFE, 0x80, 0xB9, 0x03,
+	0x1E, 0x73, 0x18, 0xD0, 0xC9, 0x07, 0x25, 0x2A,
+	0x54, 0xF0, 0x06, 0x0A, 0xBC, 0x6D, 0xAE, 0xC9,
+	0x80, 0x16, 0xA0, 0x25, 0x4C, 0x7A, 0x07, 0xAA,
+	0x7D, 0x6C, 0x68, 0x01, 0xA7, 0x58, 0x84, 0x0D,
+	0x2F, 0x9A, 0x83, 0xAD, 0xF9, 0x6F, 0xA0, 0x4E,
+	0x4D, 0x1C, 0xAE, 0x40, 0x67, 0x34, 0x63, 0x68,
+	0x49, 0xD4, 0x61, 0xC8, 0xDF, 0x95, 0x7E, 0x18,
+	0xC3, 0x21, 0x59, 0xAC, 0x5C, 0x37, 0x37, 0x14,
+	0xFF, 0xE8, 0x5C, 0x40, 0x48, 0x15, 0x07, 0x1C,
+	0xC3, 0x5D, 0x2D, 0xB5, 0x19, 0x28, 0x9E, 0xAF,
+	0x29, 0x5F, 0x7B, 0x4E, 0x62, 0x05, 0xFA, 0xA8,
+	0xDE, 0x5C, 0x1D, 0x8B, 0x5B, 0x89, 0xFD, 0x33,
+	0xD7, 0x75, 0x73, 0x44, 0xE1, 0xD1, 0xA8, 0x1F,
+	0xDB, 0xF8, 0x7B, 0x10, 0x2A, 0x8A, 0x6C, 0x85,
+	0xED, 0x01, 0x8B, 0xEC, 0xCA, 0x6F, 0xF7, 0x5C,
+	0x22, 0x8E, 0x04, 0xD8, 0xA8, 0x89, 0x10, 0xBE,
+
+	0x1C, 0x0F, 0xB6, 0x70, 0x34, 0x3E, 0x50, 0x71,
+	0xA2, 0x25, 0x52, 0x53, 0x07, 0x31, 0xD3, 0x3B,
+	0xEC, 0x60, 0x71, 0x32, 0x5F, 0x13, 0x1D, 0xF8,
+	0x22, 0xD3, 0x8E, 0x03, 0x51, 0xDF, 0x83, 0xD2,
+	0x92, 0xE3, 0x91, 0xAD, 0x33, 0xB8, 0xFA, 0x28,
+	0x9F, 0x06, 0xE1, 0x8C, 0xA3, 0xEC, 0xAD, 0x5A,
+	0x2E, 0x71, 0x01, 0xDC, 0x1D, 0x92, 0x86, 0x7B,
+	0xFC, 0x27, 0x42, 0xAD, 0x05, 0x82, 0xA3, 0x59,
+	0xF9, 0x84, 0x9F, 0xD1, 0x3D, 0xF9, 0x79, 0xD3,
+	0xD0, 0xE2, 0x89, 0x1C, 0xBC, 0xA1, 0x5F, 0xFC,
+	0x9E, 0xC1, 0x35, 0xFA, 0x31, 0x68, 0xB5, 0x0D,
+	0xD3, 0x7B, 0xE4, 0x4B, 0x8F, 0x34, 0xA4, 0xF2,
+	0x39, 0x1C, 0x32, 0x0D, 0x41, 0x83, 0x7C, 0xCD,
+	0x8A, 0xCA, 0x46, 0x77, 0x1A, 0x3C, 0x11, 0xFB,
+	0xED, 0x8F, 0xE7, 0xE9, 0xBE, 0xF6, 0x8B, 0x2C,
+	0x4E, 0xAF, 0xAC, 0xF5, 0xA9, 0xCF, 0x20, 0x1C,
+	0xB2, 0x2D, 0x96, 0x1C, 0x7C, 0x95, 0x2A, 0x99,
+	0xAB,
+
+	0x9B, 0xE5, 0xC6, 0x4C, 0xF7, 0x1C, 0x45, 0x2C,
+	0x2B, 0x2D, 0x43, 0xDB, 0xE5, 0x3D, 0x48, 0x3E,
+	0xD4, 0x57, 0xE4, 0x1F, 0xF4, 0x3A, 0x8D, 0x9A,
+	0x47, 0x03, 0xFF, 0xC2, 0xAF, 0x63, 0xCF, 0x2C,
+	0x19, 0x4C, 0xF0, 0xA7, 0x43, 0x3D, 0x47, 0x5D,
+	0x54, 0x89, 0x8E, 0x15, 0x2A, 0xD5, 0x88, 0x96,
+	0x93, 0x5B, 0xF9, 0xC5, 0xA8, 0xCC, 0xFB, 0x45,
+	0x65, 0xC6, 0x2D, 0xC2, 0xB7, 0xEF, 0xA9, 0x93,
+	0x3B, 0x10, 0x0A, 0xA3, 0x3F, 0x00, 0x68, 0x83,
+	0x6C, 0xD4, 0xF6, 0x9F, 0x80, 0x55, 0x24, 0x9F,
+	0x5B, 0x56, 0x60, 0x03, 0x40, 0x9B, 0x75, 0x5F,
+	0xE9, 0x17, 0xF4, 0x96, 0xAE, 0xA5, 0x81, 0x16,
+	0x2F, 0xA2, 0x69, 0x15, 0xE0, 0xB1, 0x66, 0xA5,
+	0x72, 0x48, 0x9A, 0xE3, 0xFE, 0xEB, 0x40, 0x9E,
+	0x65, 0x68, 0xBD, 0xE8, 0x26, 0xF5, 0x85, 0x5B,
+	0x15, 0x26, 0x41, 0x37, 0x14, 0xED, 0x66, 0x9C,
+	0x73, 0x81, 0x9B, 0x8D, 0x98, 0x59, 0xDD, 0xCD,
+	0x82, 0xDD,
+
+	0x1C, 0x21, 0xF5, 0x3A, 0xD9, 0x26, 0xD0, 0xC8,
+	0x76, 0x3E, 0x6E, 0x07, 0x6E, 0x67, 0x2D, 0xC7,
+	0xEC, 0x4A, 0x41, 0xA9, 0x1C, 0x08, 0x4E, 0x49,
+	0x38, 0x71, 0x1E, 0xB8, 0x90, 0xBE, 0x8B, 0x47,
+	0xE9, 0xC2, 0xFE, 0x71, 0x7E, 0x77, 0xC2, 0xDE,
+	0x3D, 0xBB, 0x6A, 0xB2, 0xF4, 0x79, 0x79, 0xE3,
+	0x9E, 0xEC, 0x40, 0x03, 0xB7, 0x0B, 0xCE, 0x01,
+	0xA8, 0xA1, 0x83, 0x94, 0x3E, 0x51, 0x67, 0x70,
+	0xCC, 0xEF, 0xD7, 0x09, 0x9D, 0xDD, 0x88, 0xD5,
+	0xDC, 0x88, 0xA2, 0x21, 0x29, 0x65, 0x87, 0xB8,
+	0xCC, 0x3A, 0x14, 0x94, 0xD5, 0x53, 0xD1, 0xA9,
+	0x0F, 0x8A, 0x72, 0x16, 0xA5, 0x4D, 0xB6, 0x56,
+	0x88, 0x0C, 0x5B, 0x00, 0x40, 0xDC, 0x38, 0x8C,
+	0x24, 0x0E, 0xE9, 0x95, 0x02, 0xBB, 0x89, 0x1E,
+	0x6B, 0x1D, 0x12, 0x50, 0x14, 0xB2, 0xC4, 0x9B,
+	0x58, 0xA4, 0x53, 0x57, 0x47, 0x16, 0x87, 0xA4,
+	0x9F, 0x9A, 0x57, 0xAA, 0xD1, 0xAE, 0x96, 0x2E,
+	0x30, 0xFB, 0x59,
+
+	0x81, 0x59, 0xD1, 0xBD, 0x54, 0xAC, 0x4E, 0x75,
+	0x97, 0x3E, 0x1A, 0x2A, 0x63, 0x2E, 0xE7, 0xA5,
+	0xA7, 0xC0, 0x0D, 0x3A, 0x9F, 0x35, 0x2B, 0x6D,
+	0xE1, 0x03, 0x4A, 0x86, 0x31, 0x08, 0x7D, 0xE6,
+	0xB1, 0x14, 0xF9, 0xDD, 0x57, 0xB0, 0xFA, 0xC6,
+	0xCC, 0x27, 0x39, 0x97, 0xE6, 0x1C, 0x04, 0x17,
+	0xAA, 0x9C, 0x69, 0x5C, 0x9F, 0x29, 0x49, 0xC8,
+	0xF9, 0x74, 0x63, 0xBC, 0xBF, 0x91, 0xD9, 0x9C,
+	0x37, 0x3D, 0x0A, 0x3C, 0x7E, 0x3C, 0xAD, 0xB8,
+	0x1B, 0x4C, 0xA2, 0xBF, 0x72, 0xF9, 0x5D, 0x98,
+	0x96, 0x77, 0xE9, 0xC5, 0xE7, 0x81, 0x19, 0xB9,
+	0xF4, 0x9A, 0x01, 0x17, 0xD5, 0x95, 0xD7, 0x8F,
+	0x85, 0x36, 0x64, 0x84, 0xFB, 0x63, 0x7C, 0xF6,
+	0x82, 0xD7, 0xEE, 0x73, 0xF4, 0x51, 0x3D, 0x8C,
+	0x5D, 0x09, 0x4D, 0xF4, 0xA7, 0x19, 0x45, 0x61,
+	0x63, 0xFB, 0x2B, 0xF9, 0xF5, 0xB8, 0x4B, 0x2F,
+	0xD0, 0xEF, 0xA5, 0x24, 0x7C, 0x20, 0x01, 0x0E,
+	0x1B, 0x1B, 0xFC, 0x61,
+
+	0xEA, 0x4C, 0x90, 0x15, 0xCD, 0x92, 0xE5, 0xBE,
+	0xA4, 0x2F, 0xC4, 0x15, 0xA0, 0x62, 0xF1, 0x2E,
+	0xAA, 0xB4, 0xC0, 0x60, 0xE4, 0xB6, 0x3C, 0x29,
+	0x8D, 0x7E, 0x9D, 0x4A, 0xB1, 0xD7, 0xEB, 0x13,
+	0x40, 0xA9, 0x80, 0x32, 0xF2, 0x83, 0xE9, 0x0C,
+	0x21, 0xEB, 0x93, 0x29, 0x92, 0xB5, 0xC3, 0x36,
+	0xBE, 0xF1, 0xEC, 0x40, 0xFF, 0x26, 0x31, 0x89,
+	0x5C, 0x17, 0x6B, 0xDB, 0x5F, 0xF3, 0x56, 0x5A,
+	0xD1, 0x28, 0x11, 0xC4, 0x70, 0x8E, 0x8B, 0xEB,
+	0xC5, 0xC3, 0x97, 0x01, 0x60, 0x6C, 0xC1, 0x79,
+	0x0F, 0xEA, 0x85, 0x86, 0xBF, 0x2F, 0x0F, 0x23,
+	0xF4, 0x1D, 0xF3, 0x58, 0xB6, 0x70, 0x1A, 0x68,
+	0x50, 0x76, 0x1C, 0xCE, 0xEC, 0xB3, 0xC2, 0x22,
+	0x56, 0x65, 0xCC, 0x47, 0x3B, 0xC3, 0x94, 0x0C,
+	0x64, 0x90, 0xC2, 0x54, 0x25, 0x08, 0x0E, 0x72,
+	0xBB, 0xFF, 0x51, 0x1B, 0x9B, 0xA7, 0x9A, 0x8D,
+	0x6F, 0xB7, 0x4E, 0x2E, 0xAE, 0x63, 0x11, 0x91,
+	0x15, 0x8F, 0x77, 0xD8, 0x3E,
+
+	0xE8, 0x42, 0xC5, 0x32, 0x91, 0xCE, 0x58, 0x5E,
+	0x80, 0x67, 0x0F, 0xA5, 0x29, 0xBF, 0xE9, 0x0E,
+	0x14, 0xF8, 0xA1, 0x1E, 0xAD, 0x2A, 0xC7, 0x3C,
+	0xD5, 0xE9, 0xA0, 0x18, 0x6A, 0xAE, 0x46, 0xCA,
+	0xC7, 0x58, 0xC3, 0x83, 0x2D, 0x0D, 0x55, 0xFD,
+	0xBC, 0x7F, 0x48, 0x24, 0x11, 0x19, 0xD0, 0x57,
+	0xEE, 0x50, 0xA0, 0x17, 0xF0, 0x62, 0xC5, 0x52,
+	0xA0, 0x44, 0x3B, 0xA7, 0x8A, 0xC1, 0x93, 0xED,
+	0x49, 0x20, 0xC7, 0x38, 0xEE, 0xFC, 0xD2, 0x99,
+	0xD9, 0xEE, 0xDB, 0x20, 0xD8, 0x93, 0x10, 0x55,
+	0xDE, 0x14, 0x17, 0x60, 0xA1, 0xE3, 0x85, 0x9D,
+	0xA6, 0x2F, 0x3A, 0xC0, 0xC7, 0x10, 0xE7, 0xC9,
+	0x2A, 0x15, 0xBD, 0xD3, 0x7E, 0x30, 0x96, 0xF9,
+	0xDD, 0x71, 0xB5, 0x32, 0xA4, 0x3C, 0xDA, 0x3C,
+	0xD3, 0xBD, 0xC2, 0x00, 0xFD, 0x6F, 0xAE, 0xB7,
+	0x1D, 0x98, 0xCB, 0x9D, 0xAA, 0xD5, 0xAA, 0x6C,
+	0x85, 0xD1, 0x3D, 0x2A, 0xA4, 0x36, 0xB7, 0x1E,
+	0xAD, 0x57, 0xE0, 0xF2, 0x0F, 0x23,
+
+	0x46, 0x77, 0x30, 0xDB, 0xE5, 0x4F, 0x7A, 0x9F,
+	0x5A, 0xD5, 0xC0, 0xAA, 0x57, 0xA7, 0x83, 0x91,
+	0x9C, 0xFE, 0xF0, 0x72, 0xE6, 0xA5, 0x7E, 0xD3,
+	0x6A, 0x5D, 0x48, 0x85, 0xE9, 0xE3, 0xCC, 0x0F,
+	0x24, 0x00, 0x70, 0x4B, 0xB9, 0xD9, 0x2A, 0xEC,
+	0x69, 0xFC, 0x57, 0x8C, 0xA1, 0x32, 0x08, 0x3C,
+	0xC2, 0xBC, 0xF9, 0x53, 0xCF, 0xA8, 0xF9, 0x02,
+	0xE7, 0x0F, 0x86, 0x40, 0x03, 0x0F, 0x88, 0x49,
+	0x62, 0x8F, 0x3F, 0x56, 0xCD, 0x12, 0x10, 0x10,
+	0xB2, 0xA4, 0xCB, 0x17, 0xB5, 0x85, 0xA6, 0x04,
+	0x3B, 0x46, 0xDE, 0x93, 0x1E, 0x60, 0xB5, 0xDF,
+	0x62, 0x8E, 0x36, 0x7F, 0xF1, 0x2C, 0x91, 0x02,
+	0x83, 0x3F, 0xFD, 0x5A, 0xEF, 0x51, 0x51, 0x66,
+	0x22, 0x03, 0xFB, 0x15, 0x45, 0x21, 0x98, 0xCE,
+	0x94, 0x84, 0x85, 0xEF, 0xB7, 0x6A, 0xBF, 0xA1,
+	0xCB, 0xA5, 0x8C, 0x08, 0x3C, 0x6F, 0xBB, 0x02,
+	0x94, 0xEE, 0xD5, 0xED, 0xCD, 0x2C, 0xD9, 0xE3,
+	0x08, 0xC8, 0x48, 0xF5, 0xF9, 0xC3, 0xF7,
+
+	0x36, 0x1E, 0xAA, 0x17, 0x43, 0x59, 0xE3, 0x64,
+	0xD3, 0xD5, 0xF2, 0x7D, 0x97, 0x1F, 0x62, 0xDE,
+	0x5F, 0xC5, 0xC3, 0x35, 0x5A, 0x56, 0xB0, 0xE6,
+	0x39, 0xAE, 0xAA, 0xD6, 0x33, 0x7F, 0x7F, 0xA8,
+	0x9F, 0xE7, 0xF1, 0xFD, 0xBE, 0xCF, 0xD0, 0xF4,
+	0x67, 0xA6, 0x72, 0xDB, 0x1F, 0x35, 0x50, 0x8C,
+	0x2A, 0x9F, 0x8C, 0x67, 0x56, 0xB7, 0xF2, 0xEC,
+	0xB8, 0x11, 0x99, 0x96, 0x63, 0xF7, 0x07, 0x2C,
+	0xB7, 0x04, 0xD0, 0x13, 0xEF, 0x19, 0x75, 0x29,
+	0x25, 0x27, 0xB2, 0xCA, 0xE2, 0x32, 0x5E, 0xA0,
+	0x1D, 0xE3, 0x80, 0x98, 0x15, 0x94, 0xC6, 0xC8,
+	0x99, 0x5F, 0xD7, 0xFC, 0x46, 0xB7, 0xF0, 0x04,
+	0xE8, 0x17, 0x9D, 0xC4, 0xA9, 0x11, 0x06, 0xAA,
+	0xA1, 0xF7, 0xA1, 0x6D, 0xFF, 0x57, 0x4B, 0x4C,
+	0xB6, 0x1A, 0x2F, 0xD6, 0x87, 0xB4, 0x66, 0x84,
+	0x02, 0x58, 0x03, 0x8F, 0x17, 0x4B, 0x3D, 0xE9,
+	0xCD, 0xDD, 0x7F, 0x63, 0x31, 0x56, 0x60, 0x89,
+	0x82, 0xEA, 0xE1, 0x28, 0x9D, 0xA3, 0xDC, 0x9C,
+
+	0x3F, 0x0A, 0x3E, 0x48, 0x47, 0x47, 0x65, 0x50,
+	0x3B, 0x30, 0x1D, 0xE9, 0xEA, 0xE6, 0xC6, 0x4E,
+	0xAE, 0x23, 0x37, 0xB7, 0x19, 0xCE, 0xFA, 0x85,
+	0x9A, 0x7E, 0x1D, 0x43, 0xC4, 0xD5, 0x0D, 0xC6,
+	0x5A, 0xC5, 0xAF, 0xE0, 0xBA, 0x9A, 0x4C, 0xE2,
+	0xD8, 0x33, 0x2B, 0xD7, 0xCE, 0xB5, 0x9B, 0x24,
+	0x9F, 0xCA, 0xAC, 0x32, 0x3F, 0xF3, 0xAF, 0x37,
+	0xB4, 0x44, 0x2F, 0xBC, 0x15, 0x77, 0xA2, 0x0D,
+	0x78, 0x07, 0x29, 0x39, 0x2E, 0x1B, 0x1D, 0xE6,
+	0x7D, 0x8E, 0xB4, 0xB3, 0x65, 0xDC, 0xF3, 0xDA,
+	0x04, 0x6F, 0x05, 0xE8, 0xFF, 0xEF, 0x79, 0x8F,
+	0x38, 0x3B, 0xC4, 0x26, 0xD5, 0xFA, 0x93, 0x54,
+	0x3D, 0xFD, 0xD5, 0x6F, 0x51, 0xBB, 0x09, 0x8E,
+	0x97, 0xE1, 0x70, 0x01, 0x88, 0x59, 0x1A, 0x58,
+	0x42, 0xEC, 0x24, 0x73, 0x42, 0x83, 0x34, 0xB2,
+	0x95, 0x1F, 0xF2, 0x39, 0x45, 0x69, 0x0C, 0x34,
+	0xCC, 0xE9, 0x46, 0xB3, 0x1E, 0xD2, 0xED, 0x29,
+	0x99, 0x57, 0x56, 0xD6, 0x0E, 0xD9, 0x45, 0xC9,
+	0x4E,
+
+	0x6A, 0x81, 0x8C, 0xE9, 0xEC, 0x63, 0x4D, 0xC0,
+	0xFF, 0x26, 0x59, 0xAB, 0x5F, 0x80, 0xD3, 0xC0,
+	0xB0, 0xD5, 0x55, 0x98, 0xCF, 0x9A, 0x53, 0x26,
+	0x9A, 0x0A, 0x30, 0x0F, 0x55, 0x4D, 0xBE, 0x5B,
+	0xB3, 0x34, 0xDB, 0x79, 0x7E, 0x2A, 0xC4, 0xAC,
+	0xFE, 0xE4, 0xAD, 0x7E, 0x74, 0xD7, 0x78, 0xE4,
+	0x5C, 0xCC, 0x8B, 0xE7, 0xE1, 0x27, 0x01, 0xBA,
+	0x3C, 0xFE, 0x92, 0xBC, 0xC6, 0xA6, 0x6B, 0x44,
+	0x22, 0x46, 0x4C, 0xBD, 0x7A, 0x8B, 0xF6, 0x10,
+	0x06, 0x5F, 0x7C, 0x04, 0x88, 0x2E, 0x06, 0xAA,
+	0xF5, 0xC9, 0xC8, 0x18, 0x60, 0x7A, 0x4C, 0xE7,
+	0xDA, 0x32, 0x03, 0x4E, 0x86, 0xC1, 0xBB, 0xF3,
+	0xCF, 0xC6, 0x85, 0xB8, 0xFF, 0x9B, 0x13, 0x78,
+	0x67, 0xD1, 0x9C, 0x2C, 0x28, 0xAA, 0xDE, 0x37,
+	0x6A, 0x58, 0x75, 0x88, 0xD2, 0x21, 0x04, 0x3B,
+	0x3E, 0xE2, 0xC4, 0xFD, 0xB2, 0x33, 0x79, 0x22,
+	0x17, 0xAC, 0x96, 0x36, 0x4D, 0x0A, 0x92, 0xAB,
+	0x4A, 0x64, 0x0A, 0x50, 0x09, 0xAA, 0x17, 0x4E,
+	0xD6, 0x3C,
+
+	0x1D, 0x0E, 0x0A, 0x3F, 0x82, 0xB6, 0x96, 0x68,
+	0x6D, 0x24, 0x3D, 0xC2, 0xA7, 0x27, 0xCE, 0x03,
+	0x99, 0xA9, 0xD1, 0x09, 0x82, 0xE5, 0x9C, 0x8D,
+	0x65, 0x46, 0x19, 0x67, 0xE4, 0x0A, 0xAB, 0x1F,
+	0x61, 0x1F, 0x57, 0x41, 0x1E, 0x5E, 0x15, 0x82,
+	0x1C, 0xA4, 0x63, 0x63, 0x5E, 0x16, 0x3A, 0xC1,
+	0x66, 0x94, 0xF6, 0x97, 0x85, 0x0E, 0x53, 0x59,
+	0xA0, 0x3A, 0x92, 0x9A, 0xCC, 0x72, 0x18, 0x3D,
+	0x85, 0x5B, 0x54, 0xE7, 0xF9, 0x31, 0x0F, 0x1F,
+	0x3D, 0xD6, 0x7B, 0xAE, 0xE7, 0x68, 0x64, 0x35,
+	0x57, 0xEB, 0x54, 0x02, 0x31, 0xBA, 0x49, 0x72,
+	0x42, 0xFD, 0xE4, 0xEC, 0xA7, 0xF3, 0xFB, 0x92,
+	0x72, 0x44, 0xCF, 0x03, 0xC1, 0x6A, 0x67, 0xD9,
+	0xB9, 0xE2, 0x0F, 0x6D, 0x72, 0x6F, 0x8F, 0x07,
+	0x77, 0xA8, 0xA6, 0x26, 0x27, 0x3D, 0x19, 0x7E,
+	0x08, 0x06, 0xA8, 0x3A, 0xF1, 0x56, 0xB0, 0x7F,
+	0x29, 0xDE, 0x34, 0x28, 0x3B, 0xF3, 0x2A, 0xAF,
+	0x91, 0x7D, 0x25, 0x11, 0x8F, 0x03, 0xDC, 0x47,
+	0x69, 0xFB, 0x1E,
+
+	0x3B, 0xF6, 0xD2, 0x09, 0x6B, 0x04, 0x12, 0x8B,
+	0xD3, 0x29, 0x78, 0x76, 0x22, 0x6C, 0xD6, 0x8D,
+	0xE1, 0xA0, 0xF2, 0x17, 0x9D, 0x0F, 0x5A, 0x77,
+	0xEF, 0x0C, 0x6D, 0x20, 0xB6, 0x7A, 0xDF, 0x59,
+	0xA2, 0x10, 0x9D, 0x1C, 0xD3, 0x82, 0xC5, 0x17,
+	0xA8, 0xCC, 0x19, 0xCD, 0xD4, 0xF7, 0x2B, 0x98,
+	0x7C, 0x27, 0x6A, 0x45, 0xD3, 0x3A, 0x6A, 0x21,
+	0x9B, 0x3A, 0xF9, 0xE8, 0xE0, 0x76, 0xAB, 0x90,
+	0xB7, 0x9B, 0x2D, 0xFA, 0x27, 0x73, 0xAE, 0x68,
+	0xB8, 0x5D, 0x13, 0xBE, 0x79, 0xBB, 0x5D, 0x06,
+	0xF9, 0x01, 0xFE, 0xE9, 0xD4, 0x07, 0x29, 0x95,
+	0x31, 0x33, 0x18, 0x3C, 0xED, 0xBA, 0x91, 0x8B,
+	0x0A, 0xAE, 0xD2, 0x7E, 0xF5, 0xD1, 0x8F, 0x17,
+	0x29, 0x8C, 0xFD, 0x38, 0xDA, 0xB8, 0xEB, 0x22,
+	0x22, 0xE4, 0xD4, 0x4D, 0xDC, 0xE5, 0x9E, 0xDC,
+	0x03, 0x27, 0xCA, 0xFA, 0x2F, 0x43, 0x0F, 0xEC,
+	0x8B, 0x8D, 0xBD, 0x0F, 0xA2, 0x9A, 0x1D, 0x30,
+	0xA8, 0x9E, 0x90, 0x7B, 0xB3, 0x6B, 0x6D, 0x42,
+	0x89, 0xE8, 0x09, 0xC8,
+
+	0x04, 0xDB, 0x62, 0x0C, 0x81, 0xDD, 0xEB, 0x34,
+	0x4B, 0x5F, 0xC8, 0x25, 0x04, 0xD6, 0x10, 0x04,
+	0xBC, 0xD6, 0xF3, 0x3C, 0x73, 0x65, 0x16, 0x8E,
+	0x14, 0xB4, 0x62, 0x21, 0x37, 0xF4, 0x4F, 0xD4,
+	0xB3, 0x74, 0xDB, 0x99, 0x78, 0x76, 0x13, 0xD9,
+	0xF8, 0xE9, 0xAC, 0x80, 0x5C, 0x87, 0x51, 0xC0,
+	0xAD, 0x42, 0x49, 0x11, 0x3E, 0xB0, 0x86, 0x18,
+	0xCD, 0x7E, 0x82, 0x98, 0xF7, 0x94, 0x08, 0x8A,
+	0xB8, 0x02, 0xA1, 0xBB, 0x1A, 0x78, 0x44, 0xBB,
+	0xF8, 0xC2, 0x3B, 0x68, 0x9E, 0xF4, 0x7F, 0x35,
+	0xDA, 0x4B, 0xB3, 0x4F, 0xB1, 0x3A, 0xF9, 0x43,
+	0xE1, 0xEB, 0xC3, 0xF7, 0x7B, 0xF6, 0x7C, 0x68,
+	0x2F, 0x60, 0xE7, 0xFB, 0x9F, 0x53, 0x0A, 0x21,
+	0x94, 0x0B, 0xCD, 0x0E, 0x9C, 0xC9, 0x17, 0xDE,
+	0x4A, 0x1B, 0x8B, 0x3D, 0x88, 0x3A, 0x87, 0xFE,
+	0xCA, 0x71, 0x3C, 0x0C, 0x64, 0x55, 0x75, 0x7C,
+	0xF2, 0x12, 0xFE, 0x34, 0xCB, 0x9C, 0xF8, 0xEE,
+	0xD2, 0x96, 0x49, 0x0A, 0xBD, 0x94, 0x1A, 0xC1,
+	0xFB, 0xAC, 0xC1, 0x8C, 0x2E,
+
+	0x81, 0x67, 0x56, 0x78, 0xF5, 0x8F, 0x26, 0x53,
+	0xA3, 0xE0, 0x26, 0x92, 0x9E, 0x86, 0x7A, 0xB0,
+	0xD5, 0xA2, 0x6E, 0x3A, 0xC5, 0xEF, 0x43, 0xA7,
+	0x01, 0xDE, 0xEB, 0x8E, 0x5A, 0x7C, 0xE8, 0xE1,
+	0x7C, 0x29, 0x30, 0xB6, 0x20, 0x75, 0x8C, 0x68,
+	0x84, 0xD4, 0x44, 0x75, 0xC5, 0x65, 0xEB, 0x9C,
+	0x93, 0x2B, 0xC3, 0x05, 0x65, 0x50, 0x28, 0x9E,
+	0xCE, 0x63, 0x77, 0x02, 0xBB, 0x9C, 0xF6, 0xAB,
+	0xFA, 0x83, 0x3C, 0x80, 0xFB, 0xA1, 0x6D, 0xE1,
+	0xF4, 0xBB, 0x7C, 0x04, 0x3D, 0xF5, 0x99, 0xA8,
+	0xDD, 0x81, 0x43, 0x0B, 0xFC, 0x65, 0x7B, 0xC0,
+	0x85, 0x79, 0xBA, 0xA8, 0x69, 0xC6, 0x6A, 0xB2,
+	0xFE, 0x67, 0xE6, 0xCB, 0x89, 0x32, 0x28, 0x77,
+	0x86, 0xFA, 0x66, 0x7A, 0x13, 0xE8, 0x22, 0x2F,
+	0xD5, 0x6C, 0xA0, 0x05, 0x7E, 0x24, 0x75, 0xB4,
+	0xEC, 0xF8, 0x6C, 0xFB, 0xBD, 0x30, 0xFA, 0x50,
+	0xD7, 0xC5, 0x42, 0x40, 0xCE, 0xDB, 0xBE, 0xC8,
+	0x3F, 0x81, 0xAD, 0x35, 0x5F, 0xC8, 0x70, 0x48,
+	0x75, 0x2C, 0x47, 0xB2, 0x34, 0x82,
+
+	0xE0, 0xB8, 0x27, 0xE3, 0x5E, 0xBE, 0xC9, 0x15,
+	0x1E, 0x3E, 0x61, 0x31, 0x49, 0x4D, 0xF3, 0x68,
+	0xDD, 0x6D, 0xF3, 0x6F, 0x6A, 0x37, 0xA3, 0xB5,
+	0x14, 0x62, 0x2C, 0x7C, 0x8E, 0x0E, 0x30, 0xA0,
+	0x9E, 0xCF, 0xC9, 0x2D, 0x66, 0x82, 0x10, 0xEF,
+	0x26, 0x11, 0x25, 0xA1, 0x61, 0xC7, 0x53, 0xF9,
+	0xD5, 0xB4, 0x21, 0xD1, 0xC2, 0x82, 0xFF, 0x58,
+	0x59, 0x1E, 0x03, 0x0C, 0xE3, 0x55, 0x55, 0x43,
+	0x24, 0x0F, 0x31, 0x27, 0xBB, 0x91, 0xFA, 0x20,
+	0x24, 0xE3, 0x52, 0xC1, 0x3F, 0x5D, 0xD2, 0x60,
+	0x0E, 0xCA, 0xB9, 0x74, 0xDC, 0x2D, 0xC2, 0xCB,
+	0x76, 0x0A, 0x30, 0x0E, 0xBC, 0x9F, 0xCF, 0xDD,
+	0x5D, 0x0C, 0x63, 0x85, 0x36, 0xF1, 0x73, 0x24,
+	0x28, 0x76, 0x41, 0x8F, 0xD6, 0x9E, 0xD1, 0x4F,
+	0x6C, 0x60, 0x8D, 0x8F, 0x0C, 0x0B, 0xA9, 0xA7,
+	0x0F, 0xFF, 0x12, 0xBD, 0x76, 0x67, 0x5C, 0x62,
+	0xDF, 0x01, 0xE0, 0x18, 0xA2, 0x33, 0x77, 0xFD,
+	0xD5, 0xEE, 0x31, 0xDE, 0xBF, 0x3D, 0x7C, 0x12,
+	0xC8, 0xBC, 0xD7, 0x95, 0xAD, 0x81, 0x7E,
+
+	0xA4, 0xA9, 0x3C, 0xD7, 0x17, 0x3A, 0x3A, 0x57,
+	0xBD, 0x7F, 0xB8, 0x69, 0x41, 0x3B, 0x79, 0x59,
+	0xA7, 0xA3, 0xF8, 0x37, 0x4F, 0x51, 0x02, 0xF2,
+	0x89, 0x43, 0xAA, 0x80, 0x7B, 0x62, 0xEC, 0xA0,
+	0x13, 0xC1, 0x6A, 0x2C, 0x66, 0x43, 0x88, 0x9B,
+	0x0C, 0xAB, 0x23, 0x2A, 0x9B, 0x6B, 0x24, 0x4E,
+	0x37, 0x58, 0xD8, 0x20, 0xAA, 0x3D, 0xD8, 0x54,
+	0x06, 0x52, 0xA4, 0x5B, 0x03, 0xAE, 0x42, 0xFC,
+	0x88, 0x0A, 0x55, 0xA2, 0x04, 0x2C, 0x30, 0xFF,
+	0x58, 0xF7, 0xE9, 0xA8, 0xAC, 0xB1, 0x8F, 0xF5,
+	0x58, 0x2E, 0x3E, 0xAB, 0xB5, 0x9E, 0xAF, 0x26,
+	0x24, 0x0C, 0xED, 0xF1, 0x34, 0xB0, 0x71, 0xA7,
+	0x01, 0xCD, 0xB5, 0x10, 0xF6, 0x61, 0x2F, 0x25,
+	0x88, 0xA1, 0x15, 0x9C, 0xB2, 0xFA, 0xA8, 0x06,
+	0x0E, 0x19, 0xB5, 0x80, 0x31, 0x5C, 0x9D, 0x9D,
+	0xC8, 0x3A, 0x17, 0x69, 0x3B, 0xC5, 0xB1, 0x3C,
+	0xB8, 0x5B, 0xC8, 0xE0, 0xE8, 0xD1, 0x95, 0xDC,
+	0xC5, 0xD3, 0xC4, 0x2F, 0x06, 0xB9, 0xEA, 0x61,
+	0x1F, 0x66, 0x0C, 0xE5, 0xC1, 0xF4, 0xE0, 0x38,
+
+	0x90, 0x6D, 0x0A, 0xF9, 0xF2, 0x46, 0x56, 0xF6,
+	0x65, 0x91, 0x61, 0x15, 0x8B, 0x41, 0x22, 0xBF,
+	0x13, 0x7A, 0xC8, 0x21, 0x38, 0x51, 0x20, 0x77,
+	0x2A, 0x54, 0xBD, 0x7D, 0xC3, 0x6E, 0x36, 0x8E,
+	0x4E, 0x21, 0x3D, 0x52, 0xA0, 0xA0, 0x54, 0xFC,
+	0x35, 0x23, 0x70, 0x22, 0x1E, 0x1A, 0x94, 0xA1,
+	0x64, 0xA8, 0xBF, 0x8A, 0xD6, 0x95, 0x6E, 0xD6,
+	0x31, 0x81, 0xB0, 0xFC, 0xFD, 0x0D, 0xF8, 0xC0,
+	0xCB, 0x7D, 0x98, 0xAF, 0xEC, 0x9C, 0x86, 0xBB,
+	0x15, 0x58, 0x33, 0xED, 0x9C, 0x49, 0x17, 0xDA,
+	0x58, 0xB7, 0x3F, 0xDF, 0xEF, 0x0C, 0x7E, 0x24,
+	0xD3, 0x4F, 0xF3, 0x0C, 0x9E, 0x64, 0x58, 0x3B,
+	0xB5, 0xB5, 0xE3, 0xCE, 0x59, 0x6E, 0x09, 0xA1,
+	0x97, 0x42, 0x03, 0xE6, 0x3B, 0xDE, 0x0B, 0xFD,
+	0x81, 0xE0, 0x9C, 0x0F, 0x9E, 0x8C, 0x92, 0xC8,
+	0x4A, 0x76, 0x2E, 0xCE, 0x08, 0x60, 0xA1, 0x45,
+	0x19, 0xEC, 0xC5, 0x63, 0x47, 0xC3, 0x65, 0x3F,
+	0x52, 0xF2, 0xBC, 0x18, 0x89, 0x10, 0x62, 0xF1,
+	0xEE, 0xBD, 0xAA, 0xDA, 0x4E, 0x33, 0x35, 0x79,
+	0xDD,
+
+	0xE8, 0xE9, 0xFE, 0x85, 0x92, 0xE5, 0x20, 0xD7,
+	0x69, 0xA4, 0x6F, 0x86, 0x69, 0x43, 0x31, 0xE3,
+	0xBA, 0x12, 0xED, 0xF6, 0xB2, 0xF0, 0x63, 0x02,
+	0x7F, 0x3F, 0xF8, 0x04, 0xA0, 0x60, 0x2F, 0x11,
+	0x2F, 0xA9, 0xD4, 0x0C, 0xEB, 0x7D, 0x2B, 0xA0,
+	0x25, 0x59, 0x72, 0x95, 0xAC, 0x98, 0x8D, 0x37,
+	0x3B, 0x77, 0x36, 0x02, 0xC0, 0xC4, 0x6D, 0xCB,
+	0xC7, 0xD2, 0x6B, 0xF0, 0xFB, 0x35, 0xD2, 0x0E,
+	0x19, 0x71, 0x2B, 0x22, 0x8F, 0x81, 0x38, 0x17,
+	0x47, 0x6C, 0xAE, 0x3F, 0x79, 0xE7, 0xEA, 0x65,
+	0x62, 0xE2, 0x88, 0x61, 0xB8, 0x06, 0x99, 0xC5,
+	0x4A, 0x44, 0xA6, 0x4A, 0x52, 0x76, 0xA9, 0x22,
+	0x66, 0x2C, 0x0E, 0x3D, 0x46, 0x8D, 0xD9, 0xC5,
+	0x83, 0x8A, 0xE5, 0x62, 0x64, 0xD4, 0xBB, 0x9F,
+	0x77, 0x09, 0x3C, 0xE6, 0x35, 0x11, 0xE5, 0x2F,
+	0x6B, 0xFD, 0x55, 0x95, 0xFD, 0x63, 0x1E, 0x32,
+	0x4A, 0xD6, 0x3B, 0x3E, 0x33, 0x7E, 0x26, 0x58,
+	0xAD, 0x67, 0xE9, 0x58, 0x4B, 0x19, 0x89, 0xC0,
+	0x4E, 0x17, 0xCA, 0x40, 0x74, 0x8F, 0xAE, 0xFD,
+	0xAA, 0x1F,
+
+	0x35, 0xAD, 0x58, 0xB9, 0xC3, 0xF0, 0xDA, 0xCA,
+	0xE5, 0x2A, 0x20, 0x04, 0x22, 0xD2, 0xFD, 0xBE,
+	0xF6, 0x72, 0xD4, 0x7B, 0xA6, 0x9C, 0x45, 0x83,
+	0x6A, 0x69, 0xD9, 0xCA, 0x77, 0x6C, 0x59, 0xF8,
+	0x04, 0xF6, 0xE5, 0xE4, 0x10, 0xCF, 0xDE, 0xAE,
+	0x84, 0xF4, 0x87, 0x70, 0x63, 0xD1, 0x99, 0x57,
+	0xD8, 0xCB, 0xA3, 0xF8, 0xAC, 0xB3, 0x83, 0xCA,
+	0x6F, 0x4E, 0xAA, 0x11, 0x44, 0x95, 0x10, 0x11,
+	0x3B, 0xBF, 0xE8, 0x0C, 0x9E, 0xFC, 0x7F, 0x9C,
+	0x93, 0x76, 0x05, 0xBE, 0xB7, 0xC8, 0x61, 0x20,
+	0x5A, 0x74, 0x93, 0x35, 0x51, 0x26, 0xF7, 0xBD,
+	0x97, 0x7B, 0xEE, 0x63, 0xD2, 0x06, 0xF8, 0xAA,
+	0x58, 0xE6, 0x3A, 0x39, 0x3C, 0x39, 0xF5, 0x17,
+	0x1C, 0xB8, 0x6D, 0x9C, 0x64, 0x05, 0xA8, 0x28,
+	0x24, 0x92, 0x58, 0xC7, 0x44, 0x03, 0xCB, 0x18,
+	0xE8, 0xA6, 0x5F, 0x5A, 0xD4, 0x67, 0x36, 0x3E,
+	0xC5, 0x6F, 0x9B, 0xF5, 0x97, 0xEC, 0xFC, 0xAB,
+	0xD3, 0x82, 0x12, 0x88, 0xDC, 0x5D, 0xA2, 0x96,
+	0xBE, 0xF0, 0xAD, 0xE8, 0x33, 0xBF, 0xD0, 0xAB,
+	0xDD, 0x89, 0xFA,
+
+	0x05, 0x42, 0x08, 0x81, 0x2D, 0x60, 0x6C, 0x60,
+	0x24, 0xF7, 0x10, 0xC2, 0x0D, 0x63, 0xA7, 0x50,
+	0x3F, 0xB5, 0x31, 0x88, 0xBE, 0xC6, 0x64, 0x55,
+	0x13, 0xEA, 0x85, 0x5E, 0x4B, 0xB6, 0x90, 0xCC,
+	0xC2, 0x6A, 0x0B, 0x67, 0x99, 0x08, 0x0C, 0x46,
+	0x90, 0xC5, 0x8B, 0x81, 0xC9, 0xAE, 0xBD, 0x01,
+	0x65, 0x67, 0xC2, 0xB1, 0xF0, 0xFF, 0xBB, 0xA0,
+	0xFB, 0xA6, 0xB2, 0x3E, 0xDE, 0x5A, 0xB5, 0xBF,
+	0x1B, 0x61, 0x3E, 0x6E, 0x1C, 0xD1, 0x1C, 0x5E,
+	0x77, 0x36, 0xAB, 0xF7, 0x13, 0xD4, 0xAE, 0x5F,
+	0x8C, 0x80, 0xF0, 0xF5, 0x0C, 0x49, 0x25, 0x3C,
+	0xD0, 0x3A, 0x68, 0xE1, 0x95, 0x65, 0x48, 0xDB,
+	0x86, 0xE5, 0xBF, 0x62, 0xE8, 0x02, 0x1B, 0x80,
+	0x8E, 0xE6, 0x34, 0x0B, 0x19, 0x6C, 0x88, 0xD8,
+	0x48, 0x18, 0x64, 0x92, 0x83, 0x60, 0xDD, 0x31,
+	0x61, 0x6B, 0xF1, 0x3C, 0xBA, 0xB2, 0xAF, 0x38,
+	0xE7, 0x24, 0x5E, 0x0D, 0xDD, 0x76, 0xAA, 0x2B,
+	0x8B, 0x79, 0x97, 0x13, 0xE4, 0xBF, 0x3B, 0xC8,
+	0x73, 0xEF, 0x71, 0xB3, 0xF3, 0x65, 0x3D, 0xDA,
+	0x53, 0x41, 0x59, 0xC4,
+
+	0x12, 0x07, 0x8E, 0x2B, 0x65, 0xC1, 0x6D, 0x37,
+	0x32, 0xC4, 0x9E, 0x8A, 0xE6, 0x0D, 0x49, 0x1F,
+	0xC8, 0x83, 0xEC, 0x0A, 0xC2, 0x1C, 0x0B, 0x2B,
+	0x27, 0xD4, 0x93, 0xBD, 0x43, 0x6E, 0xC9, 0xF2,
+	0x06, 0xD9, 0x33, 0xAE, 0x7A, 0xA2, 0xCE, 0x7A,
+	0xE6, 0x3C, 0xD6, 0x84, 0xC5, 0x0B, 0xC9, 0x3F,
+	0x2D, 0xA1, 0x7E, 0x83, 0x72, 0x5E, 0x51, 0x56,
+	0xA9, 0x72, 0x18, 0xD2, 0xE5, 0x0C, 0x7F, 0xC5,
+	0x2D, 0x4B, 0x5D, 0x2F, 0xA8, 0xAC, 0xB9, 0x88,
+	0xA6, 0x4B, 0x0A, 0xBD, 0x80, 0x5E, 0x2A, 0x5A,
+	0x78, 0xA5, 0x94, 0xC1, 0x71, 0xBD, 0x6C, 0x04,
+	0xF1, 0x4A, 0x82, 0xA3, 0x5B, 0xF4, 0x7F, 0x05,
+	0x90, 0x18, 0xD5, 0xFD, 0xE2, 0x06, 0x1E, 0x34,
+	0x23, 0xF8, 0x51, 0x9A, 0x8F, 0x4F, 0x81, 0x83,
+	0xB3, 0x89, 0x1C, 0x56, 0xE2, 0x5B, 0x51, 0xBC,
+	0xE4, 0x15, 0xE0, 0xF5, 0x0D, 0x79, 0xEE, 0xD3,
+	0x2D, 0xB5, 0x7F, 0xD6, 0x2C, 0xEC, 0x88, 0x8B,
+	0x24, 0x6E, 0xA9, 0xF8, 0xE1, 0x83, 0x82, 0x00,
+	0x0F, 0xA1, 0xC1, 0x3B, 0xC9, 0x75, 0x4B, 0x4C,
+	0x90, 0x35, 0xE3, 0x8C, 0x87,
+
+	0xE4, 0x31, 0x8F, 0xF6, 0xFB, 0x39, 0xFA, 0x30,
+	0x7E, 0x1A, 0x9F, 0x09, 0x95, 0xCB, 0x29, 0xBA,
+	0x57, 0xDE, 0xDE, 0x9A, 0x3C, 0xF2, 0x3E, 0xBE,
+	0x5A, 0x00, 0xD7, 0x07, 0x86, 0x15, 0x69, 0x0B,
+	0xDB, 0x5C, 0x65, 0xE3, 0xA2, 0x81, 0x35, 0x3F,
+	0x9E, 0x6A, 0xE7, 0x7E, 0x55, 0xDC, 0xF6, 0x1A,
+	0x79, 0xC1, 0x48, 0x56, 0x87, 0x00, 0x9F, 0xF9,
+	0x73, 0x85, 0xF4, 0x02, 0xCB, 0xFA, 0x49, 0xAB,
+	0x45, 0xDA, 0x50, 0x92, 0x70, 0xC2, 0x7C, 0x39,
+	0xCC, 0x34, 0x0C, 0x12, 0x5D, 0xBD, 0x25, 0x45,
+	0x4F, 0xFF, 0x15, 0x73, 0x68, 0x4F, 0x99, 0x04,
+	0x03, 0xD4, 0x93, 0x68, 0x41, 0x73, 0x30, 0x18,
+	0x46, 0xCB, 0xFC, 0x50, 0xB0, 0x2E, 0x7E, 0x6D,
+	0xF2, 0x21, 0x8D, 0x35, 0x07, 0x5E, 0xCE, 0x53,
+	0x82, 0xD0, 0x76, 0x4F, 0xD0, 0xFF, 0x06, 0x11,
+	0xC5, 0x97, 0x64, 0xE1, 0x34, 0xD9, 0x9C, 0x14,
+	0xBD, 0xED, 0xF3, 0xA6, 0xBB, 0x4E, 0x5B, 0xC9,
+	0x0A, 0xBA, 0xC8, 0x8A, 0xF2, 0x6B, 0x74, 0x32,
+	0x0E, 0xE2, 0x3D, 0xAE, 0x48, 0x0E, 0x06, 0xCA,
+	0xA5, 0xEF, 0x06, 0xE6, 0x9C, 0x30,
+
+	0xFD, 0x4F, 0x39, 0x5C, 0x3F, 0x33, 0xDA, 0xAB,
+	0xF5, 0x37, 0x5D, 0xF8, 0xBA, 0x42, 0x41, 0xD5,
+	0xDF, 0x43, 0x55, 0x1D, 0xB8, 0x26, 0x94, 0x92,
+	0xD8, 0x03, 0x94, 0xC1, 0x14, 0x96, 0xD3, 0xA3,
+	0x7F, 0xAF, 0x3F, 0xF4, 0x9F, 0xBC, 0xDE, 0xCC,
+	0x48, 0x97, 0x86, 0x23, 0x0C, 0xA2, 0x8A, 0xB6,
+	0x12, 0x2A, 0x7A, 0xC1, 0x77, 0xF7, 0xC0, 0xBA,
+	0xAF, 0x47, 0x50, 0xB1, 0xE9, 0x2B, 0x0B, 0xA7,
+	0x4C, 0x47, 0xA2, 0x8A, 0x97, 0xDD, 0xA0, 0xDA,
+	0xCE, 0xB3, 0x07, 0x23, 0xA5, 0x22, 0x2C, 0x92,
+	0xDC, 0x36, 0x67, 0x53, 0x23, 0xB0, 0xA2, 0x33,
+	0xD2, 0x76, 0x7A, 0xFC, 0xA5, 0x0D, 0x80, 0xBC,
+	0xA7, 0x33, 0x88, 0xAD, 0x14, 0x4D, 0xCE, 0x07,
+	0x13, 0xB8, 0xCF, 0x70, 0xC8, 0xD3, 0x3B, 0xD2,
+	0xD3, 0x51, 0xB8, 0x31, 0x97, 0x65, 0x33, 0x42,
+	0xFE, 0xF9, 0xDD, 0x03, 0xB7, 0x11, 0xEB, 0xC2,
+	0xDB, 0xB4, 0x89, 0xA6, 0x69, 0x21, 0xAC, 0x02,
+	0xBD, 0x21, 0xDA, 0x01, 0xD6, 0x93, 0x5E, 0x9D,
+	0x6B, 0x53, 0xB8, 0xAD, 0x0E, 0xF3, 0xA2, 0x49,
+	0x1B, 0x9D, 0xD6, 0x80, 0x8A, 0xE8, 0xE6,
+
+	0xF2, 0xF6, 0x83, 0xEC, 0x0D, 0x37, 0x90, 0x22,
+	0x37, 0x64, 0xBE, 0x1D, 0x27, 0xE1, 0x2B, 0x05,
+	0x0C, 0x46, 0xE7, 0x80, 0x62, 0x0E, 0x4F, 0xFA,
+	0xE0, 0x90, 0x45, 0x94, 0x88, 0x75, 0x99, 0x3D,
+	0xD1, 0xE1, 0x7A, 0xAB, 0x58, 0xF4, 0x46, 0x1E,
+	0x8B, 0x28, 0x41, 0xA1, 0x91, 0xE5, 0x79, 0xF6,
+	0x75, 0x49, 0xDB, 0x24, 0x4B, 0xEE, 0x54, 0xE3,
+	0x38, 0x12, 0xFE, 0x4B, 0x82, 0x17, 0xD4, 0x9D,
+	0x2D, 0xEB, 0x2F, 0x5B, 0x6D, 0x3C, 0x02, 0x82,
+	0x77, 0x5D, 0xF3, 0x52, 0x4A, 0x89, 0x88, 0x65,
+	0x71, 0x38, 0x5B, 0x51, 0x12, 0xF9, 0x3E, 0x75,
+	0x5A, 0x0C, 0x43, 0x54, 0xA9, 0xE0, 0x96, 0x65,
+	0x7E, 0x14, 0xB1, 0xB8, 0x5D, 0x1C, 0x0E, 0xEA,
+	0x5B, 0x3A, 0x6F, 0x42, 0xF5, 0x43, 0xB1, 0x6E,
+	0xD9, 0x03, 0x21, 0x24, 0xE9, 0x35, 0xEE, 0x0C,
+	0xAB, 0xD2, 0x66, 0x91, 0x65, 0x50, 0xD5, 0x03,
+	0x65, 0xAE, 0x20, 0x85, 0xEB, 0x7C, 0x29, 0x56,
+	0x35, 0x97, 0xDD, 0x3F, 0x82, 0x51, 0x80, 0x65,
+	0xC4, 0x22, 0xE3, 0x49, 0xAD, 0xBA, 0x91, 0xF7,
+	0x5C, 0x26, 0x91, 0x73, 0xC6, 0xBF, 0x8E, 0x29,
+
+	0x0C, 0xB3, 0x9A, 0xB0, 0x01, 0xAC, 0x59, 0x89,
+	0x32, 0x6D, 0xBC, 0x4F, 0x34, 0x15, 0x65, 0x21,
+	0x23, 0x8A, 0xA9, 0x18, 0x99, 0xB8, 0x23, 0x7D,
+	0xD3, 0x0E, 0x2C, 0xEC, 0x85, 0x65, 0x71, 0x29,
+	0xD9, 0x43, 0xDE, 0x18, 0xB9, 0x88, 0x0F, 0x7B,
+	0xBF, 0x8B, 0x5A, 0x98, 0x1F, 0x0A, 0x36, 0xF1,
+	0x8F, 0x46, 0x9E, 0xD2, 0x36, 0x70, 0x94, 0x3B,
+	0x16, 0xB5, 0xEE, 0x1B, 0x6F, 0x7A, 0xEC, 0x6A,
+	0x83, 0x82, 0x5B, 0x23, 0x26, 0x21, 0x57, 0x74,
+	0x21, 0x29, 0x9D, 0x06, 0x4F, 0xBD, 0x38, 0xB7,
+	0x02, 0x28, 0x42, 0x51, 0x03, 0x0F, 0xA5, 0xDA,
+	0xE2, 0x68, 0x02, 0xC1, 0x87, 0x86, 0x1C, 0x88,
+	0xC9, 0xA6, 0xE4, 0x6C, 0xEB, 0xDC, 0x7A, 0x56,