invoices: accept mpp payments

This commit is contained in:
Joost Jager 2019-09-03 12:23:39 +02:00
parent 56958493fe
commit b2f43858c3
No known key found for this signature in database
GPG Key ID: A61B9D4C393C59C7
10 changed files with 1125 additions and 594 deletions

@ -117,6 +117,7 @@ const (
resolveTimeType tlv.Type = 11 resolveTimeType tlv.Type = 11
expiryHeightType tlv.Type = 13 expiryHeightType tlv.Type = 13
htlcStateType tlv.Type = 15 htlcStateType tlv.Type = 15
mppTotalAmtType tlv.Type = 17
// A set of tlv type definitions used to serialize invoice bodiees. // A set of tlv type definitions used to serialize invoice bodiees.
// //
@ -289,6 +290,10 @@ type InvoiceHTLC struct {
// Amt is the amount that is carried by this htlc. // Amt is the amount that is carried by this htlc.
Amt lnwire.MilliSatoshi Amt lnwire.MilliSatoshi
// MppTotalAmt is a field for mpp that indicates the expected total
// amount.
MppTotalAmt lnwire.MilliSatoshi
// AcceptHeight is the block height at which the invoice registry // AcceptHeight is the block height at which the invoice registry
// decided to accept this htlc as a payment to the invoice. At this // decided to accept this htlc as a payment to the invoice. At this
// height, the invoice cltv delay must have been met. // height, the invoice cltv delay must have been met.
@ -323,6 +328,10 @@ type HtlcAcceptDesc struct {
// Amt is the amount that is carried by this htlc. // Amt is the amount that is carried by this htlc.
Amt lnwire.MilliSatoshi Amt lnwire.MilliSatoshi
// MppTotalAmt is a field for mpp that indicates the expected total
// amount.
MppTotalAmt lnwire.MilliSatoshi
// Expiry is the expiry height of this htlc. // Expiry is the expiry height of this htlc.
Expiry uint32 Expiry uint32
@ -1018,6 +1027,7 @@ func serializeHtlcs(w io.Writer, htlcs map[CircuitKey]*InvoiceHTLC) error {
// Encode the htlc in a tlv stream. // Encode the htlc in a tlv stream.
chanID := key.ChanID.ToUint64() chanID := key.ChanID.ToUint64()
amt := uint64(htlc.Amt) amt := uint64(htlc.Amt)
mppTotalAmt := uint64(htlc.MppTotalAmt)
acceptTime := uint64(htlc.AcceptTime.UnixNano()) acceptTime := uint64(htlc.AcceptTime.UnixNano())
resolveTime := uint64(htlc.ResolveTime.UnixNano()) resolveTime := uint64(htlc.ResolveTime.UnixNano())
state := uint8(htlc.State) state := uint8(htlc.State)
@ -1034,6 +1044,7 @@ func serializeHtlcs(w io.Writer, htlcs map[CircuitKey]*InvoiceHTLC) error {
tlv.MakePrimitiveRecord(resolveTimeType, &resolveTime), tlv.MakePrimitiveRecord(resolveTimeType, &resolveTime),
tlv.MakePrimitiveRecord(expiryHeightType, &htlc.Expiry), tlv.MakePrimitiveRecord(expiryHeightType, &htlc.Expiry),
tlv.MakePrimitiveRecord(htlcStateType, &state), tlv.MakePrimitiveRecord(htlcStateType, &state),
tlv.MakePrimitiveRecord(mppTotalAmtType, &mppTotalAmt),
) )
// Convert the custom records to tlv.Record types that are ready // Convert the custom records to tlv.Record types that are ready
@ -1193,7 +1204,7 @@ func deserializeHtlcs(r io.Reader) (map[CircuitKey]*InvoiceHTLC, error) {
chanID uint64 chanID uint64
state uint8 state uint8
acceptTime, resolveTime uint64 acceptTime, resolveTime uint64
amt uint64 amt, mppTotalAmt uint64
) )
tlvStream, err := tlv.NewStream( tlvStream, err := tlv.NewStream(
tlv.MakePrimitiveRecord(chanIDType, &chanID), tlv.MakePrimitiveRecord(chanIDType, &chanID),
@ -1206,6 +1217,7 @@ func deserializeHtlcs(r io.Reader) (map[CircuitKey]*InvoiceHTLC, error) {
tlv.MakePrimitiveRecord(resolveTimeType, &resolveTime), tlv.MakePrimitiveRecord(resolveTimeType, &resolveTime),
tlv.MakePrimitiveRecord(expiryHeightType, &htlc.Expiry), tlv.MakePrimitiveRecord(expiryHeightType, &htlc.Expiry),
tlv.MakePrimitiveRecord(htlcStateType, &state), tlv.MakePrimitiveRecord(htlcStateType, &state),
tlv.MakePrimitiveRecord(mppTotalAmtType, &mppTotalAmt),
) )
if err != nil { if err != nil {
return nil, err return nil, err
@ -1221,6 +1233,7 @@ func deserializeHtlcs(r io.Reader) (map[CircuitKey]*InvoiceHTLC, error) {
htlc.ResolveTime = time.Unix(0, int64(resolveTime)) htlc.ResolveTime = time.Unix(0, int64(resolveTime))
htlc.State = HtlcState(state) htlc.State = HtlcState(state)
htlc.Amt = lnwire.MilliSatoshi(amt) htlc.Amt = lnwire.MilliSatoshi(amt)
htlc.MppTotalAmt = lnwire.MilliSatoshi(mppTotalAmt)
// Reconstruct the custom records fields from the parsed types // Reconstruct the custom records fields from the parsed types
// map return from the tlv parser. // map return from the tlv parser.
@ -1324,6 +1337,7 @@ func (d *DB) updateInvoice(hash lntypes.Hash, invoices, settleIndex *bbolt.Bucke
htlc := &InvoiceHTLC{ htlc := &InvoiceHTLC{
Amt: htlcUpdate.Amt, Amt: htlcUpdate.Amt,
MppTotalAmt: htlcUpdate.MppTotalAmt,
Expiry: htlcUpdate.Expiry, Expiry: htlcUpdate.Expiry,
AcceptHeight: uint32(htlcUpdate.AcceptHeight), AcceptHeight: uint32(htlcUpdate.AcceptHeight),
AcceptTime: now, AcceptTime: now,

@ -2,8 +2,10 @@ package invoices
import ( import (
"errors" "errors"
"fmt"
"sync" "sync"
"sync/atomic" "sync/atomic"
"time"
"github.com/davecgh/go-spew/spew" "github.com/davecgh/go-spew/spew"
"github.com/lightningnetwork/lnd/channeldb" "github.com/lightningnetwork/lnd/channeldb"
@ -26,6 +28,12 @@ var (
ErrShuttingDown = errors.New("invoice registry shutting down") ErrShuttingDown = errors.New("invoice registry shutting down")
) )
const (
// DefaultHtlcHoldDuration defines the default for how long mpp htlcs
// are held while waiting for the other set members to arrive.
DefaultHtlcHoldDuration = 120 * time.Second
)
// HodlEvent describes how an htlc should be resolved. If HodlEvent.Preimage is // HodlEvent describes how an htlc should be resolved. If HodlEvent.Preimage is
// set, the event indicates a settle event. If Preimage is nil, it is a cancel // set, the event indicates a settle event. If Preimage is nil, it is a cancel
// event. // event.
@ -49,6 +57,38 @@ type RegistryConfig struct {
// expiry of any invoice we create and the code effectuating this should // expiry of any invoice we create and the code effectuating this should
// not be hit. // not be hit.
FinalCltvRejectDelta int32 FinalCltvRejectDelta int32
// HtlcHoldDuration defines for how long mpp htlcs are held while
// waiting for the other set members to arrive.
HtlcHoldDuration time.Duration
// Now returns the current time.
Now func() time.Time
// TickAfter returns a channel that is sent on after the specified
// duration as passed.
TickAfter func(duration time.Duration) <-chan time.Time
}
// htlcReleaseEvent describes an htlc auto-release event. It is used to release
// mpp htlcs for which the complete set didn't arrive in time.
type htlcReleaseEvent struct {
// hash is the payment hash of the htlc to release.
hash lntypes.Hash
// key is the circuit key of the htlc to release.
key channeldb.CircuitKey
// releaseTime is the time at which to release the htlc.
releaseTime time.Time
}
// Less is used to order PriorityQueueItem's by their release time such that
// items with the older release time are at the top of the queue.
//
// NOTE: Part of the queue.PriorityQueueItem interface.
func (r *htlcReleaseEvent) Less(other queue.PriorityQueueItem) bool {
return r.releaseTime.Before(other.(*htlcReleaseEvent).releaseTime)
} }
// InvoiceRegistry is a central registry of all the outstanding invoices // InvoiceRegistry is a central registry of all the outstanding invoices
@ -82,6 +122,10 @@ type InvoiceRegistry struct {
// subscriber. This is used to unsubscribe from all hashes efficiently. // subscriber. This is used to unsubscribe from all hashes efficiently.
hodlReverseSubscriptions map[chan<- interface{}]map[channeldb.CircuitKey]struct{} hodlReverseSubscriptions map[chan<- interface{}]map[channeldb.CircuitKey]struct{}
// htlcAutoReleaseChan contains the new htlcs that need to be
// auto-released.
htlcAutoReleaseChan chan *htlcReleaseEvent
wg sync.WaitGroup wg sync.WaitGroup
quit chan struct{} quit chan struct{}
} }
@ -91,7 +135,6 @@ type InvoiceRegistry struct {
// layer. The in-memory layer is in place such that debug invoices can be added // layer. The in-memory layer is in place such that debug invoices can be added
// which are volatile yet available system wide within the daemon. // which are volatile yet available system wide within the daemon.
func NewRegistry(cdb *channeldb.DB, cfg *RegistryConfig) *InvoiceRegistry { func NewRegistry(cdb *channeldb.DB, cfg *RegistryConfig) *InvoiceRegistry {
return &InvoiceRegistry{ return &InvoiceRegistry{
cdb: cdb, cdb: cdb,
notificationClients: make(map[uint32]*InvoiceSubscription), notificationClients: make(map[uint32]*InvoiceSubscription),
@ -102,6 +145,7 @@ func NewRegistry(cdb *channeldb.DB, cfg *RegistryConfig) *InvoiceRegistry {
hodlSubscriptions: make(map[channeldb.CircuitKey]map[chan<- interface{}]struct{}), hodlSubscriptions: make(map[channeldb.CircuitKey]map[chan<- interface{}]struct{}),
hodlReverseSubscriptions: make(map[chan<- interface{}]map[channeldb.CircuitKey]struct{}), hodlReverseSubscriptions: make(map[chan<- interface{}]map[channeldb.CircuitKey]struct{}),
cfg: cfg, cfg: cfg,
htlcAutoReleaseChan: make(chan *htlcReleaseEvent),
quit: make(chan struct{}), quit: make(chan struct{}),
} }
} }
@ -110,7 +154,7 @@ func NewRegistry(cdb *channeldb.DB, cfg *RegistryConfig) *InvoiceRegistry {
func (i *InvoiceRegistry) Start() error { func (i *InvoiceRegistry) Start() error {
i.wg.Add(1) i.wg.Add(1)
go i.invoiceEventNotifier() go i.invoiceEventLoop()
return nil return nil
} }
@ -130,13 +174,31 @@ type invoiceEvent struct {
invoice *channeldb.Invoice invoice *channeldb.Invoice
} }
// invoiceEventNotifier is the dedicated goroutine responsible for accepting // tickAt returns a channel that ticks at the specified time. If the time has
// already passed, it will tick immediately.
func (i *InvoiceRegistry) tickAt(t time.Time) <-chan time.Time {
now := i.cfg.Now()
return i.cfg.TickAfter(t.Sub(now))
}
// invoiceEventLoop is the dedicated goroutine responsible for accepting
// new notification subscriptions, cancelling old subscriptions, and // new notification subscriptions, cancelling old subscriptions, and
// dispatching new invoice events. // dispatching new invoice events.
func (i *InvoiceRegistry) invoiceEventNotifier() { func (i *InvoiceRegistry) invoiceEventLoop() {
defer i.wg.Done() defer i.wg.Done()
// Set up a heap for htlc auto-releases.
autoReleaseHeap := &queue.PriorityQueue{}
for { for {
// If there is something to release, set up a release tick
// channel.
var nextReleaseTick <-chan time.Time
if autoReleaseHeap.Len() > 0 {
head := autoReleaseHeap.Top().(*htlcReleaseEvent)
nextReleaseTick = i.tickAt(head.releaseTime)
}
select { select {
// A new invoice subscription for all invoices has just arrived! // A new invoice subscription for all invoices has just arrived!
// We'll query for any backlog notifications, then add it to the // We'll query for any backlog notifications, then add it to the
@ -202,6 +264,29 @@ func (i *InvoiceRegistry) invoiceEventNotifier() {
i.singleNotificationClients[e.id] = e i.singleNotificationClients[e.id] = e
} }
// A new htlc came in for auto-release.
case event := <-i.htlcAutoReleaseChan:
log.Debugf("Scheduling auto-release for htlc: "+
"hash=%v, key=%v at %v",
event.hash, event.key, event.releaseTime)
// We use an independent timer for every htlc rather
// than a set timer that is reset with every htlc coming
// in. Otherwise the sender could keep resetting the
// timer until the broadcast window is entered and our
// channel is force closed.
autoReleaseHeap.Push(event)
// The htlc at the top of the heap needs to be auto-released.
case <-nextReleaseTick:
event := autoReleaseHeap.Pop().(*htlcReleaseEvent)
err := i.cancelSingleHtlc(
event.hash, event.key,
)
if err != nil {
log.Errorf("HTLC timer: %v", err)
}
case <-i.quit: case <-i.quit:
return return
} }
@ -418,6 +503,114 @@ func (i *InvoiceRegistry) LookupInvoice(rHash lntypes.Hash) (channeldb.Invoice,
return i.cdb.LookupInvoice(rHash) return i.cdb.LookupInvoice(rHash)
} }
// startHtlcTimer starts a new timer via the invoice registry main loop that
// cancels a single htlc on an invoice when the htlc hold duration has passed.
func (i *InvoiceRegistry) startHtlcTimer(hash lntypes.Hash,
key channeldb.CircuitKey, acceptTime time.Time) error {
releaseTime := acceptTime.Add(i.cfg.HtlcHoldDuration)
event := &htlcReleaseEvent{
hash: hash,
key: key,
releaseTime: releaseTime,
}
select {
case i.htlcAutoReleaseChan <- event:
return nil
case <-i.quit:
return ErrShuttingDown
}
}
// cancelSingleHtlc cancels a single accepted htlc on an invoice.
func (i *InvoiceRegistry) cancelSingleHtlc(hash lntypes.Hash,
key channeldb.CircuitKey) error {
i.Lock()
defer i.Unlock()
updateInvoice := func(invoice *channeldb.Invoice) (
*channeldb.InvoiceUpdateDesc, error) {
// Only allow individual htlc cancelation on open invoices.
if invoice.State != channeldb.ContractOpen {
log.Debugf("cancelSingleHtlc: invoice %v no longer "+
"open", hash)
return nil, nil
}
// Lookup the current status of the htlc in the database.
htlc, ok := invoice.Htlcs[key]
if !ok {
return nil, fmt.Errorf("htlc %v not found", key)
}
// Cancelation is only possible if the htlc wasn't already
// resolved.
if htlc.State != channeldb.HtlcStateAccepted {
log.Debugf("cancelSingleHtlc: htlc %v on invoice %v "+
"is already resolved", key, hash)
return nil, nil
}
log.Debugf("cancelSingleHtlc: cancelling htlc %v on invoice %v",
key, hash)
// Return an update descriptor that cancels htlc and keeps
// invoice open.
canceledHtlcs := map[channeldb.CircuitKey]struct{}{
key: {},
}
return &channeldb.InvoiceUpdateDesc{
CancelHtlcs: canceledHtlcs,
}, nil
}
// Try to mark the specified htlc as canceled in the invoice database.
// Intercept the update descriptor to set the local updated variable. If
// no invoice update is performed, we can return early.
var updated bool
invoice, err := i.cdb.UpdateInvoice(hash,
func(invoice *channeldb.Invoice) (
*channeldb.InvoiceUpdateDesc, error) {
updateDesc, err := updateInvoice(invoice)
if err != nil {
return nil, err
}
updated = updateDesc != nil
return updateDesc, err
},
)
if err != nil {
return err
}
if !updated {
return nil
}
// The invoice has been updated. Notify subscribers of the htlc
// resolution.
htlc, ok := invoice.Htlcs[key]
if !ok {
return fmt.Errorf("htlc %v not found", key)
}
if htlc.State == channeldb.HtlcStateCanceled {
i.notifyHodlSubscribers(HodlEvent{
CircuitKey: key,
AcceptHeight: int32(htlc.AcceptHeight),
Preimage: nil,
})
}
return nil
}
// NotifyExitHopHtlc attempts to mark an invoice as settled. The return value // NotifyExitHopHtlc attempts to mark an invoice as settled. The return value
// describes how the htlc should be resolved. // describes how the htlc should be resolved.
// //
@ -428,6 +621,11 @@ func (i *InvoiceRegistry) LookupInvoice(rHash lntypes.Hash) (channeldb.Invoice,
// to be taken on the htlc (settle or cancel). The caller needs to ensure that // to be taken on the htlc (settle or cancel). The caller needs to ensure that
// the channel is either buffered or received on from another goroutine to // the channel is either buffered or received on from another goroutine to
// prevent deadlock. // prevent deadlock.
//
// In the case that the htlc is part of a larger set of htlcs that pay to the
// same invoice (multi-path payment), the htlc is held until the set is
// complete. If the set doesn't fully arrive in time, a timer will cancel the
// held htlc.
func (i *InvoiceRegistry) NotifyExitHopHtlc(rHash lntypes.Hash, func (i *InvoiceRegistry) NotifyExitHopHtlc(rHash lntypes.Hash,
amtPaid lnwire.MilliSatoshi, expiry uint32, currentHeight int32, amtPaid lnwire.MilliSatoshi, expiry uint32, currentHeight int32,
circuitKey channeldb.CircuitKey, hodlChan chan<- interface{}, circuitKey channeldb.CircuitKey, hodlChan chan<- interface{},
@ -436,9 +634,11 @@ func (i *InvoiceRegistry) NotifyExitHopHtlc(rHash lntypes.Hash,
i.Lock() i.Lock()
defer i.Unlock() defer i.Unlock()
mpp := payload.MultiPath()
debugLog := func(s string) { debugLog := func(s string) {
log.Debugf("Invoice(%x): %v, amt=%v, expiry=%v, circuit=%v", log.Debugf("Invoice(%x): %v, amt=%v, expiry=%v, circuit=%v, "+
rHash[:], s, amtPaid, expiry, circuitKey) "mpp=%v", rHash[:], s, amtPaid, expiry, circuitKey, mpp)
} }
// Create the update context containing the relevant details of the // Create the update context containing the relevant details of the
@ -450,6 +650,7 @@ func (i *InvoiceRegistry) NotifyExitHopHtlc(rHash lntypes.Hash,
currentHeight: currentHeight, currentHeight: currentHeight,
finalCltvRejectDelta: i.cfg.FinalCltvRejectDelta, finalCltvRejectDelta: i.cfg.FinalCltvRejectDelta,
customRecords: payload.CustomRecords(), customRecords: payload.CustomRecords(),
mpp: mpp,
} }
// We'll attempt to settle an invoice matching this rHash on disk (if // We'll attempt to settle an invoice matching this rHash on disk (if
@ -514,6 +715,21 @@ func (i *InvoiceRegistry) NotifyExitHopHtlc(rHash lntypes.Hash,
}, nil }, nil
case channeldb.HtlcStateSettled: case channeldb.HtlcStateSettled:
// Also settle any previously accepted htlcs. The invoice state
// is leading. If an htlc is marked as settled, we should follow
// now and settle the htlc with our peer.
for key, htlc := range invoice.Htlcs {
if htlc.State != channeldb.HtlcStateSettled {
continue
}
i.notifyHodlSubscribers(HodlEvent{
CircuitKey: key,
Preimage: &invoice.Terms.PaymentPreimage,
AcceptHeight: int32(htlc.AcceptHeight),
})
}
return &HodlEvent{ return &HodlEvent{
CircuitKey: circuitKey, CircuitKey: circuitKey,
Preimage: &invoice.Terms.PaymentPreimage, Preimage: &invoice.Terms.PaymentPreimage,
@ -521,6 +737,19 @@ func (i *InvoiceRegistry) NotifyExitHopHtlc(rHash lntypes.Hash,
}, nil }, nil
case channeldb.HtlcStateAccepted: case channeldb.HtlcStateAccepted:
// (Re)start the htlc timer if the invoice is still open. It can
// only happen for mpp payments that there are htlcs in state
// Accepted while the invoice is Open.
if invoice.State == channeldb.ContractOpen {
err := i.startHtlcTimer(
rHash, circuitKey,
invoiceHtlc.AcceptTime,
)
if err != nil {
return nil, err
}
}
i.hodlSubscribe(hodlChan, circuitKey) i.hodlSubscribe(hodlChan, circuitKey)
return nil, nil return nil, nil

@ -16,6 +16,8 @@ import (
var ( var (
testTimeout = 5 * time.Second testTimeout = 5 * time.Second
testTime = time.Date(2018, time.February, 2, 14, 0, 0, 0, time.UTC)
preimage = lntypes.Preimage{ preimage = lntypes.Preimage{
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
@ -59,20 +61,27 @@ var (
type testContext struct { type testContext struct {
registry *InvoiceRegistry registry *InvoiceRegistry
clock *testClock
cleanup func() cleanup func()
t *testing.T t *testing.T
} }
func newTestContext(t *testing.T) *testContext { func newTestContext(t *testing.T) *testContext {
clock := newTestClock(testTime)
cdb, cleanup, err := newDB() cdb, cleanup, err := newDB()
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
cdb.Now = clock.now
// Instantiate and start the invoice ctx.registry. // Instantiate and start the invoice ctx.registry.
cfg := RegistryConfig{ cfg := RegistryConfig{
FinalCltvRejectDelta: testFinalCltvRejectDelta, FinalCltvRejectDelta: testFinalCltvRejectDelta,
HtlcHoldDuration: 30 * time.Second,
Now: clock.now,
TickAfter: clock.tickAfter,
} }
registry := NewRegistry(cdb, &cfg) registry := NewRegistry(cdb, &cfg)
@ -84,6 +93,7 @@ func newTestContext(t *testing.T) *testContext {
ctx := testContext{ ctx := testContext{
registry: registry, registry: registry,
clock: clock,
t: t, t: t,
cleanup: func() { cleanup: func() {
registry.Stop() registry.Stop()
@ -683,3 +693,85 @@ func (p *mockPayload) MultiPath() *record.MPP {
func (p *mockPayload) CustomRecords() hop.CustomRecordSet { func (p *mockPayload) CustomRecords() hop.CustomRecordSet {
return make(hop.CustomRecordSet) return make(hop.CustomRecordSet)
} }
// TestSettleMpp tests settling of an invoice with multiple partial payments.
func TestSettleMpp(t *testing.T) {
defer timeout(t)()
ctx := newTestContext(t)
defer ctx.cleanup()
// Add the invoice.
_, err := ctx.registry.AddInvoice(testInvoice, hash)
if err != nil {
t.Fatal(err)
}
mppPayload := &mockPayload{
mpp: record.NewMPP(testInvoiceAmt, [32]byte{}),
}
// Send htlc 1.
hodlChan1 := make(chan interface{}, 1)
event, err := ctx.registry.NotifyExitHopHtlc(
hash, testInvoice.Terms.Value/2,
testHtlcExpiry,
testCurrentHeight, getCircuitKey(10), hodlChan1, mppPayload,
)
if err != nil {
t.Fatal(err)
}
if event != nil {
t.Fatal("expected no direct resolution")
}
// Simulate mpp timeout releasing htlc 1.
ctx.clock.setTime(testTime.Add(30 * time.Second))
hodlEvent := (<-hodlChan1).(HodlEvent)
if hodlEvent.Preimage != nil {
t.Fatal("expected cancel event")
}
// Send htlc 2.
hodlChan2 := make(chan interface{}, 1)
event, err = ctx.registry.NotifyExitHopHtlc(
hash, testInvoice.Terms.Value/2,
testHtlcExpiry,
testCurrentHeight, getCircuitKey(11), hodlChan2, mppPayload,
)
if err != nil {
t.Fatal(err)
}
if event != nil {
t.Fatal("expected no direct resolution")
}
// Send htlc 3.
hodlChan3 := make(chan interface{}, 1)
event, err = ctx.registry.NotifyExitHopHtlc(
hash, testInvoice.Terms.Value/2,
testHtlcExpiry,
testCurrentHeight, getCircuitKey(12), hodlChan3, mppPayload,
)
if err != nil {
t.Fatal(err)
}
if event == nil {
t.Fatal("expected a settle event")
}
// Check that settled amount is equal to the sum of values of the htlcs
// 0 and 1.
inv, err := ctx.registry.LookupInvoice(hash)
if err != nil {
t.Fatal(err)
}
if inv.State != channeldb.ContractSettled {
t.Fatal("expected invoice to be settled")
}
if inv.AmtPaid != testInvoice.Terms.Value {
t.Fatalf("amount incorrect, expected %v but got %v",
testInvoice.Terms.Value, inv.AmtPaid)
}
}

@ -7,6 +7,7 @@ import (
"github.com/lightningnetwork/lnd/channeldb" "github.com/lightningnetwork/lnd/channeldb"
"github.com/lightningnetwork/lnd/lnwire" "github.com/lightningnetwork/lnd/lnwire"
"github.com/lightningnetwork/lnd/record"
) )
// updateResult is the result of the invoice update call. // updateResult is the result of the invoice update call.
@ -24,6 +25,13 @@ const (
resultDuplicateToSettled resultDuplicateToSettled
resultAccepted resultAccepted
resultSettled resultSettled
resultInvoiceNotOpen
resultPartialAccepted
resultMppInProgress
resultAddressMismatch
resultHtlcSetTotalMismatch
resultHtlcSetTotalTooLow
resultHtlcSetOverpayment
) )
// String returns a human-readable representation of the invoice update result. // String returns a human-readable representation of the invoice update result.
@ -63,6 +71,27 @@ func (u updateResult) String() string {
case resultSettled: case resultSettled:
return "settled" return "settled"
case resultInvoiceNotOpen:
return "invoice no longer open"
case resultPartialAccepted:
return "partial payment accepted"
case resultMppInProgress:
return "mpp reception in progress"
case resultAddressMismatch:
return "payment address mismatch"
case resultHtlcSetTotalMismatch:
return "htlc total amt doesn't match set total"
case resultHtlcSetTotalTooLow:
return "set total too low for invoice"
case resultHtlcSetOverpayment:
return "mpp is overpaying set total"
default: default:
return "unknown" return "unknown"
} }
@ -77,6 +106,7 @@ type invoiceUpdateCtx struct {
currentHeight int32 currentHeight int32
finalCltvRejectDelta int32 finalCltvRejectDelta int32
customRecords hop.CustomRecordSet customRecords hop.CustomRecordSet
mpp *record.MPP
} }
// updateInvoice is a callback for DB.UpdateInvoice that contains the invoice // updateInvoice is a callback for DB.UpdateInvoice that contains the invoice
@ -102,8 +132,125 @@ func updateInvoice(ctx *invoiceUpdateCtx, inv *channeldb.Invoice) (
} }
} }
// If the invoice is already canceled, there is no further checking to if ctx.mpp == nil {
// do. return updateLegacy(ctx, inv)
}
return updateMpp(ctx, inv)
}
// updateMpp is a callback for DB.UpdateInvoice that contains the invoice
// settlement logic for mpp payments.
func updateMpp(ctx *invoiceUpdateCtx, inv *channeldb.Invoice) (
*channeldb.InvoiceUpdateDesc, updateResult, error) {
// Start building the accept descriptor.
acceptDesc := &channeldb.HtlcAcceptDesc{
Amt: ctx.amtPaid,
Expiry: ctx.expiry,
AcceptHeight: ctx.currentHeight,
MppTotalAmt: ctx.mpp.TotalMsat(),
CustomRecords: ctx.customRecords,
}
// Only accept payments to open invoices. This behaviour differs from
// non-mpp payments that are accepted even after the invoice is settled.
// Because non-mpp payments don't have a payment address, this is needed
// to thwart probing.
if inv.State != channeldb.ContractOpen {
return nil, resultInvoiceNotOpen, nil
}
// Check the payment address that authorizes the payment.
if ctx.mpp.PaymentAddr() != inv.Terms.PaymentAddr {
return nil, resultAddressMismatch, nil
}
// Don't accept zero-valued sets.
if ctx.mpp.TotalMsat() == 0 {
return nil, resultHtlcSetTotalTooLow, nil
}
// Check that the total amt of the htlc set is high enough. In case this
// is a zero-valued invoice, it will always be enough.
if ctx.mpp.TotalMsat() < inv.Terms.Value {
return nil, resultHtlcSetTotalTooLow, nil
}
// Check whether total amt matches other htlcs in the set.
var newSetTotal lnwire.MilliSatoshi
for _, htlc := range inv.Htlcs {
// Only consider accepted mpp htlcs. It is possible that there
// are htlcs registered in the invoice database that previously
// timed out and are in the canceled state now.
if htlc.State != channeldb.HtlcStateAccepted {
continue
}
if ctx.mpp.TotalMsat() != htlc.MppTotalAmt {
return nil, resultHtlcSetTotalMismatch, nil
}
newSetTotal += htlc.Amt
}
// Add amount of new htlc.
newSetTotal += ctx.amtPaid
// Make sure the communicated set total isn't overpaid.
if newSetTotal > ctx.mpp.TotalMsat() {
return nil, resultHtlcSetOverpayment, nil
}
// The invoice is still open. Check the expiry.
if ctx.expiry < uint32(ctx.currentHeight+ctx.finalCltvRejectDelta) {
return nil, resultExpiryTooSoon, nil
}
if ctx.expiry < uint32(ctx.currentHeight+inv.Terms.FinalCltvDelta) {
return nil, resultExpiryTooSoon, nil
}
// Record HTLC in the invoice database.
newHtlcs := map[channeldb.CircuitKey]*channeldb.HtlcAcceptDesc{
ctx.circuitKey: acceptDesc,
}
update := channeldb.InvoiceUpdateDesc{
AddHtlcs: newHtlcs,
}
// If the invoice cannot be settled yet, only record the htlc.
setComplete := newSetTotal == ctx.mpp.TotalMsat()
if !setComplete {
return &update, resultPartialAccepted, nil
}
// Check to see if we can settle or this is an hold invoice and
// we need to wait for the preimage.
holdInvoice := inv.Terms.PaymentPreimage == channeldb.UnknownPreimage
if holdInvoice {
update.State = &channeldb.InvoiceStateUpdateDesc{
NewState: channeldb.ContractAccepted,
}
return &update, resultAccepted, nil
}
update.State = &channeldb.InvoiceStateUpdateDesc{
NewState: channeldb.ContractSettled,
Preimage: inv.Terms.PaymentPreimage,
}
return &update, resultSettled, nil
}
// updateLegacy is a callback for DB.UpdateInvoice that contains the invoice
// settlement logic for legacy payments.
func updateLegacy(ctx *invoiceUpdateCtx, inv *channeldb.Invoice) (
*channeldb.InvoiceUpdateDesc, updateResult, error) {
// If the invoice is already canceled, there is no further
// checking to do.
if inv.State == channeldb.ContractCanceled { if inv.State == channeldb.ContractCanceled {
return nil, resultInvoiceAlreadyCanceled, nil return nil, resultInvoiceAlreadyCanceled, nil
} }
@ -116,6 +263,20 @@ func updateInvoice(ctx *invoiceUpdateCtx, inv *channeldb.Invoice) (
return nil, resultAmountTooLow, nil return nil, resultAmountTooLow, nil
} }
// TODO(joostjager): Check invoice mpp required feature
// bit when feature becomes mandatory.
// Don't allow settling the invoice with an old style
// htlc if we are already in the process of gathering an
// mpp set.
for _, htlc := range inv.Htlcs {
if htlc.State == channeldb.HtlcStateAccepted &&
htlc.MppTotalAmt > 0 {
return nil, resultMppInProgress, nil
}
}
// The invoice is still open. Check the expiry. // The invoice is still open. Check the expiry.
if ctx.expiry < uint32(ctx.currentHeight+ctx.finalCltvRejectDelta) { if ctx.expiry < uint32(ctx.currentHeight+ctx.finalCltvRejectDelta) {
return nil, resultExpiryTooSoon, nil return nil, resultExpiryTooSoon, nil

@ -75,14 +75,15 @@ func CreateRPCInvoice(invoice *channeldb.Invoice,
} }
rpcHtlc := lnrpc.InvoiceHTLC{ rpcHtlc := lnrpc.InvoiceHTLC{
ChanId: key.ChanID.ToUint64(), ChanId: key.ChanID.ToUint64(),
HtlcIndex: key.HtlcID, HtlcIndex: key.HtlcID,
AcceptHeight: int32(htlc.AcceptHeight), AcceptHeight: int32(htlc.AcceptHeight),
AcceptTime: htlc.AcceptTime.Unix(), AcceptTime: htlc.AcceptTime.Unix(),
ExpiryHeight: int32(htlc.Expiry), ExpiryHeight: int32(htlc.Expiry),
AmtMsat: uint64(htlc.Amt), AmtMsat: uint64(htlc.Amt),
State: state, State: state,
CustomRecords: htlc.CustomRecords, CustomRecords: htlc.CustomRecords,
MppTotalAmtMsat: uint64(htlc.MppTotalAmt),
} }
// Only report resolved times if htlc is resolved. // Only report resolved times if htlc is resolved.

@ -7323,10 +7323,12 @@ type InvoiceHTLC struct {
/// Current state the htlc is in. /// Current state the htlc is in.
State InvoiceHTLCState `protobuf:"varint,8,opt,name=state,proto3,enum=lnrpc.InvoiceHTLCState" json:"state,omitempty"` State InvoiceHTLCState `protobuf:"varint,8,opt,name=state,proto3,enum=lnrpc.InvoiceHTLCState" json:"state,omitempty"`
/// Custom tlv records. /// Custom tlv records.
CustomRecords map[uint64][]byte `protobuf:"bytes,9,rep,name=custom_records,proto3" json:"custom_records,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"` CustomRecords map[uint64][]byte `protobuf:"bytes,9,rep,name=custom_records,proto3" json:"custom_records,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
XXX_NoUnkeyedLiteral struct{} `json:"-"` /// The total amount of the mpp payment in msat.
XXX_unrecognized []byte `json:"-"` MppTotalAmtMsat uint64 `protobuf:"varint,10,opt,name=mpp_total_amt_msat,proto3" json:"mpp_total_amt_msat,omitempty"`
XXX_sizecache int32 `json:"-"` XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
} }
func (m *InvoiceHTLC) Reset() { *m = InvoiceHTLC{} } func (m *InvoiceHTLC) Reset() { *m = InvoiceHTLC{} }
@ -7417,6 +7419,13 @@ func (m *InvoiceHTLC) GetCustomRecords() map[uint64][]byte {
return nil return nil
} }
func (m *InvoiceHTLC) GetMppTotalAmtMsat() uint64 {
if m != nil {
return m.MppTotalAmtMsat
}
return 0
}
type AddInvoiceResponse struct { type AddInvoiceResponse struct {
RHash []byte `protobuf:"bytes,1,opt,name=r_hash,proto3" json:"r_hash,omitempty"` RHash []byte `protobuf:"bytes,1,opt,name=r_hash,proto3" json:"r_hash,omitempty"`
//* //*
@ -9793,573 +9802,573 @@ func init() {
func init() { proto.RegisterFile("rpc.proto", fileDescriptor_77a6da22d6a3feb1) } func init() { proto.RegisterFile("rpc.proto", fileDescriptor_77a6da22d6a3feb1) }
var fileDescriptor_77a6da22d6a3feb1 = []byte{ var fileDescriptor_77a6da22d6a3feb1 = []byte{
// 9047 bytes of a gzipped FileDescriptorProto // 9056 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0xbd, 0x4d, 0x6c, 0x1c, 0x49, 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x7d, 0x4d, 0x6c, 0x1c, 0x49,
0x96, 0x1f, 0xae, 0xfa, 0x20, 0x59, 0xf5, 0xaa, 0x48, 0x16, 0x83, 0x14, 0x59, 0xaa, 0x96, 0xd4, 0x96, 0x9e, 0xea, 0x87, 0x64, 0xd5, 0xab, 0x22, 0x59, 0x0c, 0x52, 0x64, 0xa9, 0x5a, 0x52, 0xab,
0xea, 0x1c, 0x8d, 0xa4, 0xd6, 0xf4, 0x50, 0x6a, 0xce, 0x4c, 0xff, 0x7b, 0xbb, 0xff, 0xeb, 0x5d, 0x73, 0x34, 0x92, 0x46, 0xd3, 0x43, 0xa9, 0x39, 0x33, 0xed, 0xde, 0x6e, 0xaf, 0x77, 0x29, 0x92,
0x8a, 0xa4, 0x44, 0x75, 0x53, 0x14, 0x27, 0x29, 0x8d, 0x3c, 0x33, 0xbb, 0xc8, 0x49, 0x56, 0x05, 0x12, 0xd5, 0x2d, 0x51, 0x9c, 0xa4, 0x34, 0xf2, 0xcc, 0xec, 0x22, 0x27, 0x59, 0x15, 0x24, 0x73,
0xc9, 0x1c, 0x55, 0x65, 0x56, 0x67, 0x66, 0x91, 0xe2, 0xb4, 0xdb, 0x07, 0xc3, 0x30, 0x0c, 0x5f, 0x54, 0x95, 0x59, 0x9d, 0x99, 0x45, 0x8a, 0xd3, 0x6e, 0x1f, 0x0c, 0xc3, 0x30, 0x7c, 0x59, 0x8c,
0x16, 0x63, 0xc3, 0x80, 0x6d, 0xd8, 0x58, 0x60, 0xd6, 0x80, 0xb1, 0xf0, 0xc1, 0xbe, 0x18, 0xf0, 0x0d, 0x03, 0xb6, 0x61, 0x63, 0x81, 0x59, 0x03, 0xc6, 0xc2, 0x07, 0xfb, 0x62, 0xc0, 0x36, 0xd6,
0x1a, 0xeb, 0x93, 0x0f, 0x0b, 0x18, 0x30, 0x7c, 0xb0, 0x01, 0x03, 0x36, 0xb0, 0x86, 0x61, 0x03, 0x27, 0x1f, 0x16, 0x30, 0x60, 0xf8, 0x60, 0x03, 0x06, 0x6c, 0x60, 0x0d, 0xc3, 0x06, 0xec, 0x85,
0xf6, 0xc2, 0xf0, 0xcd, 0xbe, 0x1b, 0xef, 0xc5, 0x47, 0x46, 0x64, 0x66, 0x49, 0xea, 0x99, 0xf1, 0xe1, 0x9b, 0x7d, 0x37, 0xde, 0x8b, 0x9f, 0x8c, 0xc8, 0xcc, 0x92, 0xd8, 0x33, 0xed, 0x3d, 0xb1,
0x9e, 0x58, 0xf1, 0x8b, 0xc8, 0xf8, 0x7c, 0xef, 0xc5, 0x8b, 0xf7, 0x5e, 0x04, 0xa1, 0x19, 0x8f, 0xe2, 0x8b, 0xc8, 0xf8, 0x7d, 0xef, 0xc5, 0x8b, 0xf7, 0x5e, 0x04, 0xa1, 0x19, 0x8f, 0xfb, 0xeb,
0xfb, 0xeb, 0xe3, 0x38, 0x4a, 0x23, 0x36, 0x33, 0x0c, 0xe3, 0x71, 0xbf, 0x77, 0xf5, 0x24, 0x8a, 0xe3, 0x38, 0x4a, 0x23, 0x36, 0x33, 0x0c, 0xe3, 0x71, 0xbf, 0x77, 0xf5, 0x38, 0x8a, 0x8e, 0x87,
0x4e, 0x86, 0xfc, 0x9e, 0x3f, 0x0e, 0xee, 0xf9, 0x61, 0x18, 0xa5, 0x7e, 0x1a, 0x44, 0x61, 0x22, 0xfc, 0x9e, 0x3f, 0x0e, 0xee, 0xf9, 0x61, 0x18, 0xa5, 0x7e, 0x1a, 0x44, 0x61, 0x22, 0x0a, 0x39,
0x0a, 0x39, 0x3f, 0x81, 0x85, 0x47, 0x3c, 0x3c, 0xe4, 0x7c, 0xe0, 0xf2, 0x2f, 0x26, 0x3c, 0x49, 0x3f, 0x85, 0x85, 0x47, 0x3c, 0x3c, 0xe0, 0x7c, 0xe0, 0xf2, 0xcf, 0x27, 0x3c, 0x49, 0xd9, 0xb7,
0xd9, 0xb7, 0x60, 0xc9, 0xe7, 0x3f, 0xe3, 0x7c, 0xe0, 0x8d, 0xfd, 0x24, 0x19, 0x9f, 0xc6, 0x7e, 0x61, 0xc9, 0xe7, 0x3f, 0xe7, 0x7c, 0xe0, 0x8d, 0xfd, 0x24, 0x19, 0x9f, 0xc4, 0x7e, 0xc2, 0xbb,
0xc2, 0xbb, 0x95, 0x1b, 0x95, 0x3b, 0x6d, 0xb7, 0x23, 0x32, 0x0e, 0x34, 0xce, 0xde, 0x83, 0x76, 0x95, 0x1b, 0x95, 0x3b, 0x6d, 0xb7, 0x23, 0x32, 0xf6, 0x35, 0xce, 0xde, 0x83, 0x76, 0x82, 0x45,
0x82, 0x45, 0x79, 0x98, 0xc6, 0xd1, 0xf8, 0xa2, 0x5b, 0xa5, 0x72, 0x2d, 0xc4, 0x76, 0x04, 0xe4, 0x79, 0x98, 0xc6, 0xd1, 0xf8, 0xbc, 0x5b, 0xa5, 0x72, 0x2d, 0xc4, 0x76, 0x04, 0xe4, 0x0c, 0x61,
0x0c, 0x61, 0x51, 0xb7, 0x90, 0x8c, 0xa3, 0x30, 0xe1, 0xec, 0x3e, 0xac, 0xf4, 0x83, 0xf1, 0x29, 0x51, 0xb7, 0x90, 0x8c, 0xa3, 0x30, 0xe1, 0xec, 0x3e, 0xac, 0xf4, 0x83, 0xf1, 0x09, 0x8f, 0x3d,
0x8f, 0x3d, 0xfa, 0x78, 0x14, 0xf2, 0x51, 0x14, 0x06, 0xfd, 0x6e, 0xe5, 0x46, 0xed, 0x4e, 0xd3, 0xfa, 0x78, 0x14, 0xf2, 0x51, 0x14, 0x06, 0xfd, 0x6e, 0xe5, 0x46, 0xed, 0x4e, 0xd3, 0x65, 0x22,
0x65, 0x22, 0x0f, 0xbf, 0x78, 0x22, 0x73, 0xd8, 0x6d, 0x58, 0xe4, 0xa1, 0xc0, 0xf9, 0x80, 0xbe, 0x0f, 0xbf, 0x78, 0x2a, 0x73, 0xd8, 0x6d, 0x58, 0xe4, 0xa1, 0xc0, 0xf9, 0x80, 0xbe, 0x92, 0x4d,
0x92, 0x4d, 0x2d, 0x64, 0x30, 0x7e, 0xe0, 0xfc, 0xf5, 0x2a, 0x2c, 0x3d, 0x0e, 0x83, 0xf4, 0x85, 0x2d, 0x64, 0x30, 0x7e, 0xe0, 0xfc, 0xf5, 0x2a, 0x2c, 0x3d, 0x0e, 0x83, 0xf4, 0xa5, 0x3f, 0x1c,
0x3f, 0x1c, 0xf2, 0x54, 0x8d, 0xe9, 0x36, 0x2c, 0x9e, 0x13, 0x40, 0x63, 0x3a, 0x8f, 0xe2, 0x81, 0xf2, 0x54, 0x8d, 0xe9, 0x36, 0x2c, 0x9e, 0x11, 0x40, 0x63, 0x3a, 0x8b, 0xe2, 0x81, 0x1c, 0xd1,
0x1c, 0xd1, 0x82, 0x80, 0x0f, 0x24, 0x3a, 0xb5, 0x67, 0xd5, 0xa9, 0x3d, 0x2b, 0x9d, 0xae, 0xda, 0x82, 0x80, 0xf7, 0x25, 0x3a, 0xb5, 0x67, 0xd5, 0xa9, 0x3d, 0x2b, 0x9d, 0xae, 0xda, 0x94, 0xe9,
0x94, 0xe9, 0xba, 0x0d, 0x8b, 0x31, 0xef, 0x47, 0x67, 0x3c, 0xbe, 0xf0, 0xce, 0x83, 0x70, 0x10, 0xba, 0x0d, 0x8b, 0x31, 0xef, 0x47, 0xa7, 0x3c, 0x3e, 0xf7, 0xce, 0x82, 0x70, 0x10, 0x9d, 0x75,
0x9d, 0x77, 0xeb, 0x37, 0x2a, 0x77, 0x66, 0xdc, 0x05, 0x05, 0xbf, 0x20, 0x94, 0x3d, 0x80, 0xc5, 0xeb, 0x37, 0x2a, 0x77, 0x66, 0xdc, 0x05, 0x05, 0xbf, 0x24, 0x94, 0x3d, 0x80, 0xc5, 0xfe, 0x89,
0xfe, 0xa9, 0x1f, 0x86, 0x7c, 0xe8, 0x1d, 0xf9, 0xfd, 0x97, 0x93, 0x71, 0xd2, 0x9d, 0xb9, 0x51, 0x1f, 0x86, 0x7c, 0xe8, 0x1d, 0xfa, 0xfd, 0x57, 0x93, 0x71, 0xd2, 0x9d, 0xb9, 0x51, 0xb9, 0xd3,
0xb9, 0xd3, 0xda, 0xb8, 0xb2, 0x4e, 0xab, 0xba, 0xbe, 0x75, 0xea, 0x87, 0x0f, 0x28, 0xe7, 0x30, 0xda, 0xb8, 0xb2, 0x4e, 0xab, 0xba, 0xbe, 0x75, 0xe2, 0x87, 0x0f, 0x28, 0xe7, 0x20, 0xf4, 0xc7,
0xf4, 0xc7, 0xc9, 0x69, 0x94, 0xba, 0x0b, 0xf2, 0x0b, 0x01, 0x27, 0xce, 0x0a, 0x30, 0x73, 0x26, 0xc9, 0x49, 0x94, 0xba, 0x0b, 0xf2, 0x0b, 0x01, 0x27, 0xce, 0x0a, 0x30, 0x73, 0x26, 0xc4, 0xdc,
0xc4, 0xdc, 0x3b, 0xff, 0xb8, 0x02, 0xcb, 0xcf, 0xc3, 0x61, 0xd4, 0x7f, 0xf9, 0x4b, 0x4e, 0x51, 0x3b, 0xff, 0xb8, 0x02, 0xcb, 0x2f, 0xc2, 0x61, 0xd4, 0x7f, 0xf5, 0x2b, 0x4e, 0x51, 0xc9, 0x18,
0xc9, 0x18, 0xaa, 0x6f, 0x3b, 0x86, 0xda, 0xd7, 0x1d, 0xc3, 0x2a, 0xac, 0xd8, 0x9d, 0x95, 0xa3, 0xaa, 0x17, 0x1d, 0x43, 0xed, 0xab, 0x8e, 0x61, 0x15, 0x56, 0xec, 0xce, 0xca, 0x51, 0x70, 0xb8,
0xe0, 0x70, 0x19, 0xbf, 0x3e, 0xe1, 0xaa, 0x5b, 0x6a, 0x18, 0xef, 0x43, 0xa7, 0x3f, 0x89, 0x63, 0x8c, 0x5f, 0x1f, 0x73, 0xd5, 0x2d, 0x35, 0x8c, 0x6f, 0x41, 0xa7, 0x3f, 0x89, 0x63, 0x1e, 0x16,
0x1e, 0x16, 0xc6, 0xb1, 0x28, 0x71, 0x3d, 0x90, 0xf7, 0xa0, 0x1d, 0xf2, 0xf3, 0xac, 0x98, 0xa4, 0xc6, 0xb1, 0x28, 0x71, 0x3d, 0x90, 0xf7, 0xa0, 0x1d, 0xf2, 0xb3, 0xac, 0x98, 0xa4, 0xdd, 0x90,
0xdd, 0x90, 0x9f, 0xab, 0x22, 0x4e, 0x17, 0x56, 0xf3, 0xcd, 0xc8, 0x0e, 0xfc, 0x97, 0x0a, 0xd4, 0x9f, 0xa9, 0x22, 0x4e, 0x17, 0x56, 0xf3, 0xcd, 0xc8, 0x0e, 0xfc, 0xd7, 0x0a, 0xd4, 0x5f, 0xa4,
0x9f, 0xa7, 0xaf, 0x22, 0xb6, 0x0e, 0xf5, 0xf4, 0x62, 0x2c, 0x38, 0x64, 0x61, 0x83, 0xc9, 0xa1, 0xaf, 0x23, 0xb6, 0x0e, 0xf5, 0xf4, 0x7c, 0x2c, 0x38, 0x64, 0x61, 0x83, 0xc9, 0xa1, 0x6d, 0x0e,
0x6d, 0x0e, 0x06, 0x31, 0x4f, 0x92, 0x67, 0x17, 0x63, 0xee, 0xb6, 0x7d, 0x91, 0xf0, 0xb0, 0x1c, 0x06, 0x31, 0x4f, 0x92, 0xe7, 0xe7, 0x63, 0xee, 0xb6, 0x7d, 0x91, 0xf0, 0xb0, 0x1c, 0xeb, 0xc2,
0xeb, 0xc2, 0x9c, 0x4c, 0x53, 0x83, 0x4d, 0x57, 0x25, 0xd9, 0x75, 0x00, 0x7f, 0x14, 0x4d, 0xc2, 0x9c, 0x4c, 0x53, 0x83, 0x4d, 0x57, 0x25, 0xd9, 0x75, 0x00, 0x7f, 0x14, 0x4d, 0xc2, 0xd4, 0x4b,
0xd4, 0x4b, 0xfc, 0x94, 0xa6, 0xaa, 0xe6, 0x1a, 0x08, 0xbb, 0x0a, 0xcd, 0xf1, 0x4b, 0x2f, 0xe9, 0xfc, 0x94, 0xa6, 0xaa, 0xe6, 0x1a, 0x08, 0xbb, 0x0a, 0xcd, 0xf1, 0x2b, 0x2f, 0xe9, 0xc7, 0xc1,
0xc7, 0xc1, 0x38, 0x25, 0xb2, 0x69, 0xba, 0x19, 0xc0, 0xbe, 0x05, 0x8d, 0x68, 0x92, 0x8e, 0xa3, 0x38, 0x25, 0xb2, 0x69, 0xba, 0x19, 0xc0, 0xbe, 0x0d, 0x8d, 0x68, 0x92, 0x8e, 0xa3, 0x20, 0x4c,
0x20, 0x4c, 0x25, 0xa9, 0x2c, 0xca, 0xbe, 0x3c, 0x9d, 0xa4, 0x07, 0x08, 0xbb, 0xba, 0x00, 0xbb, 0x25, 0xa9, 0x2c, 0xca, 0xbe, 0x3c, 0x9b, 0xa4, 0xfb, 0x08, 0xbb, 0xba, 0x00, 0xbb, 0x09, 0xf3,
0x09, 0xf3, 0xfd, 0x28, 0x3c, 0x0e, 0xe2, 0x91, 0x10, 0x06, 0xdd, 0x59, 0x6a, 0xcd, 0x06, 0x9d, 0xfd, 0x28, 0x3c, 0x0a, 0xe2, 0x91, 0x10, 0x06, 0xdd, 0x59, 0x6a, 0xcd, 0x06, 0x9d, 0x7f, 0x51,
0x3f, 0xaa, 0x42, 0xeb, 0x59, 0xec, 0x87, 0x89, 0xdf, 0x47, 0x00, 0xbb, 0x9e, 0xbe, 0xf2, 0x4e, 0x85, 0xd6, 0xf3, 0xd8, 0x0f, 0x13, 0xbf, 0x8f, 0x00, 0x76, 0x3d, 0x7d, 0xed, 0x9d, 0xf8, 0xc9,
0xfd, 0xe4, 0x94, 0x46, 0xdb, 0x74, 0x55, 0x92, 0xad, 0xc2, 0xac, 0xe8, 0x28, 0x8d, 0xa9, 0xe6, 0x09, 0x8d, 0xb6, 0xe9, 0xaa, 0x24, 0x5b, 0x85, 0x59, 0xd1, 0x51, 0x1a, 0x53, 0xcd, 0x95, 0x29,
0xca, 0x14, 0xfb, 0x00, 0x96, 0xc2, 0xc9, 0xc8, 0xb3, 0xdb, 0xaa, 0x11, 0xb5, 0x14, 0x33, 0x70, 0xf6, 0x3e, 0x2c, 0x85, 0x93, 0x91, 0x67, 0xb7, 0x55, 0x23, 0x6a, 0x29, 0x66, 0xe0, 0x04, 0x1c,
0x02, 0x8e, 0x70, 0xad, 0x45, 0x13, 0x62, 0x84, 0x06, 0xc2, 0x1c, 0x68, 0xcb, 0x14, 0x0f, 0x4e, 0xe2, 0x5a, 0x8b, 0x26, 0xc4, 0x08, 0x0d, 0x84, 0x39, 0xd0, 0x96, 0x29, 0x1e, 0x1c, 0x9f, 0x88,
0x4e, 0xc5, 0x30, 0x67, 0x5c, 0x0b, 0xc3, 0x3a, 0xd2, 0x60, 0xc4, 0xbd, 0x24, 0xf5, 0x47, 0x63, 0x61, 0xce, 0xb8, 0x16, 0x86, 0x75, 0xa4, 0xc1, 0x88, 0x7b, 0x49, 0xea, 0x8f, 0xc6, 0x72, 0x58,
0x39, 0x2c, 0x03, 0xa1, 0xfc, 0x28, 0xf5, 0x87, 0xde, 0x31, 0xe7, 0x49, 0x77, 0x4e, 0xe6, 0x6b, 0x06, 0x42, 0xf9, 0x51, 0xea, 0x0f, 0xbd, 0x23, 0xce, 0x93, 0xee, 0x9c, 0xcc, 0xd7, 0x08, 0xbb,
0x84, 0xdd, 0x82, 0x85, 0x01, 0x4f, 0x52, 0x4f, 0x2e, 0x0a, 0x4f, 0xba, 0x0d, 0x62, 0xfd, 0x1c, 0x05, 0x0b, 0x03, 0x9e, 0xa4, 0x9e, 0x5c, 0x14, 0x9e, 0x74, 0x1b, 0xc4, 0xfa, 0x39, 0x14, 0xeb,
0x8a, 0xf5, 0xc4, 0xfe, 0xb9, 0x87, 0x13, 0xc0, 0x5f, 0x75, 0x9b, 0xa2, 0xaf, 0x19, 0x82, 0x94, 0x89, 0xfd, 0x33, 0x0f, 0x27, 0x80, 0xbf, 0xee, 0x36, 0x45, 0x5f, 0x33, 0x04, 0x29, 0xe7, 0x11,
0xf3, 0x88, 0xa7, 0xc6, 0xec, 0x25, 0x92, 0x42, 0x9d, 0x3d, 0x60, 0x06, 0xbc, 0xcd, 0x53, 0x3f, 0x4f, 0x8d, 0xd9, 0x4b, 0x24, 0x85, 0x3a, 0x4f, 0x80, 0x19, 0xf0, 0x36, 0x4f, 0xfd, 0x60, 0x98,
0x18, 0x26, 0xec, 0x23, 0x68, 0xa7, 0x46, 0x61, 0x12, 0x85, 0x2d, 0x4d, 0x4e, 0xc6, 0x07, 0xae, 0xb0, 0x0f, 0xa1, 0x9d, 0x1a, 0x85, 0x49, 0x14, 0xb6, 0x34, 0x39, 0x19, 0x1f, 0xb8, 0x56, 0x39,
0x55, 0xce, 0x39, 0x85, 0xc6, 0x43, 0xce, 0xf7, 0x82, 0x51, 0x90, 0xb2, 0x55, 0x98, 0x39, 0x0e, 0xe7, 0x04, 0x1a, 0x0f, 0x39, 0x7f, 0x12, 0x8c, 0x82, 0x94, 0xad, 0xc2, 0xcc, 0x51, 0xf0, 0x9a,
0x5e, 0x71, 0x41, 0xf0, 0xb5, 0xdd, 0x4b, 0xae, 0x48, 0xb2, 0x77, 0x01, 0xe8, 0x87, 0x37, 0xd2, 0x0b, 0x82, 0xaf, 0xed, 0x5e, 0x72, 0x45, 0x92, 0xbd, 0x0b, 0x40, 0x3f, 0xbc, 0x91, 0x26, 0xac,
0x84, 0xb5, 0x7b, 0xc9, 0x6d, 0x12, 0xf6, 0x04, 0x29, 0xab, 0x07, 0x73, 0x63, 0x1e, 0xf7, 0xb9, 0xdd, 0x4b, 0x6e, 0x93, 0xb0, 0xa7, 0x48, 0x59, 0x3d, 0x98, 0x1b, 0xf3, 0xb8, 0xcf, 0xd5, 0xfa,
0x5a, 0xbf, 0xdd, 0x4b, 0xae, 0x02, 0x1e, 0xcc, 0xc1, 0xcc, 0x10, 0x6b, 0x77, 0x7e, 0x6f, 0x06, 0xed, 0x5e, 0x72, 0x15, 0xf0, 0x60, 0x0e, 0x66, 0x86, 0x58, 0xbb, 0xf3, 0x7b, 0x33, 0xd0, 0x3a,
0x5a, 0x87, 0x3c, 0xd4, 0x9c, 0xc6, 0xa0, 0x8e, 0x73, 0x22, 0xb9, 0x8b, 0x7e, 0xb3, 0x6f, 0x40, 0xe0, 0xa1, 0xe6, 0x34, 0x06, 0x75, 0x9c, 0x13, 0xc9, 0x5d, 0xf4, 0x9b, 0x7d, 0x03, 0x5a, 0x34,
0x8b, 0xe6, 0x29, 0x49, 0xe3, 0x20, 0x3c, 0x11, 0x04, 0xfe, 0xa0, 0xda, 0xad, 0xb8, 0x80, 0xf0, 0x4f, 0x49, 0x1a, 0x07, 0xe1, 0xb1, 0x20, 0xf0, 0x07, 0xd5, 0x6e, 0xc5, 0x05, 0x84, 0x0f, 0x08,
0x21, 0xa1, 0xac, 0x03, 0x35, 0x7f, 0xa4, 0x08, 0x1c, 0x7f, 0xb2, 0x2b, 0xd0, 0xf0, 0x47, 0xa9, 0x65, 0x1d, 0xa8, 0xf9, 0x23, 0x45, 0xe0, 0xf8, 0x93, 0x5d, 0x81, 0x86, 0x3f, 0x4a, 0x45, 0xf7,
0xe8, 0x5e, 0x9b, 0xe0, 0x39, 0x7f, 0x94, 0x52, 0xd7, 0xde, 0x83, 0xf6, 0xd8, 0xbf, 0x18, 0x21, 0xda, 0x04, 0xcf, 0xf9, 0xa3, 0x94, 0xba, 0xf6, 0x1e, 0xb4, 0xc7, 0xfe, 0xf9, 0x08, 0xf9, 0x59,
0x3f, 0x6b, 0xaa, 0x68, 0xbb, 0x2d, 0x89, 0xed, 0x22, 0x59, 0x6c, 0xc0, 0xb2, 0x59, 0x44, 0x35, 0x53, 0x45, 0xdb, 0x6d, 0x49, 0x6c, 0x17, 0xc9, 0x62, 0x03, 0x96, 0xcd, 0x22, 0xaa, 0xf1, 0x19,
0x3e, 0xa3, 0x1b, 0x5f, 0x32, 0x4a, 0xcb, 0x3e, 0xdc, 0x86, 0x45, 0xf5, 0x4d, 0x2c, 0xc6, 0x43, 0xdd, 0xf8, 0x92, 0x51, 0x5a, 0xf6, 0xe1, 0x36, 0x2c, 0xaa, 0x6f, 0x62, 0x31, 0x1e, 0xa2, 0x95,
0xb4, 0xd2, 0x74, 0x17, 0x24, 0xac, 0x46, 0x79, 0x07, 0x3a, 0xc7, 0x41, 0xe8, 0x0f, 0xbd, 0xfe, 0xa6, 0xbb, 0x20, 0x61, 0x35, 0xca, 0x3b, 0xd0, 0x39, 0x0a, 0x42, 0x7f, 0xe8, 0xf5, 0x87, 0xe9,
0x30, 0x3d, 0xf3, 0x06, 0x7c, 0x98, 0xfa, 0x44, 0x35, 0x33, 0xee, 0x02, 0xe1, 0x5b, 0xc3, 0xf4, 0xa9, 0x37, 0xe0, 0xc3, 0xd4, 0x27, 0xaa, 0x99, 0x71, 0x17, 0x08, 0xdf, 0x1a, 0xa6, 0xa7, 0xdb,
0x6c, 0x1b, 0x51, 0xf6, 0x01, 0x34, 0x8f, 0x39, 0xf7, 0x68, 0xb2, 0xba, 0x0d, 0x8b, 0x03, 0xd5, 0x88, 0xb2, 0xf7, 0xa1, 0x79, 0xc4, 0xb9, 0x47, 0x93, 0xd5, 0x6d, 0x58, 0x1c, 0xa8, 0x56, 0xc8,
0x0a, 0xb9, 0x8d, 0x63, 0xb5, 0x56, 0x1f, 0x40, 0x27, 0x9a, 0xa4, 0x27, 0x51, 0x10, 0x9e, 0x78, 0x6d, 0x1c, 0xa9, 0xb5, 0x7a, 0x1f, 0x3a, 0xd1, 0x24, 0x3d, 0x8e, 0x82, 0xf0, 0xd8, 0x43, 0x99,
0x28, 0xf3, 0xbc, 0x60, 0x40, 0x54, 0x54, 0x7f, 0x50, 0xbd, 0x5f, 0x71, 0x17, 0x54, 0x1e, 0x4a, 0xe7, 0x05, 0x03, 0xa2, 0xa2, 0xfa, 0x83, 0xea, 0xfd, 0x8a, 0xbb, 0xa0, 0xf2, 0x50, 0xfa, 0x3c,
0x9f, 0xc7, 0x03, 0x76, 0x0b, 0x16, 0x87, 0x7e, 0x92, 0x7a, 0xa7, 0xd1, 0xd8, 0x1b, 0x4f, 0x8e, 0x1e, 0xb0, 0x5b, 0xb0, 0x38, 0xf4, 0x93, 0xd4, 0x3b, 0x89, 0xc6, 0xde, 0x78, 0x72, 0xf8, 0x8a,
0x5e, 0xf2, 0x8b, 0xee, 0x3c, 0x4d, 0xc4, 0x3c, 0xc2, 0xbb, 0xd1, 0xf8, 0x80, 0x40, 0x76, 0x0d, 0x9f, 0x77, 0xe7, 0x69, 0x22, 0xe6, 0x11, 0xde, 0x8d, 0xc6, 0xfb, 0x04, 0xb2, 0x6b, 0x00, 0xd4,
0x80, 0xfa, 0x29, 0x3a, 0x01, 0x37, 0x2a, 0x77, 0xe6, 0xdd, 0x26, 0x22, 0xa2, 0xd1, 0x1f, 0xc2, 0x4f, 0xd1, 0x09, 0xb8, 0x51, 0xb9, 0x33, 0xef, 0x36, 0x11, 0x11, 0x8d, 0xfe, 0x08, 0x96, 0x69,
0x32, 0x2d, 0x4f, 0x7f, 0x92, 0xa4, 0xd1, 0xc8, 0x43, 0x79, 0x1d, 0x0f, 0x92, 0x6e, 0x8b, 0x68, 0x79, 0xfa, 0x93, 0x24, 0x8d, 0x46, 0x1e, 0xca, 0xeb, 0x78, 0x90, 0x74, 0x5b, 0x44, 0x6b, 0xdf,
0xed, 0x7d, 0xd9, 0x59, 0x63, 0x8d, 0xd7, 0xb7, 0x79, 0x92, 0x6e, 0x51, 0x61, 0x57, 0x94, 0xc5, 0x92, 0x9d, 0x35, 0xd6, 0x78, 0x7d, 0x9b, 0x27, 0xe9, 0x16, 0x15, 0x76, 0x45, 0x59, 0xdc, 0xd4,
0x4d, 0xfd, 0xc2, 0x5d, 0x1a, 0xe4, 0x71, 0xf6, 0x01, 0x30, 0x7f, 0x38, 0x8c, 0xce, 0xbd, 0x84, 0xcf, 0xdd, 0xa5, 0x41, 0x1e, 0x67, 0xef, 0x03, 0xf3, 0x87, 0xc3, 0xe8, 0xcc, 0x4b, 0xf8, 0xf0,
0x0f, 0x8f, 0x3d, 0x39, 0x89, 0xdd, 0x85, 0x1b, 0x95, 0x3b, 0x0d, 0xb7, 0x43, 0x39, 0x87, 0x7c, 0xc8, 0x93, 0x93, 0xd8, 0x5d, 0xb8, 0x51, 0xb9, 0xd3, 0x70, 0x3b, 0x94, 0x73, 0xc0, 0x87, 0x47,
0x78, 0x7c, 0x20, 0xf0, 0xde, 0x36, 0xac, 0x96, 0x57, 0x8d, 0xc4, 0x81, 0xa3, 0x43, 0xa2, 0xaa, 0xfb, 0x02, 0xef, 0x6d, 0xc3, 0x6a, 0x79, 0xd5, 0x48, 0x1c, 0x38, 0x3a, 0x24, 0xaa, 0xba, 0x8b,
0xbb, 0xf8, 0x93, 0xad, 0xc0, 0xcc, 0x99, 0x3f, 0x9c, 0x70, 0x29, 0x9f, 0x45, 0xe2, 0x93, 0xea, 0x3f, 0xd9, 0x0a, 0xcc, 0x9c, 0xfa, 0xc3, 0x09, 0x97, 0xf2, 0x59, 0x24, 0x3e, 0xae, 0x7e, 0x54,
0xc7, 0x15, 0xe7, 0x9f, 0x57, 0xa0, 0x2d, 0x7a, 0x2b, 0xf5, 0x8a, 0x9b, 0x30, 0xaf, 0x56, 0x95, 0x71, 0xfe, 0x79, 0x05, 0xda, 0xa2, 0xb7, 0x52, 0xaf, 0xb8, 0x09, 0xf3, 0x6a, 0x55, 0x79, 0x1c,
0xc7, 0x71, 0x14, 0x4b, 0x31, 0x65, 0x83, 0xec, 0x2e, 0x74, 0x14, 0x30, 0x8e, 0x79, 0x30, 0xf2, 0x47, 0xb1, 0x14, 0x53, 0x36, 0xc8, 0xee, 0x42, 0x47, 0x01, 0xe3, 0x98, 0x07, 0x23, 0xff, 0x58,
0x4f, 0x54, 0xdd, 0x05, 0x9c, 0x6d, 0x64, 0x35, 0xc6, 0xd1, 0x24, 0xe5, 0x72, 0x07, 0x6b, 0xcb, 0xd5, 0x5d, 0xc0, 0xd9, 0x46, 0x56, 0x63, 0x1c, 0x4d, 0x52, 0x2e, 0x77, 0xb0, 0xb6, 0x9c, 0x2b,
0xb9, 0x72, 0x11, 0x73, 0xed, 0x22, 0x28, 0xa6, 0x4a, 0x48, 0xd6, 0xc2, 0x9c, 0xbf, 0x5d, 0x01, 0x17, 0x31, 0xd7, 0x2e, 0x82, 0x62, 0xaa, 0x84, 0x64, 0x2d, 0xcc, 0xf9, 0xdb, 0x15, 0x60, 0xd8,
0x86, 0x5d, 0x7f, 0x16, 0x89, 0x2a, 0x24, 0xb5, 0xe5, 0xa9, 0xbd, 0xf2, 0xd6, 0xd4, 0x5e, 0x7d, 0xf5, 0xe7, 0x91, 0xa8, 0x42, 0x52, 0x5b, 0x9e, 0xda, 0x2b, 0x17, 0xa6, 0xf6, 0xea, 0x9b, 0xa8,
0x1d, 0xb5, 0x3b, 0x30, 0x23, 0x7a, 0x5f, 0x2f, 0xe9, 0xbd, 0xc8, 0xfa, 0xac, 0xde, 0xa8, 0x75, 0xdd, 0x81, 0x19, 0xd1, 0xfb, 0x7a, 0x49, 0xef, 0x45, 0xd6, 0xa7, 0xf5, 0x46, 0xad, 0x53, 0x77,
0xea, 0xce, 0x7f, 0xac, 0xc1, 0xca, 0x96, 0xd8, 0x82, 0x37, 0xfb, 0x7d, 0x3e, 0xd6, 0x7c, 0xf0, 0xfe, 0x53, 0x0d, 0x56, 0xb6, 0xc4, 0x16, 0xbc, 0xd9, 0xef, 0xf3, 0xb1, 0xe6, 0x83, 0x77, 0xa1,
0x2e, 0xb4, 0xc2, 0x68, 0xc0, 0x15, 0xf5, 0x89, 0x8e, 0x01, 0x42, 0x06, 0xe9, 0x9d, 0xfa, 0x41, 0x15, 0x46, 0x03, 0xae, 0xa8, 0x4f, 0x74, 0x0c, 0x10, 0x32, 0x48, 0xef, 0xc4, 0x0f, 0x42, 0xd1,
0x28, 0x3a, 0x2e, 0xe6, 0xb3, 0x49, 0x08, 0x75, 0xfb, 0x16, 0x2c, 0x8e, 0x79, 0x38, 0x30, 0xc9, 0x71, 0x31, 0x9f, 0x4d, 0x42, 0xa8, 0xdb, 0xb7, 0x60, 0x71, 0xcc, 0xc3, 0x81, 0x49, 0xee, 0x42,
0x5d, 0x28, 0x49, 0xf3, 0x12, 0x96, 0x94, 0xfe, 0x2e, 0xb4, 0x8e, 0x27, 0xa2, 0x1c, 0x0a, 0x89, 0x49, 0x9a, 0x97, 0xb0, 0xa4, 0xf4, 0x77, 0xa1, 0x75, 0x34, 0x11, 0xe5, 0x50, 0x48, 0xd4, 0x89,
0x3a, 0xd1, 0x01, 0x48, 0x68, 0x53, 0xc8, 0x8a, 0xf1, 0x24, 0x39, 0xa5, 0xdc, 0x19, 0xca, 0x9d, 0x0e, 0x40, 0x42, 0x9b, 0x42, 0x56, 0x8c, 0x27, 0xc9, 0x09, 0xe5, 0xce, 0x50, 0xee, 0x1c, 0xa6,
0xc3, 0x34, 0x66, 0x5d, 0x03, 0x18, 0x4c, 0x92, 0x54, 0x52, 0xff, 0x2c, 0x65, 0x36, 0x11, 0x11, 0x31, 0xeb, 0x1a, 0xc0, 0x60, 0x92, 0xa4, 0x92, 0xfa, 0x67, 0x29, 0xb3, 0x89, 0x88, 0xa0, 0xfe,
0xd4, 0xff, 0x6d, 0x58, 0x1e, 0xf9, 0xaf, 0x3c, 0xa2, 0x1f, 0x2f, 0x08, 0xbd, 0xe3, 0x21, 0xed, 0xef, 0xc0, 0xf2, 0xc8, 0x7f, 0xed, 0x11, 0xfd, 0x78, 0x41, 0xe8, 0x1d, 0x0d, 0x69, 0x17, 0x99,
0x22, 0x73, 0x54, 0xae, 0x33, 0xf2, 0x5f, 0xfd, 0x00, 0x73, 0x1e, 0x87, 0x0f, 0x09, 0x47, 0x11, 0xa3, 0x72, 0x9d, 0x91, 0xff, 0xfa, 0x87, 0x98, 0xf3, 0x38, 0x7c, 0x48, 0x38, 0x8a, 0x08, 0xa5,
0xa1, 0xd4, 0x97, 0x98, 0x27, 0x3c, 0x3e, 0xe3, 0xc4, 0xd5, 0x75, 0xad, 0xa3, 0xb8, 0x02, 0xc5, 0xbe, 0xc4, 0x3c, 0xe1, 0xf1, 0x29, 0x27, 0xae, 0xae, 0x6b, 0x1d, 0xc5, 0x15, 0x28, 0xf6, 0x68,
0x1e, 0x8d, 0x70, 0xdc, 0xe9, 0xb0, 0x2f, 0x58, 0xd8, 0x9d, 0x1b, 0x05, 0xe1, 0x6e, 0x3a, 0xec, 0x84, 0xe3, 0x4e, 0x87, 0x7d, 0xc1, 0xc2, 0xee, 0xdc, 0x28, 0x08, 0x77, 0xd3, 0x61, 0x9f, 0x5d,
0xb3, 0xab, 0x00, 0x28, 0x13, 0xc6, 0x3c, 0xf6, 0x5e, 0x9e, 0x13, 0x3f, 0xd6, 0x49, 0x06, 0x1c, 0x05, 0x40, 0x99, 0x30, 0xe6, 0xb1, 0xf7, 0xea, 0x8c, 0xf8, 0xb1, 0x4e, 0x32, 0x60, 0x9f, 0xc7,
0xf0, 0xf8, 0xf3, 0x73, 0xf6, 0x0e, 0x34, 0xfb, 0x09, 0x09, 0x15, 0xff, 0xa2, 0xdb, 0x22, 0x66, 0x9f, 0x9d, 0xb1, 0x77, 0xa0, 0xd9, 0x4f, 0x48, 0xa8, 0xf8, 0xe7, 0xdd, 0x16, 0x31, 0x6b, 0xa3,
0x6d, 0xf4, 0x13, 0x14, 0x27, 0xfe, 0x05, 0x32, 0x14, 0xf6, 0xd6, 0xa7, 0x55, 0xe0, 0x03, 0xaa, 0x9f, 0xa0, 0x38, 0xf1, 0xcf, 0x91, 0xa1, 0xb0, 0xb7, 0x3e, 0xad, 0x02, 0x1f, 0x50, 0xf5, 0x09,
0x3e, 0x21, 0xe9, 0x38, 0x4f, 0x9d, 0xdd, 0x94, 0x19, 0xd8, 0x4e, 0xc2, 0xbe, 0x01, 0xf3, 0xaa, 0x49, 0xc7, 0x79, 0xea, 0xec, 0xa6, 0xcc, 0xc0, 0x76, 0x12, 0xf6, 0x0d, 0x98, 0x57, 0x9d, 0x3d,
0xb3, 0xc7, 0x43, 0xff, 0x24, 0x21, 0xf1, 0x30, 0xef, 0xb6, 0x25, 0xf8, 0x10, 0x31, 0xe7, 0x85, 0x1a, 0xfa, 0xc7, 0x09, 0x89, 0x87, 0x79, 0xb7, 0x2d, 0xc1, 0x87, 0x88, 0x39, 0x2f, 0x85, 0xd2,
0x50, 0x9a, 0x8c, 0xb5, 0x95, 0x7c, 0x83, 0xdb, 0x37, 0x21, 0xb4, 0xae, 0x0d, 0x57, 0xa6, 0xca, 0x64, 0xac, 0xad, 0xe4, 0x1b, 0xdc, 0xbe, 0x09, 0xa1, 0x75, 0x6d, 0xb8, 0x32, 0x55, 0xb6, 0x68,
0x16, 0xad, 0x5a, 0xb2, 0x68, 0xce, 0x2f, 0x2a, 0xd0, 0x96, 0x35, 0x93, 0xa6, 0xc1, 0xee, 0x03, 0xd5, 0x92, 0x45, 0x73, 0x7e, 0x59, 0x81, 0xb6, 0xac, 0x99, 0x34, 0x0d, 0x76, 0x1f, 0x98, 0x5a,
0x53, 0xab, 0x98, 0xbe, 0x0a, 0x06, 0xde, 0xd1, 0x45, 0xca, 0x13, 0x41, 0x34, 0xbb, 0x97, 0xdc, 0xc5, 0xf4, 0x75, 0x30, 0xf0, 0x0e, 0xcf, 0x53, 0x9e, 0x08, 0xa2, 0xd9, 0xbd, 0xe4, 0x96, 0xe4,
0x92, 0x3c, 0x94, 0x87, 0x16, 0x9a, 0xa4, 0xb1, 0xa0, 0xe9, 0xdd, 0x4b, 0x6e, 0x21, 0x07, 0x59, 0xa1, 0x3c, 0xb4, 0xd0, 0x24, 0x8d, 0x05, 0x4d, 0xef, 0x5e, 0x72, 0x0b, 0x39, 0xc8, 0x62, 0xa8,
0x0c, 0x75, 0x99, 0x49, 0xea, 0x05, 0xe1, 0x80, 0xbf, 0x22, 0x52, 0x9a, 0x77, 0x2d, 0xec, 0xc1, 0xcb, 0x4c, 0x52, 0x2f, 0x08, 0x07, 0xfc, 0x35, 0x91, 0xd2, 0xbc, 0x6b, 0x61, 0x0f, 0x16, 0xa0,
0x02, 0xb4, 0xcd, 0xef, 0x9c, 0x9f, 0x42, 0x43, 0x69, 0x42, 0xa4, 0x05, 0xe4, 0xfa, 0xe5, 0x1a, 0x6d, 0x7e, 0xe7, 0xfc, 0x0c, 0x1a, 0x4a, 0x13, 0x22, 0x2d, 0x20, 0xd7, 0x2f, 0xd7, 0x40, 0x58,
0x08, 0xeb, 0x41, 0xc3, 0xee, 0x85, 0xdb, 0xf8, 0x3a, 0x6d, 0x3b, 0x7f, 0x01, 0x3a, 0x7b, 0x48, 0x0f, 0x1a, 0x76, 0x2f, 0xdc, 0xc6, 0x57, 0x69, 0xdb, 0xf9, 0x0b, 0xd0, 0x79, 0x82, 0x44, 0x14,
0x44, 0x21, 0x12, 0xad, 0x54, 0xef, 0x56, 0x61, 0xd6, 0x60, 0x9e, 0xa6, 0x2b, 0x53, 0xb8, 0x8f, 0x22, 0xd1, 0x4a, 0xf5, 0x6e, 0x15, 0x66, 0x0d, 0xe6, 0x69, 0xba, 0x32, 0x85, 0xfb, 0xe8, 0x49,
0x9e, 0x46, 0x49, 0x2a, 0xdb, 0xa1, 0xdf, 0xce, 0x9f, 0x54, 0x80, 0xed, 0x24, 0x69, 0x30, 0xf2, 0x94, 0xa4, 0xb2, 0x1d, 0xfa, 0xed, 0xfc, 0x71, 0x05, 0xd8, 0x4e, 0x92, 0x06, 0x23, 0x3f, 0xe5,
0x53, 0xfe, 0x90, 0x6b, 0xf1, 0xf0, 0x14, 0xda, 0x58, 0xdb, 0xb3, 0x68, 0x53, 0x28, 0x5b, 0x42, 0x0f, 0xb9, 0x16, 0x0f, 0xcf, 0xa0, 0x8d, 0xb5, 0x3d, 0x8f, 0x36, 0x85, 0xb2, 0x25, 0x94, 0x84,
0x49, 0xf8, 0x96, 0x64, 0xe7, 0xe2, 0x07, 0xeb, 0x66, 0x69, 0x21, 0xba, 0xad, 0x0a, 0x90, 0xdb, 0x6f, 0x4b, 0x76, 0x2e, 0x7e, 0xb0, 0x6e, 0x96, 0x16, 0xa2, 0xdb, 0xaa, 0x00, 0xb9, 0x2d, 0xf5,
0x52, 0x3f, 0x3e, 0xe1, 0x29, 0x69, 0x62, 0x52, 0x8f, 0x07, 0x01, 0x6d, 0x45, 0xe1, 0x71, 0xef, 0xe3, 0x63, 0x9e, 0x92, 0x26, 0x26, 0xf5, 0x78, 0x10, 0xd0, 0x56, 0x14, 0x1e, 0xf5, 0x7e, 0x0b,
0xb7, 0x60, 0xa9, 0x50, 0x87, 0x29, 0xa3, 0x9b, 0x25, 0x32, 0xba, 0x66, 0xca, 0xe8, 0x3e, 0x2c, 0x96, 0x0a, 0x75, 0x98, 0x32, 0xba, 0x59, 0x22, 0xa3, 0x6b, 0xa6, 0x8c, 0xee, 0xc3, 0xb2, 0xd5,
0x5b, 0xfd, 0x92, 0x14, 0xd7, 0x85, 0x39, 0x64, 0x0c, 0xdc, 0xf0, 0x2b, 0x62, 0xc3, 0x97, 0x49, 0x2f, 0x49, 0x71, 0x5d, 0x98, 0x43, 0xc6, 0xc0, 0x0d, 0xbf, 0x22, 0x36, 0x7c, 0x99, 0x64, 0x1b,
0xb6, 0x01, 0x2b, 0xc7, 0x9c, 0xc7, 0x7e, 0x4a, 0x49, 0x62, 0x1d, 0x5c, 0x13, 0x59, 0x73, 0x69, 0xb0, 0x72, 0xc4, 0x79, 0xec, 0xa7, 0x94, 0x24, 0xd6, 0xc1, 0x35, 0x91, 0x35, 0x97, 0xe6, 0x39,
0x9e, 0xf3, 0x5f, 0x2b, 0xb0, 0x88, 0xd2, 0xf4, 0x89, 0x1f, 0x5e, 0xa8, 0xb9, 0xda, 0x2b, 0x9d, 0xff, 0xad, 0x02, 0x8b, 0x28, 0x4d, 0x9f, 0xfa, 0xe1, 0xb9, 0x9a, 0xab, 0x27, 0xa5, 0x73, 0x75,
0xab, 0x3b, 0xc6, 0x26, 0x67, 0x94, 0xfe, 0xba, 0x13, 0x55, 0xcb, 0x4f, 0x14, 0xbb, 0x01, 0x6d, 0xc7, 0xd8, 0xe4, 0x8c, 0xd2, 0x5f, 0x75, 0xa2, 0x6a, 0xf9, 0x89, 0x62, 0x37, 0xa0, 0x6d, 0x75,
0xab, 0xbb, 0x33, 0x42, 0xb3, 0x4c, 0xfc, 0xf4, 0x80, 0xc7, 0x0f, 0x2e, 0x52, 0xfe, 0xab, 0x4f, 0x77, 0x46, 0x68, 0x96, 0x89, 0x9f, 0xee, 0xf3, 0xf8, 0xc1, 0x79, 0xca, 0x7f, 0xfd, 0xa9, 0xbc,
0xe5, 0x2d, 0xe8, 0x64, 0xdd, 0x96, 0xf3, 0xc8, 0xa0, 0x8e, 0x84, 0x29, 0x2b, 0xa0, 0xdf, 0xce, 0x05, 0x9d, 0xac, 0xdb, 0x72, 0x1e, 0x19, 0xd4, 0x91, 0x30, 0x65, 0x05, 0xf4, 0xdb, 0xf9, 0xfb,
0xdf, 0xaf, 0x88, 0x82, 0x5b, 0x51, 0xa0, 0xb5, 0x4e, 0x2c, 0x88, 0xca, 0xab, 0x2a, 0x88, 0xbf, 0x15, 0x51, 0x70, 0x2b, 0x0a, 0xb4, 0xd6, 0x89, 0x05, 0x51, 0x79, 0x55, 0x05, 0xf1, 0xf7, 0x54,
0xa7, 0x6a, 0xed, 0xbf, 0xfa, 0x60, 0x51, 0x26, 0x26, 0x3c, 0x1c, 0x78, 0xfe, 0x70, 0x48, 0x82, 0xad, 0xfd, 0xd7, 0x1f, 0x2c, 0xca, 0xc4, 0x84, 0x87, 0x03, 0xcf, 0x1f, 0x0e, 0x49, 0x10, 0x37,
0xb8, 0xe1, 0xce, 0x61, 0x7a, 0x73, 0x38, 0x74, 0x6e, 0xc3, 0x92, 0xd1, 0xbb, 0xd7, 0x8c, 0x63, 0xdc, 0x39, 0x4c, 0x6f, 0x0e, 0x87, 0xce, 0x6d, 0x58, 0x32, 0x7a, 0xf7, 0x86, 0x71, 0xec, 0x01,
0x1f, 0xd8, 0x5e, 0x90, 0xa4, 0xcf, 0xc3, 0x64, 0x6c, 0x28, 0x64, 0xef, 0x40, 0x13, 0xa5, 0x2d, 0x7b, 0x12, 0x24, 0xe9, 0x8b, 0x30, 0x19, 0x1b, 0x0a, 0xd9, 0x3b, 0xd0, 0x44, 0x69, 0x8b, 0x3d,
0xf6, 0x4c, 0x70, 0xee, 0x8c, 0x8b, 0xe2, 0x17, 0xfb, 0x95, 0x50, 0xa6, 0xff, 0x4a, 0x66, 0x56, 0x13, 0x9c, 0x3b, 0xe3, 0xa2, 0xf8, 0xc5, 0x7e, 0x25, 0x94, 0xe9, 0xbf, 0x96, 0x99, 0x55, 0x99,
0x65, 0xa6, 0xff, 0x8a, 0x32, 0x9d, 0x8f, 0x61, 0xd9, 0xaa, 0x4f, 0x36, 0xfd, 0x1e, 0xcc, 0x4c, 0xe9, 0xbf, 0xa6, 0x4c, 0xe7, 0x23, 0x58, 0xb6, 0xea, 0x93, 0x4d, 0xbf, 0x07, 0x33, 0x93, 0xf4,
0xd2, 0x57, 0x91, 0x52, 0xb9, 0x5b, 0x92, 0x42, 0xf0, 0x70, 0xe7, 0x8a, 0x1c, 0xe7, 0x53, 0x58, 0x75, 0xa4, 0x54, 0xee, 0x96, 0xa4, 0x10, 0x3c, 0xdc, 0xb9, 0x22, 0xc7, 0xf9, 0x04, 0x96, 0xf6,
0xda, 0xe7, 0xe7, 0x92, 0x91, 0x55, 0x47, 0x6e, 0xbd, 0xf1, 0xe0, 0x47, 0xf9, 0xce, 0x3a, 0x30, 0xf8, 0x99, 0x64, 0x64, 0xd5, 0x91, 0x5b, 0x6f, 0x3d, 0xf8, 0x51, 0xbe, 0xb3, 0x0e, 0xcc, 0xfc,
0xf3, 0xe3, 0x8c, 0x01, 0xd4, 0x31, 0xb0, 0x62, 0x1d, 0x03, 0x9d, 0x5b, 0xc0, 0x0e, 0x83, 0x93, 0x38, 0x63, 0x00, 0x75, 0x0c, 0xac, 0x58, 0xc7, 0x40, 0xe7, 0x16, 0xb0, 0x83, 0xe0, 0x38, 0x7c,
0xf0, 0x09, 0x4f, 0x12, 0xff, 0x44, 0xb3, 0x7e, 0x07, 0x6a, 0xa3, 0xe4, 0x44, 0x8a, 0x2a, 0xfc, 0xca, 0x93, 0xc4, 0x3f, 0xd6, 0xac, 0xdf, 0x81, 0xda, 0x28, 0x39, 0x96, 0xa2, 0x0a, 0x7f, 0x3a,
0xe9, 0x7c, 0x07, 0x96, 0xad, 0x72, 0xb2, 0xe2, 0xab, 0xd0, 0x4c, 0x82, 0x93, 0xd0, 0x4f, 0x27, 0xdf, 0x85, 0x65, 0xab, 0x9c, 0xac, 0xf8, 0x2a, 0x34, 0x93, 0xe0, 0x38, 0xf4, 0xd3, 0x49, 0xcc,
0x31, 0x97, 0x55, 0x67, 0x80, 0xf3, 0x10, 0x56, 0x7e, 0xc0, 0xe3, 0xe0, 0xf8, 0xe2, 0x4d, 0xd5, 0x65, 0xd5, 0x19, 0xe0, 0x3c, 0x84, 0x95, 0x1f, 0xf2, 0x38, 0x38, 0x3a, 0x7f, 0x5b, 0xf5, 0x76,
0xdb, 0xf5, 0x54, 0xf3, 0xf5, 0xec, 0xc0, 0xe5, 0x5c, 0x3d, 0xb2, 0x79, 0x41, 0xbe, 0x72, 0x25, 0x3d, 0xd5, 0x7c, 0x3d, 0x3b, 0x70, 0x39, 0x57, 0x8f, 0x6c, 0x5e, 0x90, 0xaf, 0x5c, 0xc9, 0x86,
0x1b, 0xae, 0x48, 0x18, 0xb2, 0xaf, 0x6a, 0xca, 0x3e, 0xe7, 0x39, 0xb0, 0xad, 0x28, 0x0c, 0x79, 0x2b, 0x12, 0x86, 0xec, 0xab, 0x9a, 0xb2, 0xcf, 0x79, 0x01, 0x6c, 0x2b, 0x0a, 0x43, 0xde, 0x4f,
0x3f, 0x3d, 0xe0, 0x3c, 0xce, 0x2c, 0x50, 0x19, 0xad, 0xb6, 0x36, 0xd6, 0xe4, 0xcc, 0xe6, 0x05, 0xf7, 0x39, 0x8f, 0x33, 0x0b, 0x54, 0x46, 0xab, 0xad, 0x8d, 0x35, 0x39, 0xb3, 0x79, 0x81, 0x2a,
0xaa, 0x24, 0x62, 0x06, 0xf5, 0x31, 0x8f, 0x47, 0x54, 0x71, 0xc3, 0xa5, 0xdf, 0xce, 0x65, 0x58, 0x89, 0x98, 0x41, 0x7d, 0xcc, 0xe3, 0x11, 0x55, 0xdc, 0x70, 0xe9, 0xb7, 0x73, 0x19, 0x96, 0xad,
0xb6, 0xaa, 0x95, 0x67, 0xf6, 0x0f, 0xe1, 0xf2, 0x76, 0x90, 0xf4, 0x8b, 0x0d, 0x76, 0x61, 0x6e, 0x6a, 0xe5, 0x99, 0xfd, 0x03, 0xb8, 0xbc, 0x1d, 0x24, 0xfd, 0x62, 0x83, 0x5d, 0x98, 0x1b, 0x4f,
0x3c, 0x39, 0xf2, 0x32, 0x4e, 0x54, 0x49, 0x3c, 0xc6, 0xe5, 0x3f, 0x91, 0x95, 0xfd, 0xb5, 0x0a, 0x0e, 0xbd, 0x8c, 0x13, 0x55, 0x12, 0x8f, 0x71, 0xf9, 0x4f, 0x64, 0x65, 0x7f, 0xad, 0x02, 0xf5,
0xd4, 0x77, 0x9f, 0xed, 0x6d, 0xe1, 0x5e, 0x11, 0x84, 0xfd, 0x68, 0x84, 0x5a, 0x98, 0x18, 0xb4, 0xdd, 0xe7, 0x4f, 0xb6, 0x70, 0xaf, 0x08, 0xc2, 0x7e, 0x34, 0x42, 0x2d, 0x4c, 0x0c, 0x5a, 0xa7,
0x4e, 0x4f, 0xe5, 0xb0, 0xab, 0xd0, 0x24, 0xe5, 0x0d, 0x4f, 0xae, 0x52, 0x0f, 0xca, 0x00, 0x3c, 0xa7, 0x72, 0xd8, 0x55, 0x68, 0x92, 0xf2, 0x86, 0x27, 0x57, 0xa9, 0x07, 0x65, 0x00, 0x9e, 0x9a,
0x35, 0xf3, 0x57, 0xe3, 0x20, 0xa6, 0x63, 0xb1, 0x3a, 0xec, 0xd6, 0x69, 0x9b, 0x29, 0x66, 0x38, 0xf9, 0xeb, 0x71, 0x10, 0xd3, 0xb1, 0x58, 0x1d, 0x76, 0xeb, 0xb4, 0xcd, 0x14, 0x33, 0x9c, 0x5f,
0xbf, 0x98, 0x83, 0x39, 0xb9, 0xf9, 0x8a, 0x8d, 0x3c, 0x0d, 0xce, 0x78, 0xb6, 0x91, 0x63, 0x0a, 0xce, 0xc1, 0x9c, 0xdc, 0x7c, 0xc5, 0x46, 0x9e, 0x06, 0xa7, 0x3c, 0xdb, 0xc8, 0x31, 0x85, 0x8a,
0x15, 0xe3, 0x98, 0x8f, 0xa2, 0x54, 0xeb, 0x6f, 0x62, 0x19, 0x6c, 0x90, 0xac, 0x02, 0x52, 0x89, 0x71, 0xcc, 0x47, 0x51, 0xaa, 0xf5, 0x37, 0xb1, 0x0c, 0x36, 0x48, 0x56, 0x01, 0xa9, 0x44, 0x08,
0x10, 0x76, 0x84, 0x9a, 0x28, 0x65, 0x81, 0xec, 0x2a, 0xcc, 0x29, 0x65, 0xa0, 0xae, 0x0f, 0x2c, 0x3b, 0x42, 0x4d, 0x94, 0xb2, 0x40, 0x76, 0x15, 0xe6, 0x94, 0x32, 0x50, 0xd7, 0x07, 0x16, 0x05,
0x0a, 0xc2, 0xd9, 0xe8, 0xfb, 0x63, 0xbf, 0x1f, 0xa4, 0x17, 0x52, 0x2c, 0xe8, 0x34, 0xd6, 0x3f, 0xe1, 0x6c, 0xf4, 0xfd, 0xb1, 0xdf, 0x0f, 0xd2, 0x73, 0x29, 0x16, 0x74, 0x1a, 0xeb, 0x1f, 0x46,
0x8c, 0xfa, 0xfe, 0xd0, 0x3b, 0xf2, 0x87, 0x7e, 0xd8, 0xe7, 0xca, 0xea, 0x60, 0x81, 0x78, 0x02, 0x7d, 0x7f, 0xe8, 0x1d, 0xfa, 0x43, 0x3f, 0xec, 0x73, 0x65, 0x75, 0xb0, 0x40, 0x3c, 0x81, 0xcb,
0x97, 0xdd, 0x52, 0xc5, 0xc4, 0x29, 0x3d, 0x87, 0xe2, 0x1e, 0xde, 0x8f, 0x46, 0xa3, 0x20, 0xc5, 0x6e, 0xa9, 0x62, 0xe2, 0x94, 0x9e, 0x43, 0x71, 0x0f, 0xef, 0x47, 0xa3, 0x51, 0x90, 0xe2, 0xc1,
0x83, 0x3b, 0xa9, 0x66, 0x35, 0xd7, 0x40, 0x84, 0x8d, 0x83, 0x52, 0xe7, 0x62, 0x06, 0x9b, 0xca, 0x9d, 0x54, 0xb3, 0x9a, 0x6b, 0x20, 0xc2, 0xc6, 0x41, 0xa9, 0x33, 0x31, 0x83, 0x4d, 0x65, 0xe3,
0xc6, 0x61, 0x80, 0x58, 0x4b, 0x4e, 0x43, 0xab, 0xb9, 0x06, 0x82, 0x6b, 0x31, 0x09, 0x13, 0x9e, 0x30, 0x40, 0xac, 0x25, 0xa7, 0xa1, 0xd5, 0x5c, 0x03, 0xc1, 0xb5, 0x98, 0x84, 0x09, 0x4f, 0xd3,
0xa6, 0x43, 0x3e, 0xd0, 0x1d, 0x6a, 0x51, 0xb1, 0x62, 0x06, 0xbb, 0x0f, 0xcb, 0xc2, 0x96, 0x90, 0x21, 0x1f, 0xe8, 0x0e, 0xb5, 0xa8, 0x58, 0x31, 0x83, 0xdd, 0x87, 0x65, 0x61, 0x4b, 0x48, 0xfc,
0xf8, 0x69, 0x94, 0x9c, 0x06, 0x89, 0x97, 0xe0, 0x31, 0x48, 0x9c, 0x69, 0xcb, 0xb2, 0xd8, 0xc7, 0x34, 0x4a, 0x4e, 0x82, 0xc4, 0x4b, 0xf0, 0x18, 0x24, 0xce, 0xb4, 0x65, 0x59, 0xec, 0x23, 0x58,
0xb0, 0x96, 0x83, 0x63, 0xde, 0xe7, 0xc1, 0x19, 0x1f, 0x90, 0x0a, 0x57, 0x73, 0xa7, 0x65, 0xb3, 0xcb, 0xc1, 0x31, 0xef, 0xf3, 0xe0, 0x94, 0x0f, 0x48, 0x85, 0xab, 0xb9, 0xd3, 0xb2, 0xd9, 0x0d,
0x1b, 0xd0, 0x0a, 0x27, 0x23, 0x6f, 0x32, 0x1e, 0xf8, 0xa8, 0xc4, 0x2c, 0x90, 0x72, 0x69, 0x42, 0x68, 0x85, 0x93, 0x91, 0x37, 0x19, 0x0f, 0x7c, 0x54, 0x62, 0x16, 0x48, 0xb9, 0x34, 0x21, 0xf6,
0xec, 0x43, 0x50, 0x7a, 0x9a, 0xd4, 0x1e, 0x17, 0x2d, 0x09, 0x87, 0xd4, 0xeb, 0xda, 0x25, 0x90, 0x01, 0x28, 0x3d, 0x4d, 0x6a, 0x8f, 0x8b, 0x96, 0x84, 0x43, 0xea, 0x75, 0xed, 0x12, 0x48, 0x98,
0x30, 0x33, 0x95, 0xb4, 0x23, 0xcf, 0x8f, 0x0a, 0x20, 0x3e, 0x89, 0x83, 0x33, 0x3f, 0xe5, 0xdd, 0x99, 0x4a, 0xda, 0x91, 0xe7, 0x47, 0x05, 0x10, 0x9f, 0xc4, 0xc1, 0xa9, 0x9f, 0xf2, 0xee, 0x92,
0x25, 0x21, 0xd4, 0x65, 0x12, 0xbf, 0x0b, 0xc2, 0x20, 0x0d, 0xfc, 0x34, 0x8a, 0xbb, 0x8c, 0xf2, 0x10, 0xea, 0x32, 0x89, 0xdf, 0x05, 0x61, 0x90, 0x06, 0x7e, 0x1a, 0xc5, 0x5d, 0x46, 0x79, 0x19,
0x32, 0x00, 0x27, 0x91, 0xe8, 0x23, 0x49, 0xfd, 0x74, 0x92, 0x48, 0x0d, 0x75, 0x99, 0x88, 0xab, 0x80, 0x93, 0x48, 0xf4, 0x91, 0xa4, 0x7e, 0x3a, 0x49, 0xa4, 0x86, 0xba, 0x4c, 0xc4, 0x55, 0xcc,
0x98, 0xc1, 0x3e, 0x82, 0x55, 0x41, 0x11, 0x94, 0x25, 0x75, 0x6f, 0x52, 0x15, 0x56, 0x68, 0x46, 0x60, 0x1f, 0xc2, 0xaa, 0xa0, 0x08, 0xca, 0x92, 0xba, 0x37, 0xa9, 0x0a, 0x2b, 0x34, 0x23, 0x53,
0xa6, 0xe4, 0xe2, 0x54, 0x4a, 0x12, 0x29, 0x7c, 0x78, 0x59, 0x4c, 0xe5, 0x94, 0x6c, 0xec, 0x1f, 0x72, 0x71, 0x2a, 0x25, 0x89, 0x14, 0x3e, 0xbc, 0x2c, 0xa6, 0x72, 0x4a, 0x36, 0xf6, 0x0f, 0x7b,
0xf6, 0x20, 0xe8, 0x7b, 0xb2, 0x04, 0xb2, 0xc8, 0x2a, 0x8d, 0xa2, 0x98, 0x81, 0x24, 0x3e, 0x0c, 0x10, 0xf4, 0x3d, 0x59, 0x02, 0x59, 0x64, 0x95, 0x46, 0x51, 0xcc, 0x40, 0x12, 0x1f, 0x06, 0x47,
0x8e, 0x79, 0x1a, 0x8c, 0x78, 0x77, 0x4d, 0x90, 0xb8, 0x4a, 0x23, 0x03, 0x4e, 0xc6, 0x94, 0xd3, 0x3c, 0x0d, 0x46, 0xbc, 0xbb, 0x26, 0x48, 0x5c, 0xa5, 0x91, 0x01, 0x27, 0x63, 0xca, 0xe9, 0x0a,
0x15, 0x0c, 0x2f, 0x52, 0xce, 0xef, 0x57, 0xc4, 0xe6, 0x23, 0x19, 0x35, 0x31, 0x8e, 0x55, 0x82, 0x86, 0x17, 0x29, 0xe7, 0xf7, 0x2b, 0x62, 0xf3, 0x91, 0x8c, 0x9a, 0x18, 0xc7, 0x2a, 0xc1, 0xa2,
0x45, 0xbd, 0x28, 0x1c, 0x5e, 0x48, 0xae, 0x05, 0x01, 0x3d, 0x0d, 0x87, 0x17, 0xa8, 0xd8, 0x07, 0x5e, 0x14, 0x0e, 0xcf, 0x25, 0xd7, 0x82, 0x80, 0x9e, 0x85, 0xc3, 0x73, 0x54, 0xec, 0x83, 0xd0,
0xa1, 0x59, 0x44, 0xc8, 0xb9, 0xb6, 0x02, 0xa9, 0xd0, 0xbb, 0xd0, 0x1a, 0x4f, 0x8e, 0x86, 0x41, 0x2c, 0x22, 0xe4, 0x5c, 0x5b, 0x81, 0x54, 0xe8, 0x5d, 0x68, 0x8d, 0x27, 0x87, 0xc3, 0xa0, 0x2f,
0x5f, 0x14, 0xa9, 0x89, 0x5a, 0x04, 0x44, 0x05, 0xf0, 0x5c, 0x29, 0x56, 0x4a, 0x94, 0xa8, 0x53, 0x8a, 0xd4, 0x44, 0x2d, 0x02, 0xa2, 0x02, 0x78, 0xae, 0x14, 0x2b, 0x25, 0x4a, 0xd4, 0xa9, 0x44,
0x89, 0x96, 0xc4, 0xb0, 0x88, 0xf3, 0x00, 0x56, 0xec, 0x0e, 0x4a, 0x81, 0x7e, 0x17, 0x1a, 0x92, 0x4b, 0x62, 0x58, 0xc4, 0x79, 0x00, 0x2b, 0x76, 0x07, 0xa5, 0x40, 0xbf, 0x0b, 0x0d, 0xc9, 0xff,
0xff, 0x95, 0xa1, 0x60, 0xc1, 0x30, 0xdf, 0xe2, 0x31, 0x48, 0xe7, 0x3b, 0xff, 0xa2, 0x0e, 0xcb, 0xca, 0x50, 0xb0, 0x60, 0x98, 0x6f, 0xf1, 0x18, 0xa4, 0xf3, 0x9d, 0x7f, 0x59, 0x87, 0x65, 0x89,
0x12, 0xdd, 0x1a, 0x46, 0x09, 0x3f, 0x9c, 0x8c, 0x46, 0x7e, 0x5c, 0x22, 0x58, 0x2a, 0x6f, 0x10, 0x6e, 0x0d, 0xa3, 0x84, 0x1f, 0x4c, 0x46, 0x23, 0x3f, 0x2e, 0x11, 0x2c, 0x95, 0xb7, 0x08, 0x96,
0x2c, 0xd5, 0xa2, 0x60, 0xb9, 0x6e, 0x9d, 0x2f, 0x85, 0x64, 0x32, 0x10, 0x76, 0x07, 0x16, 0xfb, 0x6a, 0x51, 0xb0, 0x5c, 0xb7, 0xce, 0x97, 0x42, 0x32, 0x19, 0x08, 0xbb, 0x03, 0x8b, 0xfd, 0x61,
0xc3, 0x28, 0x11, 0xea, 0xbe, 0x69, 0x41, 0xcc, 0xc3, 0x45, 0x61, 0x38, 0x53, 0x26, 0x0c, 0x4d, 0x94, 0x08, 0x75, 0xdf, 0xb4, 0x20, 0xe6, 0xe1, 0xa2, 0x30, 0x9c, 0x29, 0x13, 0x86, 0xa6, 0x20,
0x41, 0x36, 0x9b, 0x13, 0x64, 0x0e, 0xb4, 0xb1, 0x52, 0xae, 0x64, 0xf3, 0x9c, 0x3c, 0x6c, 0x19, 0x9b, 0xcd, 0x09, 0x32, 0x07, 0xda, 0x58, 0x29, 0x57, 0xb2, 0x79, 0x4e, 0x1e, 0xb6, 0x0c, 0x0c,
0x18, 0xf6, 0x27, 0x2f, 0x36, 0x84, 0x8c, 0x5a, 0x2c, 0x13, 0x1a, 0xc1, 0x88, 0x93, 0xec, 0x37, 0xfb, 0x93, 0x17, 0x1b, 0x42, 0x46, 0x2d, 0x96, 0x09, 0x8d, 0x60, 0xc4, 0x49, 0xf6, 0x1b, 0xa5,
0x4a, 0x37, 0xa5, 0xd0, 0x28, 0x66, 0xb1, 0x87, 0x00, 0xa2, 0x2d, 0x52, 0x40, 0x80, 0x14, 0x90, 0x9b, 0x52, 0x68, 0x14, 0xb3, 0xd8, 0x43, 0x00, 0xd1, 0x16, 0x29, 0x20, 0x40, 0x0a, 0xc8, 0x2d,
0x5b, 0xf6, 0xaa, 0x98, 0xf3, 0xbf, 0x8e, 0x89, 0x49, 0xcc, 0x49, 0x29, 0x31, 0xbe, 0x74, 0xfe, 0x7b, 0x55, 0xcc, 0xf9, 0x5f, 0xc7, 0xc4, 0x24, 0xe6, 0xa4, 0x94, 0x18, 0x5f, 0x3a, 0x7f, 0xa3,
0x46, 0x05, 0x5a, 0x46, 0x1e, 0xbb, 0x0c, 0x4b, 0x5b, 0x4f, 0x9f, 0x1e, 0xec, 0xb8, 0x9b, 0xcf, 0x02, 0x2d, 0x23, 0x8f, 0x5d, 0x86, 0xa5, 0xad, 0x67, 0xcf, 0xf6, 0x77, 0xdc, 0xcd, 0xe7, 0x8f,
0x1e, 0xff, 0x60, 0xc7, 0xdb, 0xda, 0x7b, 0x7a, 0xb8, 0xd3, 0xb9, 0x84, 0xf0, 0xde, 0xd3, 0xad, 0x7f, 0xb8, 0xe3, 0x6d, 0x3d, 0x79, 0x76, 0xb0, 0xd3, 0xb9, 0x84, 0xf0, 0x93, 0x67, 0x5b, 0x9b,
0xcd, 0x3d, 0xef, 0xe1, 0x53, 0x77, 0x4b, 0xc1, 0x15, 0xb6, 0x0a, 0xcc, 0xdd, 0x79, 0xf2, 0xf4, 0x4f, 0xbc, 0x87, 0xcf, 0xdc, 0x2d, 0x05, 0x57, 0xd8, 0x2a, 0x30, 0x77, 0xe7, 0xe9, 0xb3, 0xe7,
0xd9, 0x8e, 0x85, 0x57, 0x59, 0x07, 0xda, 0x0f, 0xdc, 0x9d, 0xcd, 0xad, 0x5d, 0x89, 0xd4, 0xd8, 0x3b, 0x16, 0x5e, 0x65, 0x1d, 0x68, 0x3f, 0x70, 0x77, 0x36, 0xb7, 0x76, 0x25, 0x52, 0x63, 0x2b,
0x0a, 0x74, 0x1e, 0x3e, 0xdf, 0xdf, 0x7e, 0xbc, 0xff, 0xc8, 0xdb, 0xda, 0xdc, 0xdf, 0xda, 0xd9, 0xd0, 0x79, 0xf8, 0x62, 0x6f, 0xfb, 0xf1, 0xde, 0x23, 0x6f, 0x6b, 0x73, 0x6f, 0x6b, 0xe7, 0xc9,
0xdb, 0xd9, 0xee, 0xd4, 0xd9, 0x3c, 0x34, 0x37, 0x1f, 0x6c, 0xee, 0x6f, 0x3f, 0xdd, 0xdf, 0xd9, 0xce, 0x76, 0xa7, 0xce, 0xe6, 0xa1, 0xb9, 0xf9, 0x60, 0x73, 0x6f, 0xfb, 0xd9, 0xde, 0xce, 0x76,
0xee, 0xcc, 0x38, 0x7f, 0x5a, 0x81, 0xcb, 0xd4, 0xeb, 0x41, 0x9e, 0x49, 0x6e, 0x40, 0xab, 0x1f, 0x67, 0xc6, 0xf9, 0x93, 0x0a, 0x5c, 0xa6, 0x5e, 0x0f, 0xf2, 0x4c, 0x72, 0x03, 0x5a, 0xfd, 0x28,
0x45, 0x63, 0x54, 0xfc, 0xb3, 0xad, 0xcd, 0x84, 0x90, 0x01, 0x84, 0x50, 0x38, 0x8e, 0xe2, 0x3e, 0x1a, 0xa3, 0xe2, 0x9f, 0x6d, 0x6d, 0x26, 0x84, 0x0c, 0x20, 0x84, 0xc2, 0x51, 0x14, 0xf7, 0xb9,
0x97, 0x3c, 0x02, 0x04, 0x3d, 0x44, 0x04, 0x19, 0x40, 0x2e, 0xaf, 0x28, 0x21, 0x58, 0xa4, 0x25, 0xe4, 0x11, 0x20, 0xe8, 0x21, 0x22, 0xc8, 0x00, 0x72, 0x79, 0x45, 0x09, 0xc1, 0x22, 0x2d, 0x81,
0x30, 0x51, 0x64, 0x15, 0x66, 0x8f, 0x62, 0xee, 0xf7, 0x4f, 0x25, 0x77, 0xc8, 0x14, 0x7b, 0x3f, 0x89, 0x22, 0xab, 0x30, 0x7b, 0x18, 0x73, 0xbf, 0x7f, 0x22, 0xb9, 0x43, 0xa6, 0xd8, 0xb7, 0xb2,
0x3b, 0x99, 0xf6, 0x71, 0xf6, 0x87, 0x7c, 0x40, 0x14, 0xd3, 0x70, 0x17, 0x25, 0xbe, 0x25, 0x61, 0x93, 0x69, 0x1f, 0x67, 0x7f, 0xc8, 0x07, 0x44, 0x31, 0x0d, 0x77, 0x51, 0xe2, 0x5b, 0x12, 0x46,
0x94, 0x82, 0xfe, 0x91, 0x1f, 0x0e, 0xa2, 0x90, 0x0f, 0xa4, 0xda, 0x9b, 0x01, 0xce, 0x01, 0xac, 0x29, 0xe8, 0x1f, 0xfa, 0xe1, 0x20, 0x0a, 0xf9, 0x40, 0xaa, 0xbd, 0x19, 0xe0, 0xec, 0xc3, 0x6a,
0xe6, 0xc7, 0x27, 0x79, 0xec, 0x23, 0x83, 0xc7, 0x84, 0x16, 0xda, 0x9b, 0xbe, 0x9a, 0x06, 0xbf, 0x7e, 0x7c, 0x92, 0xc7, 0x3e, 0x34, 0x78, 0x4c, 0x68, 0xa1, 0xbd, 0xe9, 0xab, 0x69, 0xf0, 0xdb,
0xfd, 0xe7, 0x2a, 0xd4, 0x51, 0x29, 0x99, 0xae, 0xc0, 0x98, 0x7a, 0x66, 0xad, 0xe0, 0x6e, 0xa0, 0x7f, 0xa9, 0x42, 0x1d, 0x95, 0x92, 0xe9, 0x0a, 0x8c, 0xa9, 0x67, 0xd6, 0x0a, 0xee, 0x06, 0x3a,
0xc3, 0xae, 0xd8, 0xa2, 0xa4, 0xa1, 0x25, 0x43, 0xb2, 0xfc, 0x98, 0xf7, 0xcf, 0xa4, 0xa9, 0xc5, 0xec, 0x8a, 0x2d, 0x4a, 0x1a, 0x5a, 0x32, 0x24, 0xcb, 0x8f, 0x79, 0xff, 0x54, 0x9a, 0x5a, 0x0c,
0x40, 0x90, 0x41, 0xf0, 0x10, 0x40, 0x5f, 0x4b, 0x06, 0x51, 0x69, 0x95, 0x47, 0x5f, 0xce, 0x65, 0x04, 0x19, 0x04, 0x0f, 0x01, 0xf4, 0xb5, 0x64, 0x10, 0x95, 0x56, 0x79, 0xf4, 0xe5, 0x5c, 0x96,
0x79, 0xf4, 0x5d, 0x17, 0xe6, 0x82, 0xf0, 0x28, 0x9a, 0x84, 0x03, 0x62, 0x88, 0x86, 0xab, 0x92, 0x47, 0xdf, 0x75, 0x61, 0x2e, 0x08, 0x0f, 0xa3, 0x49, 0x38, 0x20, 0x86, 0x68, 0xb8, 0x2a, 0x49,
0xe4, 0xe0, 0x20, 0x46, 0x45, 0xf9, 0x29, 0xc8, 0x3f, 0x03, 0xd8, 0x06, 0x34, 0x93, 0x8b, 0xb0, 0x0e, 0x0e, 0x62, 0x54, 0x94, 0x9f, 0x82, 0xfc, 0x33, 0x80, 0x6d, 0x40, 0x33, 0x39, 0x0f, 0xfb,
0x6f, 0xd2, 0xfc, 0x8a, 0x9c, 0x25, 0x9c, 0x83, 0xf5, 0xc3, 0x8b, 0xb0, 0x4f, 0x14, 0x9e, 0x15, 0x26, 0xcd, 0xaf, 0xc8, 0x59, 0xc2, 0x39, 0x58, 0x3f, 0x38, 0x0f, 0xfb, 0x44, 0xe1, 0x59, 0x31,
0x73, 0x7e, 0x0b, 0x1a, 0x0a, 0x46, 0xb2, 0x7c, 0xbe, 0xff, 0xf9, 0xfe, 0xd3, 0x17, 0xfb, 0xde, 0xe7, 0xb7, 0xa0, 0xa1, 0x60, 0x24, 0xcb, 0x17, 0x7b, 0x9f, 0xed, 0x3d, 0x7b, 0xb9, 0xe7, 0x1d,
0xe1, 0x0f, 0xf7, 0xb7, 0x3a, 0x97, 0xd8, 0x22, 0xb4, 0x36, 0xb7, 0x88, 0xd2, 0x09, 0xa8, 0x60, 0xfc, 0x68, 0x6f, 0xab, 0x73, 0x89, 0x2d, 0x42, 0x6b, 0x73, 0x8b, 0x28, 0x9d, 0x80, 0x0a, 0x16,
0x91, 0x83, 0xcd, 0xc3, 0x43, 0x8d, 0x54, 0x1d, 0x86, 0x07, 0xf9, 0x84, 0x34, 0x3f, 0x6d, 0xc0, 0xd9, 0xdf, 0x3c, 0x38, 0xd0, 0x48, 0xd5, 0x61, 0x78, 0x90, 0x4f, 0x48, 0xf3, 0xd3, 0x06, 0xfc,
0xff, 0x08, 0x96, 0x0c, 0x2c, 0x3b, 0x45, 0x8c, 0x11, 0xc8, 0x9d, 0x22, 0x48, 0x65, 0x14, 0x39, 0x0f, 0x61, 0xc9, 0xc0, 0xb2, 0x53, 0xc4, 0x18, 0x81, 0xdc, 0x29, 0x82, 0x54, 0x46, 0x91, 0xe3,
0x4e, 0x07, 0x16, 0x1e, 0xf1, 0xf4, 0x71, 0x78, 0x1c, 0xa9, 0x9a, 0xfe, 0x7b, 0x1d, 0x16, 0x35, 0x74, 0x60, 0xe1, 0x11, 0x4f, 0x1f, 0x87, 0x47, 0x91, 0xaa, 0xe9, 0x7f, 0xd4, 0x61, 0x51, 0x43,
0x24, 0x2b, 0xba, 0x03, 0x8b, 0xc1, 0x80, 0x87, 0x69, 0x90, 0x5e, 0x78, 0x96, 0xbd, 0x20, 0x0f, 0xb2, 0xa2, 0x3b, 0xb0, 0x18, 0x0c, 0x78, 0x98, 0x06, 0xe9, 0xb9, 0x67, 0xd9, 0x0b, 0xf2, 0x30,
0xa3, 0xaa, 0xed, 0x0f, 0x03, 0x5f, 0xf9, 0x91, 0x44, 0x02, 0xcf, 0xcf, 0xa8, 0x03, 0x98, 0x76, 0xaa, 0xda, 0xfe, 0x30, 0xf0, 0x95, 0x1f, 0x49, 0x24, 0xf0, 0xfc, 0x8c, 0x3a, 0x80, 0x69, 0xb7,
0x1b, 0xa2, 0x2b, 0x61, 0xa6, 0x28, 0xcd, 0x43, 0x09, 0x84, 0xb8, 0xdc, 0x66, 0xf4, 0x27, 0x42, 0x21, 0xba, 0x12, 0x66, 0x8a, 0xd2, 0x3c, 0x94, 0x40, 0x88, 0xcb, 0x6d, 0x46, 0x7f, 0x22, 0x54,
0xe5, 0x2c, 0xcb, 0xc2, 0xa5, 0x12, 0x35, 0xe1, 0x90, 0x67, 0x84, 0x9e, 0xa0, 0x81, 0x82, 0xa3, 0xce, 0xb2, 0x2c, 0x5c, 0x2a, 0x51, 0x13, 0x0e, 0x79, 0x46, 0xe8, 0x09, 0x1a, 0x28, 0x38, 0x6a,
0x66, 0x56, 0xc8, 0xc7, 0xbc, 0xa3, 0xc6, 0x70, 0xf6, 0x34, 0x0a, 0xce, 0x1e, 0x94, 0x9f, 0x17, 0x66, 0x85, 0x7c, 0xcc, 0x3b, 0x6a, 0x0c, 0x67, 0x4f, 0xa3, 0xe0, 0xec, 0x41, 0xf9, 0x79, 0x1e,
0x61, 0x9f, 0x0f, 0xbc, 0x34, 0xf2, 0x48, 0xce, 0x13, 0x49, 0x34, 0xdc, 0x3c, 0x8c, 0xfb, 0x46, 0xf6, 0xf9, 0xc0, 0x4b, 0x23, 0x8f, 0xe4, 0x3c, 0x91, 0x44, 0xc3, 0xcd, 0xc3, 0xb8, 0x6f, 0xa4,
0xca, 0x93, 0x34, 0xe4, 0xc2, 0xe2, 0xdd, 0x20, 0x2b, 0xa8, 0x82, 0xf0, 0x7c, 0x30, 0x89, 0x83, 0x3c, 0x49, 0x43, 0x2e, 0x2c, 0xde, 0x0d, 0xb2, 0x82, 0x2a, 0x08, 0xcf, 0x07, 0x93, 0x38, 0x48,
0xa4, 0xdb, 0x26, 0x37, 0x0e, 0xfd, 0x66, 0xdf, 0x85, 0xcb, 0x47, 0x3c, 0x49, 0xbd, 0x53, 0xee, 0xba, 0x6d, 0x72, 0xe3, 0xd0, 0x6f, 0xf6, 0x3d, 0xb8, 0x7c, 0xc8, 0x93, 0xd4, 0x3b, 0xe1, 0xfe,
0x0f, 0x78, 0x4c, 0xe4, 0x25, 0xfc, 0x45, 0x42, 0xe5, 0x2a, 0xcf, 0x44, 0xc2, 0x3d, 0xe3, 0x71, 0x80, 0xc7, 0x44, 0x5e, 0xc2, 0x5f, 0x24, 0x54, 0xae, 0xf2, 0x4c, 0x24, 0xdc, 0x53, 0x1e, 0x27,
0x12, 0x44, 0x21, 0x29, 0x5b, 0x4d, 0x57, 0x25, 0xb1, 0x3e, 0x1c, 0xbc, 0xde, 0xa8, 0xf5, 0x0c, 0x41, 0x14, 0x92, 0xb2, 0xd5, 0x74, 0x55, 0x12, 0xeb, 0xc3, 0xc1, 0xeb, 0x8d, 0x5a, 0xcf, 0xe0,
0x2e, 0xd2, 0xc0, 0xcb, 0x33, 0xd9, 0x4d, 0x98, 0xa5, 0x01, 0x24, 0xdd, 0x0e, 0xd1, 0x4c, 0x3b, 0x22, 0x0d, 0xbc, 0x3c, 0x93, 0xdd, 0x84, 0x59, 0x1a, 0x40, 0xd2, 0xed, 0x10, 0xcd, 0xb4, 0x33,
0xe3, 0xf9, 0x20, 0x74, 0x65, 0x1e, 0xae, 0x72, 0x3f, 0x1a, 0x46, 0x31, 0x69, 0x5c, 0x4d, 0x57, 0x9e, 0x0f, 0x42, 0x57, 0xe6, 0xe1, 0x2a, 0xf7, 0xa3, 0x61, 0x14, 0x93, 0xc6, 0xd5, 0x74, 0x45,
0x24, 0xec, 0xd9, 0x39, 0x89, 0xfd, 0xf1, 0xa9, 0xd4, 0xba, 0xf2, 0xf0, 0x67, 0xf5, 0x46, 0xab, 0xc2, 0x9e, 0x9d, 0xe3, 0xd8, 0x1f, 0x9f, 0x48, 0xad, 0x2b, 0x0f, 0x7f, 0x5a, 0x6f, 0xb4, 0x3a,
0xd3, 0x76, 0xfe, 0x3f, 0x98, 0xa1, 0x6a, 0xa9, 0x3a, 0x9a, 0xcc, 0x8a, 0xac, 0x8e, 0xd0, 0x2e, 0x6d, 0xe7, 0xcf, 0xc1, 0x0c, 0x55, 0x4b, 0xd5, 0xd1, 0x64, 0x56, 0x64, 0x75, 0x84, 0x76, 0x61,
0xcc, 0x85, 0x3c, 0x3d, 0x8f, 0xe2, 0x97, 0xca, 0x29, 0x29, 0x93, 0xce, 0xcf, 0xe8, 0x84, 0xa6, 0x2e, 0xe4, 0xe9, 0x59, 0x14, 0xbf, 0x52, 0x4e, 0x49, 0x99, 0x74, 0x7e, 0x4e, 0x27, 0x34, 0xed,
0x9d, 0x74, 0xcf, 0x49, 0xb5, 0xc4, 0x73, 0xb6, 0x58, 0xaa, 0xe4, 0xd4, 0x97, 0x87, 0xc6, 0x06, 0xa4, 0x7b, 0x41, 0xaa, 0x25, 0x9e, 0xb3, 0xc5, 0x52, 0x25, 0x27, 0xbe, 0x3c, 0x34, 0x36, 0x08,
0x01, 0x87, 0xa7, 0x3e, 0xca, 0x5a, 0x6b, 0xf5, 0xc5, 0x39, 0xbc, 0x45, 0xd8, 0xae, 0x58, 0xfc, 0x38, 0x38, 0xf1, 0x51, 0xd6, 0x5a, 0xab, 0x2f, 0xce, 0xe1, 0x2d, 0xc2, 0x76, 0xc5, 0xe2, 0xdf,
0x9b, 0xb0, 0xa0, 0xdc, 0x7f, 0x89, 0x37, 0xe4, 0xc7, 0xa9, 0xb2, 0xa2, 0x85, 0x93, 0x11, 0x1d, 0x84, 0x05, 0xe5, 0xfe, 0x4b, 0xbc, 0x21, 0x3f, 0x4a, 0x95, 0x15, 0x2d, 0x9c, 0x8c, 0xe8, 0xb0,
0xd6, 0xf7, 0xf8, 0x71, 0xea, 0xec, 0xc3, 0x92, 0x94, 0x7f, 0x4f, 0xc7, 0x5c, 0x35, 0xfd, 0x1b, 0xfe, 0x84, 0x1f, 0xa5, 0xce, 0x1e, 0x2c, 0x49, 0xf9, 0xf7, 0x6c, 0xcc, 0x55, 0xd3, 0xbf, 0x51,
0x65, 0xba, 0x44, 0x6b, 0x63, 0xd9, 0x16, 0x98, 0xc2, 0xe1, 0x69, 0x97, 0x74, 0x5c, 0x60, 0xa6, 0xa6, 0x4b, 0xb4, 0x36, 0x96, 0x6d, 0x81, 0x29, 0x1c, 0x9e, 0x76, 0x49, 0xc7, 0x05, 0x66, 0xca,
0x3c, 0x95, 0x15, 0xca, 0xcd, 0x5c, 0xd9, 0x09, 0xe5, 0x70, 0x2c, 0x0c, 0xe7, 0x27, 0x99, 0xf4, 0x53, 0x59, 0xa1, 0xdc, 0xcc, 0x95, 0x9d, 0x50, 0x0e, 0xc7, 0xc2, 0x70, 0x7e, 0x92, 0x49, 0xbf,
0xfb, 0xca, 0x69, 0xdb, 0x70, 0x55, 0xd2, 0xf9, 0xf7, 0x15, 0x58, 0xa6, 0xda, 0x94, 0x36, 0x24, 0xaf, 0x9c, 0xb6, 0x0d, 0x57, 0x25, 0x9d, 0xff, 0x50, 0x81, 0x65, 0xaa, 0x4d, 0x69, 0x43, 0x72,
0xf7, 0xac, 0x8f, 0xbf, 0x46, 0x37, 0x95, 0x95, 0x56, 0xd8, 0x26, 0x57, 0x60, 0xc6, 0xdc, 0xc5, 0xcf, 0xfa, 0xe8, 0x2b, 0x74, 0x53, 0x59, 0x69, 0x85, 0x6d, 0x72, 0x05, 0x66, 0xcc, 0x5d, 0x4c,
0x44, 0xe2, 0xeb, 0xdb, 0x64, 0xea, 0x05, 0x9b, 0xcc, 0x5d, 0xe8, 0x0c, 0xf8, 0x30, 0x20, 0xc7, 0x24, 0xbe, 0xba, 0x4d, 0xa6, 0x5e, 0xb0, 0xc9, 0xdc, 0x85, 0xce, 0x80, 0x0f, 0x03, 0x72, 0xdc,
0xbd, 0xda, 0x13, 0x84, 0xea, 0x53, 0xc0, 0x9d, 0xbf, 0x53, 0x81, 0x25, 0xb1, 0xe9, 0x90, 0x66, 0xab, 0x3d, 0x41, 0xa8, 0x3e, 0x05, 0xdc, 0xf9, 0x3b, 0x15, 0x58, 0x12, 0x9b, 0x0e, 0x69, 0xe6,
0x2e, 0xa7, 0xea, 0xff, 0x87, 0x79, 0xa1, 0x3d, 0x48, 0x09, 0x22, 0x07, 0x95, 0x89, 0x61, 0x42, 0x72, 0xaa, 0xfe, 0x3c, 0xcc, 0x0b, 0xed, 0x41, 0x4a, 0x10, 0x39, 0xa8, 0x4c, 0x0c, 0x13, 0x2a,
0x45, 0xe1, 0xdd, 0x4b, 0xae, 0x5d, 0x98, 0x7d, 0x4a, 0x1a, 0x5c, 0xe8, 0x11, 0x5a, 0x12, 0x0a, 0x0a, 0xef, 0x5e, 0x72, 0xed, 0xc2, 0xec, 0x13, 0xd2, 0xe0, 0x42, 0x8f, 0xd0, 0x92, 0x50, 0x00,
0x60, 0xaf, 0xcb, 0xee, 0x25, 0xd7, 0x28, 0xfe, 0xa0, 0x81, 0x8a, 0x35, 0xe2, 0xce, 0x23, 0x98, 0x7b, 0x5d, 0x76, 0x2f, 0xb9, 0x46, 0xf1, 0x07, 0x0d, 0x54, 0xac, 0x11, 0x77, 0x1e, 0xc1, 0xbc,
0xb7, 0x1a, 0xb2, 0x6c, 0x47, 0x6d, 0x61, 0x3b, 0x2a, 0x18, 0x69, 0xab, 0x25, 0x46, 0xda, 0x7f, 0xd5, 0x90, 0x65, 0x3b, 0x6a, 0x0b, 0xdb, 0x51, 0xc1, 0x48, 0x5b, 0x2d, 0x31, 0xd2, 0xfe, 0xb3,
0x56, 0x03, 0x86, 0x84, 0x95, 0x5b, 0xb9, 0x1b, 0xb6, 0xa7, 0x43, 0x45, 0x05, 0x64, 0x10, 0xdb, 0x1a, 0x30, 0x24, 0xac, 0xdc, 0xca, 0xdd, 0xb0, 0x3d, 0x1d, 0x2a, 0x2a, 0x20, 0x83, 0xd8, 0x06,
0x00, 0x66, 0x24, 0x95, 0x07, 0xa6, 0xa6, 0x3d, 0x30, 0x25, 0xb9, 0x28, 0x96, 0xa5, 0x86, 0xa2, 0x30, 0x23, 0xa9, 0x3c, 0x30, 0x35, 0xed, 0x81, 0x29, 0xc9, 0x45, 0xb1, 0x2c, 0x35, 0x14, 0xed,
0xbd, 0x1b, 0x64, 0x17, 0x10, 0xcb, 0x54, 0x9a, 0x87, 0xbb, 0x28, 0xb9, 0x3a, 0xf0, 0x04, 0x23, 0xdd, 0x20, 0xbb, 0x80, 0x58, 0xa6, 0xd2, 0x3c, 0xdc, 0x45, 0xc9, 0xd5, 0x81, 0x27, 0x18, 0x79,
0xcf, 0xd2, 0x2a, 0x9d, 0xa7, 0x87, 0xd9, 0x37, 0xd2, 0xc3, 0x5c, 0x81, 0x1e, 0x8c, 0xd3, 0x5c, 0x96, 0x56, 0xe9, 0x3c, 0x3d, 0xcc, 0xbe, 0x95, 0x1e, 0xe6, 0x0a, 0xf4, 0x60, 0x9c, 0xe6, 0x1a,
0xc3, 0x3e, 0xcd, 0xdd, 0x84, 0x79, 0xe5, 0xd1, 0x10, 0x4e, 0x59, 0x79, 0x74, 0xb6, 0x40, 0xa4, 0xf6, 0x69, 0xee, 0x26, 0xcc, 0x2b, 0x8f, 0x86, 0x70, 0xca, 0xca, 0xa3, 0xb3, 0x05, 0x22, 0x3d,
0x27, 0x75, 0xa0, 0xd2, 0x47, 0x46, 0xe1, 0x72, 0x2c, 0xe0, 0xb8, 0x5f, 0x64, 0x56, 0xbb, 0x16, 0xa9, 0x03, 0x95, 0x3e, 0x32, 0x0a, 0x97, 0x63, 0x01, 0xc7, 0xfd, 0x22, 0xb3, 0xda, 0xb5, 0xa8,
0x75, 0x36, 0x03, 0xe8, 0xfc, 0x85, 0x54, 0xe2, 0x4d, 0x42, 0x19, 0x11, 0xc0, 0x07, 0x74, 0x68, 0xb3, 0x19, 0x40, 0xe7, 0x2f, 0xa4, 0x12, 0x6f, 0x12, 0xca, 0x88, 0x00, 0x3e, 0xa0, 0x43, 0x33,
0xc6, 0xf3, 0x57, 0x3e, 0xc3, 0xf9, 0x9b, 0x15, 0xe8, 0xe0, 0xba, 0x59, 0xa4, 0xf9, 0x09, 0x10, 0x9e, 0xbf, 0xf2, 0x19, 0xce, 0xdf, 0xac, 0x40, 0x07, 0xd7, 0xcd, 0x22, 0xcd, 0x8f, 0x81, 0xb8,
0x17, 0xbd, 0x25, 0x65, 0x5a, 0x65, 0xd9, 0xc7, 0xd0, 0xa4, 0x74, 0x34, 0xe6, 0xa1, 0xa4, 0xcb, 0xe8, 0x82, 0x94, 0x69, 0x95, 0x65, 0x1f, 0x41, 0x93, 0xd2, 0xd1, 0x98, 0x87, 0x92, 0x2e, 0xbb,
0xae, 0x4d, 0x97, 0x99, 0xfc, 0xd9, 0xbd, 0xe4, 0x66, 0x85, 0x0d, 0xaa, 0xfc, 0xb7, 0x15, 0x68, 0x36, 0x5d, 0x66, 0xf2, 0x67, 0xf7, 0x92, 0x9b, 0x15, 0x36, 0xa8, 0xf2, 0xdf, 0x55, 0xa0, 0x25,
0xc9, 0x56, 0x7e, 0x69, 0xab, 0x50, 0xcf, 0x08, 0xe1, 0x10, 0xca, 0x5a, 0x16, 0xb1, 0x71, 0x07, 0x5b, 0xf9, 0x95, 0xad, 0x42, 0x3d, 0x23, 0x84, 0x43, 0x28, 0x6b, 0x59, 0xc4, 0xc6, 0x1d, 0x58,
0x16, 0x47, 0x7e, 0x3a, 0x89, 0x71, 0xff, 0xb7, 0x2c, 0x42, 0x79, 0x18, 0x37, 0x73, 0x12, 0xb5, 0x1c, 0xf9, 0xe9, 0x24, 0xc6, 0xfd, 0xdf, 0xb2, 0x08, 0xe5, 0x61, 0xdc, 0xcc, 0x49, 0xd4, 0x26,
0x89, 0x97, 0x06, 0x43, 0x4f, 0xe5, 0xca, 0x60, 0x89, 0xb2, 0x2c, 0x94, 0x38, 0x49, 0xea, 0x9f, 0x5e, 0x1a, 0x0c, 0x3d, 0x95, 0x2b, 0x83, 0x25, 0xca, 0xb2, 0x50, 0xe2, 0x24, 0xa9, 0x7f, 0xcc,
0x70, 0xb9, 0x4f, 0x8b, 0x84, 0xd3, 0x85, 0xd5, 0x83, 0xcc, 0xcb, 0x63, 0xe8, 0xe3, 0xce, 0x3f, 0xe5, 0x3e, 0x2d, 0x12, 0x4e, 0x17, 0x56, 0xf7, 0x33, 0x2f, 0x8f, 0xa1, 0x8f, 0x3b, 0xff, 0x64,
0x99, 0x87, 0xb5, 0x42, 0x96, 0x0e, 0xed, 0x92, 0x66, 0x8e, 0x61, 0x30, 0x3a, 0x8a, 0xf4, 0x61, 0x1e, 0xd6, 0x0a, 0x59, 0x3a, 0xb4, 0x4b, 0x9a, 0x39, 0x86, 0xc1, 0xe8, 0x30, 0xd2, 0x87, 0x99,
0xa6, 0x62, 0x5a, 0x40, 0xac, 0x2c, 0x76, 0x02, 0x97, 0x95, 0x42, 0x82, 0x73, 0x9a, 0x6d, 0x9e, 0x8a, 0x69, 0x01, 0xb1, 0xb2, 0xd8, 0x31, 0x5c, 0x56, 0x0a, 0x09, 0xce, 0x69, 0xb6, 0x79, 0x56,
0x55, 0xda, 0x15, 0x3f, 0xb4, 0x97, 0x30, 0xdf, 0xa0, 0xc2, 0x4d, 0x46, 0x2e, 0xaf, 0x8f, 0x9d, 0x69, 0x57, 0xfc, 0xc0, 0x5e, 0xc2, 0x7c, 0x83, 0x0a, 0x37, 0x19, 0xb9, 0xbc, 0x3e, 0x76, 0x02,
0x42, 0x57, 0x6b, 0x3e, 0x52, 0xb8, 0x1b, 0xda, 0x11, 0xb6, 0xf5, 0xc1, 0x1b, 0xda, 0xb2, 0xd4, 0x5d, 0xad, 0xf9, 0x48, 0xe1, 0x6e, 0x68, 0x47, 0xd8, 0xd6, 0xfb, 0x6f, 0x69, 0xcb, 0x52, 0xdf,
0x77, 0x77, 0x6a, 0x6d, 0xec, 0x02, 0xae, 0xab, 0x3c, 0x92, 0xde, 0xc5, 0xf6, 0xea, 0x6f, 0x35, 0xdd, 0xa9, 0xb5, 0xb1, 0x73, 0xb8, 0xae, 0xf2, 0x48, 0x7a, 0x17, 0xdb, 0xab, 0x5f, 0x68, 0x6c,
0x36, 0x3a, 0x98, 0xd8, 0x8d, 0xbe, 0xa1, 0x62, 0xf6, 0x53, 0x58, 0x3d, 0xf7, 0x83, 0x54, 0x75, 0x74, 0x30, 0xb1, 0x1b, 0x7d, 0x4b, 0xc5, 0xec, 0x67, 0xb0, 0x7a, 0xe6, 0x07, 0xa9, 0xea, 0x96,
0xcb, 0xd0, 0x45, 0x66, 0xa8, 0xc9, 0x8d, 0x37, 0x34, 0xf9, 0x42, 0x7c, 0x6c, 0x6d, 0x69, 0x53, 0xa1, 0x8b, 0xcc, 0x50, 0x93, 0x1b, 0x6f, 0x69, 0xf2, 0xa5, 0xf8, 0xd8, 0xda, 0xd2, 0xa6, 0xd4,
0x6a, 0xec, 0xfd, 0x71, 0x15, 0x16, 0xec, 0x7a, 0x90, 0x4c, 0x25, 0xef, 0x2b, 0x19, 0xa8, 0xb4, 0xd8, 0xfb, 0xa3, 0x2a, 0x2c, 0xd8, 0xf5, 0x20, 0x99, 0x4a, 0xde, 0x57, 0x32, 0x50, 0x69, 0xaf,
0xd7, 0x1c, 0x5c, 0xb4, 0x09, 0x54, 0xcb, 0x6c, 0x02, 0xe6, 0x29, 0xbc, 0xf6, 0x26, 0x73, 0x62, 0x39, 0xb8, 0x68, 0x13, 0xa8, 0x96, 0xd9, 0x04, 0xcc, 0x53, 0x78, 0xed, 0x6d, 0xe6, 0xc4, 0xfa,
0xfd, 0xed, 0xcc, 0x89, 0x33, 0xa5, 0xe6, 0xc4, 0xe9, 0x56, 0xa7, 0xd9, 0x5f, 0xd6, 0xea, 0x34, 0xc5, 0xcc, 0x89, 0x33, 0xa5, 0xe6, 0xc4, 0xe9, 0x56, 0xa7, 0xd9, 0x5f, 0xd5, 0xea, 0x34, 0xf7,
0xf7, 0x5a, 0xab, 0x53, 0xef, 0xff, 0x54, 0x80, 0x15, 0xa9, 0x97, 0x3d, 0x12, 0x66, 0x90, 0x90, 0x46, 0xab, 0x53, 0xef, 0xff, 0x56, 0x80, 0x15, 0xa9, 0x97, 0x3d, 0x12, 0x66, 0x90, 0x90, 0x0f,
0x0f, 0xa5, 0x10, 0xfb, 0xf6, 0xdb, 0x71, 0x80, 0x5a, 0x2d, 0xf5, 0x35, 0xb2, 0xa2, 0x19, 0x5f, 0xa5, 0x10, 0xfb, 0xce, 0xc5, 0x38, 0x40, 0xad, 0x96, 0xfa, 0x1a, 0x59, 0xd1, 0x8c, 0xaf, 0x32,
0x65, 0xaa, 0x63, 0xf3, 0x6e, 0x59, 0x56, 0xce, 0xa4, 0x5a, 0x7f, 0xb3, 0x49, 0x75, 0xe6, 0xcd, 0xd5, 0xb1, 0x79, 0xb7, 0x2c, 0x2b, 0x67, 0x52, 0xad, 0xbf, 0xdd, 0xa4, 0x3a, 0xf3, 0x76, 0x93,
0x26, 0xd5, 0xd9, 0xbc, 0x49, 0xb5, 0xf7, 0x57, 0x2b, 0xb0, 0x5c, 0x42, 0x66, 0xbf, 0xbe, 0x81, 0xea, 0x6c, 0xde, 0xa4, 0xda, 0xfb, 0xab, 0x15, 0x58, 0x2e, 0x21, 0xb3, 0xaf, 0x6f, 0xe0, 0x48,
0x23, 0x61, 0x58, 0xd2, 0xa7, 0x2a, 0x09, 0xc3, 0x04, 0x7b, 0x7f, 0x09, 0xe6, 0x2d, 0xd6, 0xfa, 0x18, 0x96, 0xf4, 0xa9, 0x4a, 0xc2, 0x30, 0xc1, 0xde, 0x5f, 0x82, 0x79, 0x8b, 0xb5, 0xbe, 0xbe,
0xf5, 0xb5, 0x9f, 0xd7, 0x28, 0x05, 0x65, 0x5b, 0x58, 0xef, 0x7f, 0x56, 0x81, 0x15, 0xd9, 0xfb, 0xf6, 0xf3, 0x1a, 0xa5, 0xa0, 0x6c, 0x0b, 0xeb, 0xfd, 0xaf, 0x2a, 0xb0, 0x22, 0x7b, 0xff, 0x99,
0xcf, 0xb5, 0x0f, 0xc5, 0x79, 0xaa, 0x95, 0xcc, 0xd3, 0xff, 0xd3, 0x9d, 0xe7, 0x03, 0x58, 0x92, 0xf6, 0xa1, 0x38, 0x4f, 0xb5, 0x92, 0x79, 0xfa, 0xff, 0xba, 0xf3, 0xbc, 0x0f, 0x4b, 0x32, 0x68,
0x41, 0xa3, 0x86, 0xe1, 0x4b, 0x50, 0x4c, 0x31, 0x03, 0x75, 0x6a, 0xdb, 0x9e, 0xdd, 0xb0, 0x82, 0xd4, 0x30, 0x7c, 0x09, 0x8a, 0x29, 0x66, 0xa0, 0x4e, 0x6d, 0xdb, 0xb3, 0x1b, 0x56, 0x90, 0x9c,
0xe4, 0x8c, 0xed, 0x37, 0x67, 0xd6, 0x76, 0x7a, 0xd0, 0x95, 0x33, 0xb4, 0x73, 0xc6, 0xc3, 0xf4, 0xb1, 0xfd, 0xe6, 0xcc, 0xda, 0x4e, 0x0f, 0xba, 0x72, 0x86, 0x76, 0x4e, 0x79, 0x98, 0x1e, 0x4c,
0x70, 0x72, 0x24, 0xa2, 0x26, 0x83, 0x28, 0x24, 0x35, 0xd0, 0xcc, 0x94, 0x0a, 0xc5, 0x77, 0xa1, 0x0e, 0x45, 0xd4, 0x64, 0x10, 0x85, 0xa4, 0x06, 0x9a, 0x99, 0x52, 0xa1, 0xf8, 0x1e, 0xb4, 0xcd,
0x6d, 0x6e, 0x1f, 0x72, 0x39, 0x72, 0xb6, 0x4f, 0x54, 0x25, 0xcc, 0x52, 0x6c, 0x1b, 0x16, 0x48, 0xed, 0x43, 0x2e, 0x47, 0xce, 0xf6, 0x89, 0xaa, 0x84, 0x59, 0x8a, 0x6d, 0xc3, 0x02, 0x09, 0xc9,
0x48, 0x0e, 0xf4, 0x77, 0x55, 0xfa, 0xee, 0x35, 0xf6, 0x9c, 0xdd, 0x4b, 0x6e, 0xee, 0x1b, 0xf6, 0x81, 0xfe, 0xae, 0x4a, 0xdf, 0xbd, 0xc1, 0x9e, 0xb3, 0x7b, 0xc9, 0xcd, 0x7d, 0xc3, 0x7e, 0x13,
0x9b, 0xb0, 0x60, 0x1f, 0x16, 0xa5, 0x56, 0x52, 0x76, 0x7a, 0xc0, 0xcf, 0xed, 0xc2, 0x6c, 0x13, 0x16, 0xec, 0xc3, 0xa2, 0xd4, 0x4a, 0xca, 0x4e, 0x0f, 0xf8, 0xb9, 0x5d, 0x98, 0x6d, 0x42, 0x27,
0x3a, 0xf9, 0xd3, 0xa6, 0x8c, 0xfc, 0x99, 0x52, 0x41, 0xa1, 0x38, 0xfb, 0x58, 0x3a, 0x37, 0x67, 0x7f, 0xda, 0x94, 0x91, 0x3f, 0x53, 0x2a, 0x28, 0x14, 0x67, 0x1f, 0x49, 0xe7, 0xe6, 0x0c, 0xd9,
0xc8, 0xce, 0x72, 0xd3, 0xfe, 0xcc, 0x98, 0xa6, 0x75, 0xf1, 0xc7, 0x70, 0x77, 0xfe, 0x0e, 0x40, 0x59, 0x6e, 0xda, 0x9f, 0x19, 0xd3, 0xb4, 0x2e, 0xfe, 0x18, 0xee, 0xce, 0xdf, 0x01, 0xc8, 0x30,
0x86, 0xb1, 0x0e, 0xb4, 0x9f, 0x1e, 0xec, 0xec, 0x7b, 0x5b, 0xbb, 0x9b, 0xfb, 0xfb, 0x3b, 0x7b, 0xd6, 0x81, 0xf6, 0xb3, 0xfd, 0x9d, 0x3d, 0x6f, 0x6b, 0x77, 0x73, 0x6f, 0x6f, 0xe7, 0x49, 0xe7,
0x9d, 0x4b, 0x8c, 0xc1, 0x02, 0x99, 0x05, 0xb7, 0x35, 0x56, 0x41, 0x4c, 0x1a, 0x62, 0x14, 0x56, 0x12, 0x63, 0xb0, 0x40, 0x66, 0xc1, 0x6d, 0x8d, 0x55, 0x10, 0x93, 0x86, 0x18, 0x85, 0x55, 0xd9,
0x65, 0x2b, 0xd0, 0x79, 0xbc, 0x9f, 0x43, 0x6b, 0x0f, 0x9a, 0x9a, 0x3f, 0x9c, 0x55, 0x58, 0x11, 0x0a, 0x74, 0x1e, 0xef, 0xe5, 0xd0, 0xda, 0x83, 0xa6, 0xe6, 0x0f, 0x67, 0x15, 0x56, 0x44, 0x50,
0x41, 0xc1, 0x0f, 0x04, 0x79, 0x28, 0xed, 0xe4, 0x1f, 0x54, 0xe0, 0x72, 0x2e, 0x23, 0x0b, 0x0f, 0xf0, 0x03, 0x41, 0x1e, 0x4a, 0x3b, 0xf9, 0x07, 0x15, 0xb8, 0x9c, 0xcb, 0xc8, 0xc2, 0xc3, 0x84,
0x13, 0x0a, 0x88, 0xad, 0x95, 0xd8, 0x20, 0x39, 0x2b, 0x94, 0xae, 0x99, 0x93, 0x20, 0xc5, 0x0c, 0x02, 0x62, 0x6b, 0x25, 0x36, 0x48, 0xce, 0x0a, 0xa5, 0x6b, 0xe6, 0x24, 0x48, 0x31, 0x03, 0x69,
0xa4, 0x79, 0x43, 0x37, 0xcd, 0x71, 0x52, 0x59, 0x96, 0xb3, 0xa6, 0xa3, 0x70, 0x72, 0x1d, 0x3f, 0xde, 0xd0, 0x4d, 0x73, 0x9c, 0x54, 0x96, 0xe5, 0xac, 0xe9, 0x28, 0x9c, 0x5c, 0xc7, 0x8f, 0x44,
0x16, 0xc1, 0xc6, 0x66, 0x46, 0xe6, 0x2c, 0xb6, 0xbb, 0xac, 0x92, 0x78, 0xac, 0xb0, 0x94, 0x1d, 0xb0, 0xb1, 0x99, 0x91, 0x39, 0x8b, 0xed, 0x2e, 0xab, 0x24, 0x1e, 0x2b, 0x2c, 0x65, 0xc7, 0xee,
0xbb, 0xbf, 0xa5, 0x79, 0xce, 0xff, 0xaa, 0x03, 0xfb, 0xfe, 0x84, 0xc7, 0x17, 0x14, 0xff, 0xa5, 0x6f, 0x69, 0x9e, 0xf3, 0xbf, 0xeb, 0xc0, 0x7e, 0x30, 0xe1, 0xf1, 0x39, 0xc5, 0x7f, 0x69, 0x2b,
0xad, 0xac, 0x6b, 0x79, 0x1b, 0xe2, 0xec, 0x78, 0x72, 0xf4, 0x39, 0xbf, 0x50, 0xf1, 0x9a, 0xd5, 0xeb, 0x5a, 0xde, 0x86, 0x38, 0x3b, 0x9e, 0x1c, 0x7e, 0xc6, 0xcf, 0x55, 0xbc, 0x66, 0xf5, 0x42,
0xb7, 0x8a, 0xd7, 0x2c, 0x8b, 0x97, 0xac, 0xbf, 0x39, 0x5e, 0x72, 0xe6, 0x4d, 0xf1, 0x92, 0xdf, 0xf1, 0x9a, 0x65, 0xf1, 0x92, 0xf5, 0xb7, 0xc7, 0x4b, 0xce, 0xbc, 0x2d, 0x5e, 0xf2, 0x1b, 0x30,
0x80, 0xf9, 0xe0, 0x24, 0x8c, 0x50, 0x1c, 0xa0, 0x0a, 0x91, 0x74, 0x67, 0x6f, 0xd4, 0xf0, 0x98, 0x1f, 0x1c, 0x87, 0x11, 0x8a, 0x03, 0x54, 0x21, 0x92, 0xee, 0xec, 0x8d, 0x1a, 0x1e, 0xd3, 0x25,
0x2e, 0xc1, 0x7d, 0xc4, 0xd8, 0xa7, 0x59, 0x21, 0x3e, 0x38, 0xa1, 0xf8, 0x5e, 0x53, 0x40, 0xec, 0xb8, 0x87, 0x18, 0xfb, 0x24, 0x2b, 0xc4, 0x07, 0xc7, 0x14, 0xdf, 0x6b, 0x0a, 0x88, 0x9d, 0xc1,
0x0c, 0x4e, 0xf8, 0x5e, 0xd4, 0xf7, 0xd3, 0x28, 0xa6, 0x73, 0x9a, 0xfa, 0x18, 0xf1, 0x84, 0xdd, 0x31, 0x7f, 0x12, 0xf5, 0xfd, 0x34, 0x8a, 0xe9, 0x9c, 0xa6, 0x3e, 0x46, 0x3c, 0x61, 0x37, 0x61,
0x84, 0x85, 0x24, 0x9a, 0xa0, 0x52, 0xa5, 0xa6, 0x41, 0x18, 0xa5, 0xda, 0x02, 0x3d, 0x10, 0x93, 0x21, 0x89, 0x26, 0xa8, 0x54, 0xa9, 0x69, 0x10, 0x46, 0xa9, 0xb6, 0x40, 0xf7, 0xc5, 0x64, 0xac,
0xb1, 0x0e, 0xcb, 0x93, 0x84, 0x7b, 0xa3, 0x20, 0x49, 0x70, 0xe3, 0xec, 0x47, 0x61, 0x1a, 0x47, 0xc3, 0xf2, 0x24, 0xe1, 0xde, 0x28, 0x48, 0x12, 0xdc, 0x38, 0xfb, 0x51, 0x98, 0xc6, 0xd1, 0x50,
0x43, 0x69, 0x9a, 0x5a, 0x9a, 0x24, 0xfc, 0x89, 0xc8, 0xd9, 0x12, 0x19, 0xec, 0xbb, 0x59, 0x97, 0x9a, 0xa6, 0x96, 0x26, 0x09, 0x7f, 0x2a, 0x72, 0xb6, 0x44, 0x06, 0xfb, 0x5e, 0xd6, 0xa5, 0xb1,
0xc6, 0x7e, 0x10, 0x27, 0x5d, 0xa0, 0x2e, 0xa9, 0x91, 0x62, 0xbf, 0x0f, 0xfc, 0x20, 0xd6, 0x7d, 0x1f, 0xc4, 0x49, 0x17, 0xa8, 0x4b, 0x6a, 0xa4, 0xd8, 0xef, 0x7d, 0x3f, 0x88, 0x75, 0x5f, 0x30,
0xc1, 0x44, 0x92, 0x8b, 0xe3, 0x6c, 0xe5, 0xe3, 0x38, 0x7f, 0x52, 0x1e, 0xc7, 0x39, 0x4f, 0x55, 0x91, 0xe4, 0xe2, 0x38, 0x5b, 0xf9, 0x38, 0xce, 0x9f, 0x96, 0xc7, 0x71, 0xce, 0x53, 0xd5, 0xf7,
0xdf, 0x97, 0x55, 0x17, 0x97, 0xf8, 0xed, 0xc3, 0x39, 0x7f, 0x3d, 0x01, 0x9a, 0x32, 0xa6, 0x70, 0x65, 0xd5, 0xc5, 0x25, 0xbe, 0x78, 0x38, 0xe7, 0xd7, 0x13, 0xa0, 0x29, 0x63, 0x0a, 0xd7, 0xa1,
0x1d, 0x1a, 0x6a, 0x98, 0x78, 0x56, 0x3f, 0x8e, 0xa3, 0x91, 0x3a, 0xab, 0xe3, 0x6f, 0xb6, 0x00, 0xa1, 0x86, 0x89, 0x67, 0xf5, 0xa3, 0x38, 0x1a, 0xa9, 0xb3, 0x3a, 0xfe, 0x66, 0x0b, 0x50, 0x4d,
0xd5, 0x34, 0x92, 0x1f, 0x57, 0xd3, 0xc8, 0xf9, 0x5d, 0x68, 0x19, 0x2b, 0xc5, 0xde, 0x13, 0x66, 0x23, 0xf9, 0x71, 0x35, 0x8d, 0x9c, 0xdf, 0x85, 0x96, 0xb1, 0x52, 0xec, 0x3d, 0x61, 0x36, 0x40,
0x03, 0xd4, 0x09, 0xe5, 0x21, 0x5f, 0x78, 0x86, 0x9a, 0x12, 0x7d, 0x3c, 0x60, 0xdf, 0x82, 0xa5, 0x9d, 0x50, 0x1e, 0xf2, 0x85, 0x67, 0xa8, 0x29, 0xd1, 0xc7, 0x03, 0xf6, 0x6d, 0x58, 0x1a, 0x04,
0x41, 0x10, 0x73, 0x0a, 0x89, 0xf6, 0x62, 0x7e, 0xc6, 0xe3, 0x44, 0x99, 0x4f, 0x3a, 0x3a, 0xc3, 0x31, 0xa7, 0x90, 0x68, 0x2f, 0xe6, 0xa7, 0x3c, 0x4e, 0x94, 0xf9, 0xa4, 0xa3, 0x33, 0x5c, 0x81,
0x15, 0xb8, 0xe3, 0xc1, 0xb2, 0x35, 0x35, 0x5a, 0x38, 0xcc, 0x52, 0x20, 0xa4, 0xb2, 0xe0, 0xda, 0x3b, 0x1e, 0x2c, 0x5b, 0x53, 0xa3, 0x85, 0xc3, 0x2c, 0x05, 0x42, 0x2a, 0x0b, 0xae, 0x1d, 0x24,
0x41, 0x92, 0x32, 0x0f, 0xb7, 0x55, 0x69, 0xf9, 0xf1, 0xc6, 0x71, 0x74, 0x44, 0x8d, 0x54, 0x5c, 0x29, 0xf3, 0x70, 0x5b, 0x95, 0x96, 0x1f, 0x6f, 0x1c, 0x47, 0x87, 0xd4, 0x48, 0xc5, 0xb5, 0x30,
0x0b, 0x73, 0xfe, 0x47, 0x0d, 0x6a, 0xbb, 0xd1, 0xd8, 0xf4, 0x67, 0x55, 0x8a, 0xfe, 0x2c, 0xa9, 0xe7, 0x7f, 0xd6, 0xa0, 0xb6, 0x1b, 0x8d, 0x4d, 0x7f, 0x56, 0xa5, 0xe8, 0xcf, 0x92, 0xfa, 0xaf,
0xff, 0x7a, 0x5a, 0xbd, 0x95, 0x4a, 0x8a, 0x05, 0xb2, 0xbb, 0xb0, 0x80, 0x9c, 0x96, 0x46, 0xa8, 0xa7, 0xd5, 0x5b, 0xa9, 0xa4, 0x58, 0x20, 0xbb, 0x0b, 0x0b, 0xc8, 0x69, 0x69, 0x84, 0xfa, 0xfe,
0xef, 0x9f, 0xfb, 0xb1, 0x88, 0x9a, 0xac, 0x11, 0xf9, 0xe6, 0x72, 0xd8, 0x0a, 0xd4, 0xb4, 0xda, 0x99, 0x1f, 0x8b, 0xa8, 0xc9, 0x1a, 0x91, 0x6f, 0x2e, 0x87, 0xad, 0x40, 0x4d, 0xab, 0x6d, 0x54,
0x46, 0x05, 0x30, 0x89, 0x87, 0x4d, 0x8a, 0x19, 0xb8, 0x90, 0x66, 0x5a, 0x99, 0x42, 0xc1, 0x65, 0x00, 0x93, 0x78, 0xd8, 0xa4, 0x98, 0x81, 0x73, 0x69, 0xa6, 0x95, 0x29, 0x14, 0x5c, 0xf6, 0xf7,
0x7f, 0x2f, 0xd8, 0x59, 0x6c, 0xbe, 0x65, 0x59, 0xa8, 0x8b, 0x23, 0xc3, 0x8e, 0x32, 0xd5, 0x56, 0x82, 0x9d, 0xc5, 0xe6, 0x5b, 0x96, 0x85, 0xba, 0x38, 0x32, 0xec, 0x28, 0x53, 0x6d, 0x75, 0xda,
0xa7, 0x4d, 0x07, 0x44, 0xc3, 0x76, 0x40, 0xdc, 0x80, 0x56, 0x3a, 0x3c, 0xf3, 0xc6, 0xfe, 0xc5, 0x74, 0x40, 0x34, 0x6c, 0x07, 0xc4, 0x0d, 0x68, 0xa5, 0xc3, 0x53, 0x6f, 0xec, 0x9f, 0x0f, 0x23,
0x30, 0xf2, 0x07, 0x92, 0x51, 0x4c, 0x88, 0xdd, 0x07, 0x18, 0x8d, 0xc7, 0x92, 0x8a, 0xc9, 0x82, 0x7f, 0x20, 0x19, 0xc5, 0x84, 0xd8, 0x7d, 0x80, 0xd1, 0x78, 0x2c, 0xa9, 0x98, 0x2c, 0x08, 0xad,
0xd0, 0xda, 0xe8, 0xc8, 0xd9, 0x7f, 0x72, 0x70, 0x20, 0xa8, 0xcf, 0x35, 0xca, 0xb0, 0x1d, 0x58, 0x8d, 0x8e, 0x9c, 0xfd, 0xa7, 0xfb, 0xfb, 0x82, 0xfa, 0x5c, 0xa3, 0x0c, 0xdb, 0x81, 0x85, 0xd2,
0x28, 0x0d, 0x61, 0xbe, 0xa6, 0x3c, 0xdb, 0xd1, 0x78, 0xbd, 0x84, 0xce, 0x73, 0x1f, 0xf5, 0x7e, 0x10, 0xe6, 0x6b, 0xca, 0xb3, 0x1d, 0x8d, 0xd7, 0x4b, 0xe8, 0x3c, 0xf7, 0x51, 0xef, 0xb7, 0x81,
0x1b, 0xd8, 0xaf, 0x18, 0x81, 0xfc, 0x02, 0x9a, 0xba, 0x87, 0x66, 0xdc, 0x2f, 0x85, 0xaf, 0xb4, 0xfd, 0x9a, 0x11, 0xc8, 0x2f, 0xa1, 0xa9, 0x7b, 0x68, 0xc6, 0xfd, 0x52, 0xf8, 0x4a, 0xcb, 0x8e,
0xec, 0xb8, 0x5f, 0x8a, 0x56, 0xb9, 0x05, 0x0b, 0x62, 0xb7, 0xd1, 0xf2, 0x53, 0x84, 0x1c, 0xe4, 0xfb, 0xa5, 0x68, 0x95, 0x5b, 0xb0, 0x20, 0x76, 0x1b, 0x2d, 0x3f, 0x45, 0xc8, 0x41, 0x0e, 0x75,
0x50, 0xe7, 0xcf, 0x2a, 0x30, 0x43, 0x94, 0x87, 0xea, 0x97, 0xc8, 0xd3, 0x8e, 0x40, 0xea, 0xda, 0xfe, 0xb4, 0x02, 0x33, 0x44, 0x79, 0xa8, 0x7e, 0x89, 0x3c, 0xed, 0x08, 0xa4, 0xae, 0xcd, 0xbb,
0xbc, 0x9b, 0x87, 0x99, 0x63, 0x5d, 0x6d, 0xa8, 0x6a, 0x32, 0x30, 0xaf, 0x37, 0xdc, 0x80, 0xa6, 0x79, 0x98, 0x39, 0xd6, 0xd5, 0x86, 0xaa, 0x26, 0x03, 0xf3, 0x7a, 0xc3, 0x0d, 0x68, 0xea, 0x96,
0x6e, 0xc9, 0x20, 0xa5, 0x0c, 0x64, 0xd7, 0xa1, 0x7e, 0x1a, 0x8d, 0xd5, 0x09, 0x15, 0xb2, 0x19, 0x0c, 0x52, 0xca, 0x40, 0x76, 0x1d, 0xea, 0x27, 0xd1, 0x58, 0x9d, 0x50, 0x21, 0x9b, 0x51, 0x97,
0x75, 0x09, 0xcf, 0xfa, 0x83, 0xf5, 0x89, 0x21, 0x88, 0x53, 0x40, 0x1e, 0x2e, 0x19, 0xeb, 0x6c, 0xf0, 0xac, 0x3f, 0x58, 0x9f, 0x18, 0x82, 0x38, 0x05, 0xe4, 0xe1, 0x92, 0xb1, 0xce, 0x96, 0x8e,
0xe9, 0x58, 0x9f, 0xc3, 0x22, 0xca, 0x07, 0xc3, 0x31, 0x32, 0x7d, 0x2f, 0x7a, 0x1f, 0x55, 0x9b, 0xf5, 0x05, 0x2c, 0xa2, 0x7c, 0x30, 0x1c, 0x23, 0xd3, 0xf7, 0xa2, 0x6f, 0xa1, 0x6a, 0xd3, 0x1f,
0xfe, 0x70, 0x32, 0xe0, 0xa6, 0x9d, 0x80, 0x0c, 0xdf, 0x12, 0x57, 0x1a, 0xb2, 0xf3, 0x4f, 0x2b, 0x4e, 0x06, 0xdc, 0xb4, 0x13, 0x90, 0xe1, 0x5b, 0xe2, 0x4a, 0x43, 0x76, 0xfe, 0x69, 0x45, 0xc8,
0x42, 0xee, 0x60, 0xbd, 0xec, 0x0e, 0xd4, 0x71, 0xdb, 0xc8, 0x99, 0x85, 0x74, 0x48, 0x11, 0x96, 0x1d, 0xac, 0x97, 0xdd, 0x81, 0x3a, 0x6e, 0x1b, 0x39, 0xb3, 0x90, 0x0e, 0x29, 0xc2, 0x72, 0x2e,
0x73, 0xa9, 0x04, 0xae, 0x22, 0x99, 0xa6, 0xcd, 0xda, 0x85, 0x61, 0x3a, 0x3b, 0x64, 0xeb, 0x91, 0x95, 0xc0, 0x55, 0x24, 0xd3, 0xb4, 0x59, 0xbb, 0x30, 0x4c, 0x67, 0x87, 0x6c, 0x3d, 0xb2, 0xdc,
0xe5, 0xce, 0xa6, 0x39, 0x94, 0xad, 0x1b, 0x7e, 0xbd, 0xba, 0xb5, 0x15, 0x29, 0x4d, 0x6a, 0x70, 0xd9, 0x34, 0x87, 0xb2, 0x75, 0xc3, 0xaf, 0x57, 0xb7, 0xb6, 0x22, 0xa5, 0x49, 0x0d, 0x8e, 0xb9,
0xc2, 0x0d, 0x7f, 0xde, 0x1f, 0x56, 0x60, 0xde, 0xea, 0x13, 0x72, 0x0f, 0x05, 0xfe, 0x0b, 0x2b, 0xe1, 0xcf, 0xfb, 0xc3, 0x0a, 0xcc, 0x5b, 0x7d, 0x42, 0xee, 0xa1, 0xc0, 0x7f, 0x61, 0x65, 0x92,
0x93, 0x5c, 0x79, 0x13, 0x32, 0x39, 0xaf, 0x6a, 0x73, 0x9e, 0xf6, 0x0f, 0xd5, 0x4c, 0xff, 0xd0, 0x2b, 0x6f, 0x42, 0x26, 0xe7, 0x55, 0x6d, 0xce, 0xd3, 0xfe, 0xa1, 0x9a, 0xe9, 0x1f, 0xba, 0x0f,
0x7d, 0x68, 0x66, 0x77, 0x5b, 0xec, 0x4e, 0x61, 0x8b, 0x2a, 0xb8, 0x2a, 0x2b, 0x94, 0x79, 0x20, 0xcd, 0xec, 0x6e, 0x8b, 0xdd, 0x29, 0x6c, 0x51, 0x05, 0x57, 0x65, 0x85, 0x32, 0x0f, 0xc4, 0x8c,
0x66, 0x0c, 0x0f, 0x84, 0xf3, 0x29, 0xb4, 0x8c, 0xf2, 0xa6, 0x07, 0xa1, 0x62, 0x79, 0x10, 0x74, 0xe1, 0x81, 0x70, 0x3e, 0x81, 0x96, 0x51, 0xde, 0xf4, 0x20, 0x54, 0x2c, 0x0f, 0x82, 0x8e, 0x3c,
0xe4, 0x61, 0x35, 0x8b, 0x3c, 0x74, 0x7e, 0x5e, 0x85, 0x79, 0x24, 0xef, 0x20, 0x3c, 0x39, 0x88, 0xac, 0x66, 0x91, 0x87, 0xce, 0x2f, 0xaa, 0x30, 0x8f, 0xe4, 0x1d, 0x84, 0xc7, 0xfb, 0xd1, 0x30,
0x86, 0x41, 0xff, 0x82, 0xc8, 0x4a, 0x51, 0xb2, 0x54, 0x1b, 0x14, 0x99, 0xdb, 0x30, 0x8a, 0x21, 0xe8, 0x9f, 0x13, 0x59, 0x29, 0x4a, 0x96, 0x6a, 0x83, 0x22, 0x73, 0x1b, 0x46, 0x31, 0xa4, 0xc3,
0x1d, 0x6e, 0x2d, 0x64, 0xa6, 0x4e, 0xa3, 0x50, 0x45, 0x91, 0x74, 0xe4, 0x27, 0xdc, 0xb8, 0xec, 0xad, 0x85, 0xcc, 0xd4, 0x69, 0x14, 0xaa, 0x28, 0x92, 0x0e, 0xfd, 0x84, 0x1b, 0x97, 0x5d, 0x5c,
0xe2, 0xda, 0x20, 0x8a, 0x3e, 0x04, 0x28, 0x8e, 0x74, 0x14, 0x0c, 0x87, 0x81, 0x28, 0x2b, 0xce, 0x1b, 0x44, 0xd1, 0x87, 0x00, 0xc5, 0x91, 0x8e, 0x82, 0xe1, 0x30, 0x10, 0x65, 0xc5, 0x79, 0xb7,
0xbb, 0x65, 0x59, 0xd8, 0xe6, 0x20, 0x48, 0xfc, 0xa3, 0xcc, 0xf7, 0xab, 0xd3, 0x64, 0x2c, 0xf5, 0x2c, 0x0b, 0xdb, 0x1c, 0x04, 0x89, 0x7f, 0x98, 0xf9, 0x7e, 0x75, 0x9a, 0x8c, 0xa5, 0xfe, 0x6b,
0x5f, 0x19, 0xc6, 0x52, 0x11, 0x78, 0x6e, 0x83, 0xf9, 0x85, 0x9c, 0x2b, 0x2c, 0xa4, 0xf3, 0xaf, 0xc3, 0x58, 0x2a, 0x02, 0xcf, 0x6d, 0x30, 0xbf, 0x90, 0x73, 0x85, 0x85, 0x74, 0xfe, 0x75, 0x15,
0xaa, 0xd0, 0x32, 0xc8, 0x02, 0xd9, 0xb9, 0x74, 0xdf, 0x33, 0x50, 0x19, 0x14, 0x11, 0x5a, 0x16, 0x5a, 0x06, 0x59, 0x20, 0x3b, 0x97, 0xee, 0x7b, 0x06, 0x2a, 0x83, 0x22, 0x42, 0xcb, 0x82, 0x62,
0x14, 0x03, 0x61, 0x37, 0xed, 0x56, 0xc9, 0xc9, 0x42, 0x0c, 0x6f, 0x91, 0xd0, 0x55, 0x68, 0x22, 0x20, 0xec, 0xa6, 0xdd, 0x2a, 0x39, 0x59, 0x88, 0xe1, 0x2d, 0x12, 0xba, 0x0a, 0x4d, 0x24, 0xfd,
0xe9, 0x7f, 0x48, 0xe6, 0x1a, 0x79, 0xb1, 0x4c, 0x03, 0x2a, 0x77, 0x83, 0x72, 0x67, 0xb2, 0x5c, 0x0f, 0xc8, 0x5c, 0x23, 0x2f, 0x96, 0x69, 0x40, 0xe5, 0x6e, 0x50, 0xee, 0x4c, 0x96, 0x4b, 0xc0,
0x02, 0x5e, 0x1b, 0x26, 0xf1, 0x31, 0xb4, 0x65, 0x35, 0xb4, 0xc6, 0x34, 0xe8, 0x8c, 0xf9, 0xac, 0x1b, 0xc3, 0x24, 0x3e, 0x82, 0xb6, 0xac, 0x86, 0xd6, 0x98, 0x06, 0x9d, 0x31, 0x9f, 0xb5, 0xfe,
0xf5, 0x77, 0xad, 0x92, 0xea, 0xcb, 0x0d, 0xf5, 0x65, 0xe3, 0x4d, 0x5f, 0xaa, 0x92, 0xce, 0x23, 0xae, 0x55, 0x52, 0x7d, 0xb9, 0xa1, 0xbe, 0x6c, 0xbc, 0xed, 0x4b, 0x55, 0xd2, 0x79, 0xa4, 0x23,
0x1d, 0x81, 0xf2, 0x28, 0xf6, 0xc7, 0xa7, 0x4a, 0xa0, 0xdc, 0x87, 0x65, 0x25, 0x37, 0x26, 0xa1, 0x50, 0x1e, 0xc5, 0xfe, 0xf8, 0x44, 0x09, 0x94, 0xfb, 0xb0, 0xac, 0xe4, 0xc6, 0x24, 0xf4, 0xc3,
0x1f, 0x86, 0xd1, 0x24, 0xec, 0x73, 0x15, 0xa4, 0x58, 0x96, 0xe5, 0x0c, 0x74, 0x48, 0x3b, 0x55, 0x30, 0x9a, 0x84, 0x7d, 0xae, 0x82, 0x14, 0xcb, 0xb2, 0x9c, 0x81, 0x0e, 0x69, 0xa7, 0x8a, 0xd8,
0xc4, 0xee, 0xc2, 0x8c, 0x50, 0x3c, 0x85, 0x7a, 0x50, 0x2e, 0x42, 0x44, 0x11, 0x76, 0x07, 0x66, 0x5d, 0x98, 0x11, 0x8a, 0xa7, 0x50, 0x0f, 0xca, 0x45, 0x88, 0x28, 0xc2, 0xee, 0xc0, 0x8c, 0xd0,
0x84, 0xfe, 0x59, 0x9d, 0xca, 0xf4, 0xa2, 0x80, 0xb3, 0x0e, 0x8b, 0x14, 0x43, 0x6f, 0xc8, 0xbe, 0x3f, 0xab, 0x53, 0x99, 0x5e, 0x14, 0x70, 0xd6, 0x61, 0x91, 0x62, 0xe8, 0x0d, 0xd9, 0xf7, 0x4e,
0x77, 0xca, 0xd4, 0x86, 0xd9, 0xbe, 0x88, 0xb4, 0x5f, 0x01, 0xb6, 0x2f, 0xf8, 0xca, 0xf4, 0x23, 0x99, 0xda, 0x30, 0xdb, 0x17, 0x91, 0xf6, 0x2b, 0xc0, 0xf6, 0x04, 0x5f, 0x99, 0x7e, 0xe4, 0x3f,
0xff, 0x59, 0x0d, 0x5a, 0x06, 0x8c, 0xf2, 0x89, 0x9c, 0x7f, 0xde, 0x20, 0xf0, 0x47, 0x3c, 0xe5, 0xad, 0x41, 0xcb, 0x80, 0x51, 0x3e, 0x91, 0xf3, 0xcf, 0x1b, 0x04, 0xfe, 0x88, 0xa7, 0x3c, 0x96,
0xb1, 0xe4, 0xa5, 0x1c, 0x8a, 0xe5, 0xfc, 0xb3, 0x13, 0x2f, 0x9a, 0xa4, 0xde, 0x80, 0x9f, 0xc4, 0xbc, 0x94, 0x43, 0xb1, 0x9c, 0x7f, 0x7a, 0xec, 0x45, 0x93, 0xd4, 0x1b, 0xf0, 0xe3, 0x98, 0x73,
0x9c, 0x4b, 0x7d, 0x26, 0x87, 0x62, 0x39, 0xa4, 0x66, 0xa3, 0x9c, 0x70, 0xd7, 0xe5, 0x50, 0xe5, 0xa9, 0xcf, 0xe4, 0x50, 0x2c, 0x87, 0xd4, 0x6c, 0x94, 0x13, 0xee, 0xba, 0x1c, 0xaa, 0xbc, 0xc2,
0x15, 0x16, 0xf3, 0x54, 0xcf, 0xbc, 0xc2, 0x62, 0x56, 0xf2, 0x92, 0x75, 0xa6, 0x44, 0xb2, 0x7e, 0x62, 0x9e, 0xea, 0x99, 0x57, 0x58, 0xcc, 0x4a, 0x5e, 0xb2, 0xce, 0x94, 0x48, 0xd6, 0x0f, 0x61,
0x04, 0xab, 0x42, 0x86, 0x4a, 0xe9, 0xe1, 0xe5, 0x88, 0x6b, 0x4a, 0x2e, 0xbb, 0x0b, 0x1d, 0xec, 0x55, 0xc8, 0x50, 0x29, 0x3d, 0xbc, 0x1c, 0x71, 0x4d, 0xc9, 0x65, 0x77, 0xa1, 0x83, 0x7d, 0x56,
0xb3, 0x62, 0x8d, 0x24, 0xf8, 0x99, 0xe0, 0xb1, 0x8a, 0x5b, 0xc0, 0xb1, 0x2c, 0xb9, 0x1e, 0xcc, 0xac, 0x91, 0x04, 0x3f, 0x17, 0x3c, 0x56, 0x71, 0x0b, 0x38, 0x96, 0x25, 0xd7, 0x83, 0x59, 0x56,
0xb2, 0x22, 0x34, 0xa7, 0x80, 0x53, 0x59, 0xff, 0x95, 0x5d, 0xb6, 0x29, 0xcb, 0xe6, 0x70, 0xf6, 0x84, 0xe6, 0x14, 0x70, 0x2a, 0xeb, 0xbf, 0xb6, 0xcb, 0x36, 0x65, 0xd9, 0x1c, 0xce, 0x3e, 0x82,
0x31, 0xac, 0x8d, 0xf8, 0x20, 0xf0, 0xed, 0x2a, 0xbc, 0x6c, 0x93, 0x9f, 0x96, 0x8d, 0xad, 0xe0, 0xb5, 0x11, 0x1f, 0x04, 0xbe, 0x5d, 0x85, 0x97, 0x6d, 0xf2, 0xd3, 0xb2, 0xb1, 0x15, 0x9c, 0x85,
0x2c, 0xfc, 0x2c, 0x1a, 0x1d, 0x05, 0x62, 0x63, 0x13, 0x4e, 0x92, 0xba, 0x5b, 0xc0, 0x9d, 0x79, 0x9f, 0x47, 0xa3, 0xc3, 0x40, 0x6c, 0x6c, 0xc2, 0x49, 0x52, 0x77, 0x0b, 0xb8, 0x33, 0x0f, 0xad,
0x68, 0x1d, 0xa6, 0xd1, 0x58, 0x2d, 0xfd, 0x02, 0xb4, 0x45, 0x52, 0x86, 0xa5, 0xbe, 0x03, 0x57, 0x83, 0x34, 0x1a, 0xab, 0xa5, 0x5f, 0x80, 0xb6, 0x48, 0xca, 0xb0, 0xd4, 0x77, 0xe0, 0x0a, 0xd1,
0x88, 0x5e, 0x9f, 0x45, 0xe3, 0x68, 0x18, 0x9d, 0x5c, 0x58, 0xa6, 0x8e, 0x7f, 0x53, 0x81, 0x65, 0xeb, 0xf3, 0x68, 0x1c, 0x0d, 0xa3, 0xe3, 0x73, 0xcb, 0xd4, 0xf1, 0x6f, 0x2b, 0xb0, 0x6c, 0xe5,
0x2b, 0x37, 0xb3, 0x75, 0x90, 0x5d, 0x56, 0xc5, 0x12, 0x0a, 0x12, 0x5f, 0x32, 0xb6, 0x05, 0x51, 0x66, 0xb6, 0x0e, 0xb2, 0xcb, 0xaa, 0x58, 0x42, 0x41, 0xe2, 0x4b, 0xc6, 0xb6, 0x20, 0x0a, 0x0a,
0x50, 0xb8, 0xc1, 0x9e, 0xcb, 0xf0, 0xc2, 0xcd, 0xec, 0x82, 0x8c, 0xfa, 0x50, 0xd0, 0x7b, 0xb7, 0x37, 0xd8, 0x0b, 0x19, 0x5e, 0xb8, 0x99, 0x5d, 0x90, 0x51, 0x1f, 0x0a, 0x7a, 0xef, 0x16, 0xe9,
0x48, 0xef, 0xf2, 0x7b, 0x75, 0x75, 0x46, 0x55, 0xf1, 0x9b, 0x32, 0x90, 0x6a, 0x20, 0x07, 0x5d, 0x5d, 0x7e, 0xaf, 0xae, 0xce, 0xa8, 0x2a, 0x7e, 0x53, 0x06, 0x52, 0x0d, 0xe4, 0xa0, 0x6b, 0x76,
0xb3, 0x83, 0x5f, 0x4c, 0xd3, 0x98, 0xea, 0x41, 0x5f, 0x83, 0x89, 0xf3, 0x8b, 0x0a, 0x40, 0xd6, 0xf0, 0x8b, 0x69, 0x1a, 0x53, 0x3d, 0xe8, 0x6b, 0x30, 0x71, 0x7e, 0x59, 0x01, 0xc8, 0x7a, 0x47,
0x3b, 0x0a, 0xbf, 0xd1, 0x5b, 0x9b, 0xb8, 0x4b, 0x6e, 0x6c, 0x63, 0xef, 0x41, 0x5b, 0x47, 0x50, 0xe1, 0x37, 0x7a, 0x6b, 0x13, 0x77, 0xc9, 0x8d, 0x6d, 0xec, 0x3d, 0x68, 0xeb, 0x08, 0x8a, 0x6c,
0x64, 0xbb, 0x65, 0x4b, 0x61, 0xa8, 0x5d, 0xdc, 0x86, 0xc5, 0x93, 0x61, 0x74, 0x44, 0x5a, 0x0c, 0xb7, 0x6c, 0x29, 0x0c, 0xb5, 0x8b, 0xdb, 0xb0, 0x78, 0x3c, 0x8c, 0x0e, 0x49, 0x8b, 0xa1, 0x38,
0xc5, 0x39, 0x27, 0x32, 0x38, 0x77, 0x41, 0xc0, 0x0f, 0x25, 0x9a, 0x6d, 0xad, 0x75, 0x73, 0x6b, 0xe7, 0x44, 0x06, 0xe7, 0x2e, 0x08, 0xf8, 0xa1, 0x44, 0xb3, 0xad, 0xb5, 0x6e, 0x6e, 0xad, 0xe5,
0x2d, 0xdf, 0x28, 0x7f, 0x5e, 0xd5, 0x6e, 0xec, 0x6c, 0x26, 0x5e, 0xcb, 0xe5, 0x6c, 0xa3, 0x20, 0x1b, 0xe5, 0x2f, 0xaa, 0xda, 0x8d, 0x9d, 0xcd, 0xc4, 0x1b, 0xb9, 0x9c, 0x6d, 0x14, 0xc4, 0xfa,
0xd6, 0xa7, 0x78, 0x8e, 0xe9, 0x0c, 0x74, 0xf0, 0x46, 0x4b, 0xf9, 0xa7, 0xb0, 0x10, 0x0b, 0x99, 0x14, 0xcf, 0x31, 0x9d, 0x81, 0xf6, 0xdf, 0x6a, 0x29, 0xff, 0x04, 0x16, 0x62, 0x21, 0x33, 0x95,
0xa9, 0x04, 0x6a, 0xfd, 0x35, 0x02, 0x75, 0x3e, 0xb6, 0x76, 0xe6, 0xf7, 0xa1, 0xe3, 0x0f, 0xce, 0x40, 0xad, 0xbf, 0x41, 0xa0, 0xce, 0xc7, 0xd6, 0xce, 0xfc, 0x2d, 0xe8, 0xf8, 0x83, 0x53, 0x1e,
0x78, 0x9c, 0x06, 0x64, 0x39, 0x24, 0x35, 0x4a, 0x0c, 0x70, 0xd1, 0xc0, 0x49, 0x5b, 0xb9, 0x0d, 0xa7, 0x01, 0x59, 0x0e, 0x49, 0x8d, 0x12, 0x03, 0x5c, 0x34, 0x70, 0xd2, 0x56, 0x6e, 0xc3, 0xa2,
0x8b, 0x32, 0x54, 0x5a, 0x97, 0x94, 0xb7, 0x2a, 0x33, 0x18, 0x0b, 0x3a, 0xff, 0x48, 0x79, 0xcd, 0x0c, 0x95, 0xd6, 0x25, 0xe5, 0xad, 0xca, 0x0c, 0xc6, 0x82, 0xce, 0x3f, 0x52, 0x5e, 0x73, 0x7b,
0xed, 0xd5, 0x7d, 0xfd, 0xac, 0x98, 0x23, 0xac, 0xe6, 0x46, 0xf8, 0x0d, 0xe9, 0x99, 0x1e, 0x28, 0x75, 0xdf, 0x3c, 0x2b, 0xe6, 0x08, 0xab, 0xb9, 0x11, 0x7e, 0x43, 0x7a, 0xa6, 0x07, 0xca, 0x44,
0x13, 0x65, 0xcd, 0x08, 0xc9, 0x1b, 0xc8, 0xa8, 0x03, 0x7b, 0x5a, 0xeb, 0x6f, 0x33, 0xad, 0xce, 0x59, 0x33, 0x42, 0xf2, 0x06, 0x32, 0xea, 0xc0, 0x9e, 0xd6, 0xfa, 0x45, 0xa6, 0xd5, 0xf9, 0x8f,
0x7f, 0xa8, 0xc0, 0xdc, 0x6e, 0x34, 0xde, 0xc5, 0x29, 0x46, 0x1d, 0x07, 0xd9, 0x44, 0xdf, 0x53, 0x15, 0x98, 0xdb, 0x8d, 0xc6, 0xbb, 0x38, 0xc5, 0xa8, 0xe3, 0x20, 0x9b, 0xe8, 0x7b, 0x0a, 0x2a,
0x50, 0xc9, 0x37, 0x84, 0x2e, 0x96, 0x6a, 0x25, 0xf3, 0x79, 0xad, 0xe4, 0xb7, 0xe1, 0x1d, 0x32, 0xf9, 0x96, 0xd0, 0xc5, 0x52, 0xad, 0x64, 0x3e, 0xaf, 0x95, 0xfc, 0x36, 0xbc, 0x43, 0x46, 0xf2,
0x92, 0xc7, 0xd1, 0x38, 0x8a, 0x91, 0x5d, 0xfd, 0xa1, 0x50, 0x41, 0xa2, 0x30, 0x3d, 0x55, 0xe2, 0x38, 0x1a, 0x47, 0x31, 0xb2, 0xab, 0x3f, 0x14, 0x2a, 0x48, 0x14, 0xa6, 0x27, 0x4a, 0x9c, 0xbe,
0xf4, 0x75, 0x45, 0xc8, 0x72, 0x35, 0x4c, 0xcf, 0x3c, 0x71, 0xc2, 0x93, 0x5a, 0x94, 0x90, 0xb2, 0xa9, 0x08, 0x59, 0xae, 0x86, 0xe9, 0xa9, 0x27, 0x4e, 0x78, 0x52, 0x8b, 0x12, 0x52, 0xb6, 0x98,
0xc5, 0x0c, 0xe7, 0x37, 0xa0, 0x49, 0x27, 0x0c, 0x1a, 0xda, 0x07, 0xd0, 0x3c, 0x8d, 0xc6, 0xde, 0xe1, 0xfc, 0x06, 0x34, 0xe9, 0x84, 0x41, 0x43, 0x7b, 0x1f, 0x9a, 0x27, 0xd1, 0xd8, 0x3b, 0x09,
0x69, 0x10, 0xa6, 0x8a, 0xfd, 0x17, 0x32, 0xd5, 0x7f, 0x97, 0x26, 0x45, 0x17, 0x70, 0xfe, 0x64, 0xc2, 0x54, 0xb1, 0xff, 0x42, 0xa6, 0xfa, 0xef, 0xd2, 0xa4, 0xe8, 0x02, 0xce, 0x1f, 0xcf, 0xc2,
0x16, 0xe6, 0x1e, 0x87, 0x67, 0x51, 0xd0, 0x27, 0xef, 0xfb, 0x88, 0x8f, 0x22, 0x75, 0x73, 0x03, 0xdc, 0xe3, 0xf0, 0x34, 0x0a, 0xfa, 0xe4, 0x7d, 0x1f, 0xf1, 0x51, 0xa4, 0x6e, 0x6e, 0xe0, 0x6f,
0x7f, 0xd3, 0xe5, 0xe8, 0xec, 0x6e, 0xa5, 0x60, 0x21, 0x03, 0xc1, 0x33, 0x69, 0x6c, 0xde, 0x8d, 0xba, 0x1c, 0x9d, 0xdd, 0xad, 0x14, 0x2c, 0x64, 0x20, 0x78, 0x26, 0x8d, 0xcd, 0xbb, 0x91, 0x32,
0x94, 0xa9, 0xec, 0xa0, 0x35, 0x63, 0xdc, 0x7d, 0xc1, 0xda, 0xc4, 0x9d, 0x3d, 0x9a, 0x3b, 0x11, 0x95, 0x1d, 0xb4, 0x66, 0x8c, 0xbb, 0x2f, 0x58, 0x9b, 0xb8, 0xb3, 0x47, 0x73, 0x27, 0x22, 0x6e,
0x71, 0x6b, 0x20, 0x38, 0xf9, 0x32, 0xa4, 0x52, 0xc4, 0xdc, 0x89, 0xf8, 0x1f, 0x09, 0xd1, 0x39, 0x0d, 0x04, 0x27, 0x5f, 0x86, 0x54, 0x8a, 0x98, 0x3b, 0x11, 0xff, 0x23, 0x21, 0x3a, 0x67, 0xc7,
0x3b, 0xe6, 0xc2, 0xcd, 0xa1, 0x55, 0x2f, 0x3c, 0x67, 0x9b, 0x20, 0xaa, 0x67, 0xe2, 0x03, 0x51, 0x5c, 0xb8, 0x39, 0xb4, 0xea, 0x85, 0xe7, 0x6c, 0x13, 0x44, 0xf5, 0x4c, 0x7c, 0x20, 0xca, 0x88,
0x46, 0x6c, 0x07, 0x26, 0x84, 0x0a, 0x6a, 0xfe, 0xc6, 0xb0, 0xb8, 0xf5, 0x9d, 0x87, 0x45, 0x9c, 0xed, 0xc0, 0x84, 0x50, 0x41, 0xcd, 0xdf, 0x18, 0x16, 0xb7, 0xbe, 0xf3, 0xb0, 0x88, 0xb3, 0xd0,
0x85, 0x16, 0xba, 0x62, 0x9c, 0x20, 0xee, 0x97, 0xe6, 0x71, 0xe3, 0x74, 0x2e, 0x62, 0xca, 0xd5, 0x42, 0x57, 0x8c, 0x13, 0xc4, 0xfd, 0xd2, 0x3c, 0x6e, 0x9c, 0xce, 0x45, 0x4c, 0xb9, 0x3a, 0x9d,
0xe9, 0x1c, 0x49, 0xc6, 0x1f, 0x0e, 0x8f, 0xfc, 0xfe, 0x4b, 0x71, 0x98, 0x6c, 0x0b, 0xef, 0x98, 0x23, 0xc9, 0xf8, 0xc3, 0xe1, 0xa1, 0xdf, 0x7f, 0x25, 0x0e, 0x93, 0x6d, 0xe1, 0x1d, 0xb3, 0x40,
0x05, 0x52, 0x60, 0x64, 0xb6, 0xae, 0x14, 0xbd, 0x54, 0x77, 0x4d, 0x88, 0x6d, 0x40, 0x8b, 0x2c, 0x0a, 0x8c, 0xcc, 0xd6, 0x95, 0xa2, 0x97, 0xea, 0xae, 0x09, 0xb1, 0x0d, 0x68, 0x91, 0xe5, 0x42,
0x17, 0x72, 0x65, 0x17, 0x68, 0x65, 0x3b, 0xa6, 0x69, 0x83, 0xd6, 0xd6, 0x2c, 0x64, 0xc6, 0x05, 0xae, 0xec, 0x02, 0xad, 0x6c, 0xc7, 0x34, 0x6d, 0xd0, 0xda, 0x9a, 0x85, 0xcc, 0xb8, 0x80, 0xc5,
0x2c, 0x16, 0xa2, 0xbc, 0xfd, 0xc1, 0x40, 0x86, 0x54, 0x74, 0xc4, 0xfd, 0x4a, 0x0d, 0x90, 0x6d, 0x42, 0x94, 0xb7, 0x3f, 0x18, 0xc8, 0x90, 0x8a, 0x8e, 0xb8, 0x5f, 0xa9, 0x01, 0xb2, 0x8d, 0x88,
0x44, 0x4c, 0x98, 0x28, 0xb0, 0x44, 0x05, 0x2c, 0x8c, 0x5d, 0x17, 0x96, 0xc3, 0xb1, 0x1f, 0x0c, 0x09, 0x13, 0x05, 0x96, 0xa8, 0x80, 0x85, 0xb1, 0xeb, 0xc2, 0x72, 0x38, 0xf6, 0x83, 0x01, 0x05,
0x28, 0x60, 0x49, 0x1c, 0x3f, 0x35, 0x86, 0x75, 0xa8, 0xdf, 0xb4, 0x71, 0x2e, 0xd3, 0xac, 0x58, 0x2c, 0x89, 0xe3, 0xa7, 0xc6, 0xb0, 0x0e, 0xf5, 0x9b, 0x36, 0xce, 0x65, 0x9a, 0x15, 0x0b, 0xc3,
0x18, 0xce, 0x8d, 0x4e, 0x8f, 0xb2, 0xb0, 0x70, 0x1b, 0x64, 0x1f, 0x92, 0x53, 0x3b, 0xe5, 0x14, 0xb9, 0xd1, 0xe9, 0x51, 0x16, 0x16, 0x6e, 0x83, 0xec, 0x03, 0x72, 0x6a, 0xa7, 0x9c, 0x62, 0xbf,
0xfb, 0xbd, 0xb0, 0xf1, 0x8e, 0x1c, 0xb3, 0x24, 0x5b, 0xf5, 0xf7, 0x10, 0x8b, 0xb8, 0xa2, 0x24, 0x17, 0x36, 0xde, 0x91, 0x63, 0x96, 0x64, 0xab, 0xfe, 0x1e, 0x60, 0x11, 0x57, 0x94, 0x44, 0xb5,
0xaa, 0x6d, 0xc2, 0xaf, 0xb0, 0x6a, 0xa9, 0x6d, 0xb2, 0x28, 0xf9, 0x15, 0x44, 0x01, 0x67, 0x13, 0x4d, 0xf8, 0x15, 0x56, 0x2d, 0xb5, 0x4d, 0x16, 0x25, 0xbf, 0x82, 0x28, 0xe0, 0x6c, 0x42, 0xdb,
0xda, 0x66, 0x05, 0xac, 0x01, 0xf5, 0xa7, 0x07, 0x3b, 0xfb, 0x9d, 0x4b, 0xac, 0x05, 0x73, 0x87, 0xac, 0x80, 0x35, 0xa0, 0xfe, 0x6c, 0x7f, 0x67, 0xaf, 0x73, 0x89, 0xb5, 0x60, 0xee, 0x60, 0xe7,
0x3b, 0xcf, 0x9e, 0xed, 0xed, 0x6c, 0x77, 0x2a, 0xac, 0x0d, 0x0d, 0x1d, 0xef, 0x5a, 0xc5, 0xd4, 0xf9, 0xf3, 0x27, 0x3b, 0xdb, 0x9d, 0x0a, 0x6b, 0x43, 0x43, 0xc7, 0xbb, 0x56, 0x31, 0xb5, 0xb9,
0xe6, 0xd6, 0xd6, 0xce, 0xc1, 0xb3, 0x9d, 0xed, 0x4e, 0xed, 0xb3, 0x7a, 0xa3, 0xda, 0xa9, 0x39, 0xb5, 0xb5, 0xb3, 0xff, 0x7c, 0x67, 0xbb, 0x53, 0xfb, 0xb4, 0xde, 0xa8, 0x76, 0x6a, 0xa4, 0xb9,
0x7f, 0x54, 0x83, 0x96, 0x51, 0xff, 0x1b, 0x6c, 0x46, 0xd7, 0x01, 0xe8, 0x44, 0x91, 0xc5, 0xb4, 0x19, 0xf5, 0xbf, 0xc5, 0x66, 0x74, 0x1d, 0x80, 0x4e, 0x14, 0x59, 0x4c, 0x4b, 0xdd, 0x35, 0x10,
0xd4, 0x5d, 0x03, 0x41, 0x09, 0xa9, 0xcf, 0xda, 0x35, 0x71, 0xd9, 0x54, 0xa5, 0x69, 0xd6, 0xe8, 0x94, 0x90, 0xfa, 0xac, 0x5d, 0x13, 0x97, 0x4d, 0x55, 0x9a, 0x66, 0x8d, 0x6e, 0x75, 0x9a, 0x4e,
0x56, 0xa7, 0xe9, 0xc4, 0x99, 0x71, 0x6d, 0x10, 0x29, 0x4a, 0x02, 0x14, 0x84, 0x29, 0xf8, 0xd0, 0x9c, 0x19, 0xd7, 0x06, 0x91, 0xa2, 0x24, 0x40, 0x41, 0x98, 0x82, 0x0f, 0x4d, 0x08, 0x57, 0x28,
0x84, 0x70, 0x85, 0x62, 0x9e, 0x44, 0xc3, 0x33, 0x2e, 0x8a, 0x08, 0xbd, 0xcc, 0xc2, 0xb0, 0x2d, 0xe6, 0x49, 0x34, 0x3c, 0xe5, 0xa2, 0x88, 0xd0, 0xcb, 0x2c, 0x0c, 0xdb, 0x92, 0xa2, 0xc6, 0x08,
0x29, 0x6a, 0x8c, 0x00, 0xe9, 0x19, 0xd7, 0x06, 0xd9, 0xb7, 0xd5, 0x0a, 0x35, 0x68, 0x85, 0xd6, 0x90, 0x9e, 0x71, 0x6d, 0x90, 0x7d, 0x47, 0xad, 0x50, 0x83, 0x56, 0x68, 0xad, 0x38, 0xdd, 0xd6,
0x8a, 0xd3, 0x6d, 0xad, 0xce, 0x93, 0x82, 0xd1, 0xa7, 0x49, 0xcb, 0xf4, 0xcd, 0xe2, 0x77, 0x7f, 0xea, 0x3c, 0x2d, 0x18, 0x7d, 0x9a, 0xb4, 0x4c, 0xdf, 0x2c, 0x7e, 0x77, 0x01, 0xe3, 0x0f, 0x5b,
0x3e, 0xc6, 0x9f, 0x14, 0xd8, 0xe6, 0x60, 0x20, 0x9b, 0x35, 0xef, 0xd2, 0xc6, 0xe6, 0xe5, 0x6d, 0x07, 0x36, 0x1a, 0x8f, 0xbd, 0x12, 0x6b, 0x4c, 0xdd, 0x2d, 0xc9, 0xf9, 0x1a, 0x8c, 0x45, 0x29,
0x25, 0xdb, 0x4a, 0xe4, 0x47, 0xb5, 0x5c, 0x7e, 0xbc, 0x96, 0xcb, 0x9c, 0xc7, 0xd0, 0x3a, 0x30, 0xb0, 0xcd, 0xc1, 0x40, 0x76, 0xd3, 0xbc, 0x7b, 0x1b, 0x9b, 0x97, 0xbd, 0x95, 0x2c, 0x2c, 0x91,
0xae, 0x83, 0x3b, 0x28, 0x6a, 0xd5, 0x45, 0x70, 0x21, 0x84, 0x85, 0xd1, 0x27, 0x43, 0x8d, 0x2e, 0x37, 0xd5, 0x72, 0x79, 0xf3, 0x46, 0xae, 0x74, 0x1e, 0x43, 0x6b, 0xdf, 0xb8, 0x3e, 0xee, 0xa0,
0x55, 0xcd, 0x2e, 0x39, 0xff, 0xb0, 0x22, 0x6e, 0xd8, 0xe9, 0x21, 0x88, 0xf6, 0x1d, 0x68, 0x6b, 0x68, 0x56, 0x17, 0xc7, 0x85, 0xd0, 0x16, 0x46, 0xa2, 0x0c, 0x35, 0xba, 0x54, 0x35, 0xbb, 0xe4,
0xbf, 0x41, 0x76, 0x29, 0xc1, 0xc2, 0xb0, 0x0c, 0x75, 0xc7, 0x8b, 0x8e, 0x8f, 0x13, 0xae, 0xc2, 0xfc, 0xc3, 0x8a, 0xb8, 0x91, 0xa7, 0x87, 0x20, 0xda, 0x77, 0xa0, 0xad, 0xfd, 0x0c, 0xd9, 0x25,
0x87, 0x2d, 0x4c, 0x69, 0xb5, 0xa8, 0x27, 0x07, 0xa2, 0x85, 0x44, 0x86, 0x11, 0x17, 0x70, 0xa4, 0x06, 0x0b, 0xc3, 0x32, 0xd4, 0x1d, 0x2f, 0x3a, 0x3a, 0x4a, 0xb8, 0x0a, 0x37, 0xb6, 0x30, 0xa5,
0x5c, 0x69, 0xb7, 0x55, 0x81, 0xd3, 0x3a, 0xad, 0xef, 0x4e, 0xe4, 0x67, 0xfa, 0x2e, 0x34, 0x74, 0x05, 0xa3, 0x5e, 0x1d, 0x88, 0x16, 0x12, 0x19, 0x76, 0x5c, 0xc0, 0x91, 0xd2, 0xa5, 0x9d, 0x57,
0xbd, 0xf6, 0x96, 0xa5, 0x4a, 0xea, 0x7c, 0xdc, 0x1a, 0xe9, 0xc4, 0x6b, 0x75, 0x5a, 0x30, 0x50, 0x05, 0x5a, 0xeb, 0xb4, 0xbe, 0x6b, 0x91, 0x9f, 0xe9, 0xbb, 0xd0, 0xd0, 0xf5, 0xda, 0x5b, 0x9c,
0x31, 0x83, 0xad, 0x03, 0x3b, 0x0e, 0xe2, 0x7c, 0x71, 0xc1, 0x51, 0x25, 0x39, 0xce, 0x0b, 0x58, 0x2a, 0xa9, 0xf3, 0x71, 0x2b, 0xa5, 0x13, 0xb2, 0xd5, 0x69, 0xc1, 0x70, 0xc5, 0x0c, 0xa4, 0xa5,
0x56, 0xe2, 0xc0, 0x50, 0xb7, 0xed, 0x85, 0xac, 0xbc, 0x49, 0x5c, 0x56, 0x8b, 0xe2, 0xd2, 0xf9, 0xa3, 0x20, 0xce, 0x17, 0x17, 0x1c, 0x58, 0x92, 0xe3, 0xbc, 0x84, 0x65, 0x25, 0x3e, 0x0c, 0xf5,
0x97, 0x75, 0x98, 0x93, 0xab, 0x5d, 0x78, 0x56, 0x40, 0x6c, 0xb8, 0x16, 0xc6, 0xba, 0xd6, 0xe5, 0xdc, 0x5e, 0xc8, 0xca, 0xdb, 0xc4, 0x6b, 0xb5, 0x28, 0x5e, 0x9d, 0x7f, 0x55, 0x87, 0x39, 0xb9,
0x51, 0x22, 0x04, 0xb9, 0x89, 0xde, 0xc9, 0x6f, 0x83, 0x99, 0xf1, 0x2f, 0xb7, 0x15, 0xae, 0x42, 0xda, 0x85, 0x67, 0x08, 0xc4, 0x06, 0x6d, 0x61, 0xac, 0x6b, 0x5d, 0x36, 0x25, 0x42, 0x90, 0x9b,
0x7d, 0xec, 0xa7, 0xa7, 0x64, 0x1b, 0x12, 0xb4, 0x44, 0x69, 0x65, 0x5e, 0x9e, 0xb1, 0xcd, 0xcb, 0xee, 0x9d, 0xfc, 0xb6, 0x99, 0x19, 0x0b, 0x73, 0x5b, 0xe7, 0x2a, 0xd4, 0xc7, 0x7e, 0x7a, 0x42,
0x65, 0x8f, 0x29, 0x08, 0x9d, 0xaf, 0xf8, 0x98, 0xc2, 0x55, 0x68, 0x8a, 0x6d, 0x3b, 0xb3, 0x20, 0xb6, 0x24, 0x41, 0x4b, 0x94, 0x56, 0xe6, 0xe8, 0x19, 0xdb, 0x1c, 0x5d, 0xf6, 0xf8, 0x82, 0xd0,
0x67, 0x40, 0x6e, 0x9b, 0x6f, 0x14, 0xb6, 0xf9, 0xb7, 0xdf, 0x80, 0xbf, 0x0b, 0xb3, 0xe2, 0x42, 0x11, 0x8b, 0x8f, 0x2f, 0x5c, 0x85, 0xa6, 0xd8, 0xe6, 0x33, 0x8b, 0x73, 0x06, 0xe4, 0xd4, 0x82,
0x91, 0x0c, 0x13, 0xbf, 0xaa, 0x1c, 0xc4, 0xa2, 0x9c, 0xfa, 0x2b, 0xe2, 0xc7, 0x5c, 0x59, 0xd6, 0x46, 0x41, 0x2d, 0xb8, 0xf8, 0x86, 0xfd, 0x3d, 0x98, 0x15, 0x17, 0x90, 0x64, 0x58, 0xf9, 0x55,
0xbc, 0x92, 0xdc, 0xb2, 0xaf, 0x24, 0x9b, 0x86, 0xef, 0x76, 0xce, 0xf0, 0x7d, 0x17, 0x3a, 0x7a, 0xe5, 0x50, 0x16, 0xe5, 0xd4, 0x5f, 0x11, 0x6f, 0xe6, 0xca, 0xb2, 0xe6, 0x15, 0xe6, 0x96, 0x7d,
0xfa, 0xc8, 0x52, 0x15, 0x26, 0x32, 0x8a, 0xb8, 0x80, 0x67, 0xfb, 0xcb, 0x82, 0xb5, 0xbf, 0xa0, 0x85, 0xd9, 0x34, 0x94, 0xb7, 0x73, 0x86, 0xf2, 0xbb, 0xd0, 0xd1, 0xd3, 0x47, 0x96, 0xad, 0x30,
0xc4, 0xda, 0x4c, 0x53, 0x3e, 0x1a, 0xa7, 0x6a, 0x7f, 0x79, 0x08, 0xf3, 0x56, 0x27, 0x71, 0x5b, 0x91, 0x51, 0xc7, 0x05, 0x3c, 0xdb, 0x8f, 0x16, 0xac, 0xfd, 0x08, 0x25, 0xdc, 0x66, 0x9a, 0xf2,
0x91, 0xc1, 0xeb, 0x9d, 0x4b, 0x6c, 0x1e, 0x9a, 0x8f, 0xf7, 0xbd, 0x87, 0x7b, 0x8f, 0x1f, 0xed, 0xd1, 0x38, 0x55, 0xfb, 0xd1, 0x43, 0x98, 0xb7, 0x3a, 0x89, 0xdb, 0x90, 0x0c, 0x76, 0xef, 0x5c,
0x3e, 0xeb, 0x54, 0x30, 0x79, 0xf8, 0x7c, 0x6b, 0x6b, 0x67, 0x67, 0x9b, 0xb6, 0x19, 0x80, 0xd9, 0x62, 0xf3, 0xd0, 0x7c, 0xbc, 0xe7, 0x3d, 0x7c, 0xf2, 0xf8, 0xd1, 0xee, 0xf3, 0x4e, 0x05, 0x93,
0x87, 0x9b, 0x8f, 0x71, 0xcb, 0xa9, 0x39, 0xff, 0xbb, 0x02, 0x2d, 0xa3, 0x7a, 0xf6, 0x3d, 0x3d, 0x07, 0x2f, 0xb6, 0xb6, 0x76, 0x76, 0xb6, 0x69, 0x5b, 0x02, 0x98, 0x7d, 0xb8, 0xf9, 0x18, 0xb7,
0x33, 0xe2, 0xd6, 0xea, 0xb5, 0x62, 0x17, 0xd6, 0x95, 0xe0, 0x35, 0xa6, 0x46, 0xbf, 0x1f, 0x51, 0xa8, 0x9a, 0xf3, 0x7f, 0x2a, 0xd0, 0x32, 0xaa, 0x67, 0xdf, 0xd7, 0x33, 0x23, 0x6e, 0xb9, 0x5e,
0x9d, 0xfa, 0x7e, 0x04, 0x2e, 0x8f, 0x2f, 0x6a, 0xd0, 0xf3, 0x20, 0x8e, 0x21, 0x79, 0x58, 0xc4, 0x2b, 0x76, 0x61, 0x5d, 0x09, 0x6a, 0x63, 0x6a, 0xf4, 0x7b, 0x13, 0xd5, 0xa9, 0xef, 0x4d, 0xe0,
0x08, 0x65, 0xbb, 0x05, 0x96, 0x14, 0xa6, 0xb7, 0x3c, 0xec, 0x7c, 0x04, 0x90, 0xf5, 0xc6, 0x1e, 0xf2, 0xf8, 0xa2, 0x06, 0x3d, 0x0f, 0xe2, 0xd8, 0x92, 0x87, 0x45, 0x4c, 0x51, 0xb6, 0xbb, 0x60,
0xf6, 0x25, 0x7b, 0xd8, 0x15, 0x63, 0xd8, 0x55, 0x67, 0x5b, 0x08, 0x0c, 0x39, 0x85, 0xda, 0xc3, 0x49, 0x61, 0xaa, 0xcb, 0xc3, 0xce, 0x87, 0x00, 0x59, 0x6f, 0xec, 0x61, 0x5f, 0xb2, 0x87, 0x5d,
0xf9, 0x6d, 0x60, 0xca, 0xd2, 0x43, 0xb1, 0x78, 0xe3, 0x21, 0x4f, 0xd5, 0x75, 0x92, 0x25, 0x99, 0x31, 0x86, 0x5d, 0x75, 0xb6, 0x85, 0xc0, 0x90, 0x53, 0xa8, 0x3d, 0xa2, 0xdf, 0x01, 0xa6, 0x2c,
0xf3, 0x58, 0x67, 0xa8, 0x1b, 0x51, 0x59, 0x2d, 0x99, 0xdc, 0x91, 0x14, 0x97, 0x97, 0x3b, 0xb2, 0x43, 0x14, 0xbb, 0x37, 0x1e, 0xf2, 0x54, 0x5d, 0x3f, 0x59, 0x92, 0x39, 0x8f, 0x75, 0x86, 0xba,
0xa8, 0xab, 0xf3, 0x9d, 0x1e, 0x74, 0xb7, 0x39, 0xd6, 0xb6, 0x39, 0x1c, 0xe6, 0xba, 0x83, 0x47, 0x41, 0x95, 0xd5, 0x92, 0xc9, 0x1d, 0x49, 0x71, 0x79, 0xb9, 0x23, 0x8b, 0xba, 0x3a, 0xdf, 0xe9,
0xf5, 0x92, 0x3c, 0x79, 0x8e, 0xff, 0x3e, 0x5c, 0xde, 0x14, 0x37, 0x47, 0x7e, 0x5d, 0x81, 0xc5, 0x41, 0x77, 0x9b, 0x63, 0x6d, 0x9b, 0xc3, 0x61, 0xae, 0x3b, 0x78, 0xb4, 0x2f, 0xc9, 0x93, 0xe7,
0x4e, 0x17, 0x56, 0xf3, 0x55, 0xca, 0xc6, 0x1e, 0xc2, 0xd2, 0x36, 0x3f, 0x9a, 0x9c, 0xec, 0xf1, 0xfe, 0x1f, 0xc0, 0xe5, 0x4d, 0x71, 0xd3, 0xe4, 0xeb, 0x0a, 0x44, 0x76, 0xba, 0xb0, 0x9a, 0xaf,
0xb3, 0xac, 0x21, 0x06, 0xf5, 0xe4, 0x34, 0x3a, 0x97, 0xf3, 0x43, 0xbf, 0xd9, 0x35, 0x80, 0x21, 0x52, 0x36, 0xf6, 0x10, 0x96, 0xb6, 0xf9, 0xe1, 0xe4, 0xf8, 0x09, 0x3f, 0xcd, 0x1a, 0x62, 0x50,
0x96, 0xf1, 0x92, 0x31, 0xef, 0xab, 0x5b, 0xc1, 0x84, 0x1c, 0x8e, 0x79, 0xdf, 0xf9, 0x08, 0x98, 0x4f, 0x4e, 0xa2, 0x33, 0x39, 0x3f, 0xf4, 0x9b, 0x5d, 0x03, 0x18, 0x62, 0x19, 0x2f, 0x19, 0xf3,
0x59, 0x8f, 0x9c, 0x2f, 0xd4, 0xad, 0x27, 0x47, 0x5e, 0x72, 0x91, 0xa4, 0x7c, 0xa4, 0xae, 0x3b, 0xbe, 0xba, 0x45, 0x4c, 0xc8, 0xc1, 0x98, 0xf7, 0x9d, 0x0f, 0x81, 0x99, 0xf5, 0xc8, 0xf9, 0x42,
0x9b, 0x90, 0x73, 0x1b, 0xda, 0x07, 0xfe, 0x85, 0xcb, 0xbf, 0x90, 0xef, 0x95, 0xac, 0xc1, 0xdc, 0x5d, 0x7c, 0x72, 0xe8, 0x25, 0xe7, 0x49, 0xca, 0x47, 0xea, 0x7a, 0xb4, 0x09, 0x39, 0xb7, 0xa1,
0xd8, 0xbf, 0x40, 0x7e, 0xd6, 0xe6, 0x7f, 0xca, 0x76, 0xfe, 0xb4, 0x06, 0xb3, 0xa2, 0x24, 0xd6, 0xbd, 0xef, 0x9f, 0xbb, 0xfc, 0x73, 0xf9, 0xbe, 0xc9, 0x1a, 0xcc, 0x8d, 0xfd, 0x73, 0xe4, 0x67,
0x3a, 0xe0, 0x49, 0x1a, 0x84, 0xc4, 0x63, 0xaa, 0x56, 0x03, 0x2a, 0x08, 0xcc, 0x6a, 0x89, 0xc0, 0xed, 0x2e, 0xa0, 0x6c, 0xe7, 0x4f, 0x6a, 0x30, 0x2b, 0x4a, 0x62, 0xad, 0x03, 0x9e, 0xa4, 0x41,
0x94, 0x36, 0x29, 0x75, 0xbb, 0x52, 0x92, 0xac, 0x85, 0xa1, 0xd8, 0xca, 0x6e, 0x08, 0x08, 0x4a, 0x48, 0x3c, 0xa6, 0x6a, 0x35, 0xa0, 0x82, 0xc0, 0xac, 0x96, 0x08, 0x4c, 0x69, 0xc3, 0x52, 0xb7,
0xcd, 0x80, 0x9c, 0x7f, 0x2d, 0xd3, 0xe0, 0x45, 0xff, 0xd4, 0x5e, 0x20, 0x65, 0xa2, 0x09, 0x95, 0x31, 0x25, 0xc9, 0x5a, 0x18, 0x8a, 0xad, 0xec, 0x46, 0x81, 0xa0, 0xd4, 0x0c, 0xc8, 0xf9, 0xe3,
0x9e, 0x13, 0xe6, 0x54, 0x3c, 0x76, 0xee, 0x9c, 0x50, 0x38, 0x0f, 0x34, 0xde, 0xe2, 0x3c, 0x20, 0x32, 0x8d, 0x5f, 0xf4, 0x4f, 0xed, 0x05, 0x52, 0x26, 0x9a, 0x50, 0xe9, 0xb9, 0x62, 0x4e, 0xc5,
0x0c, 0x55, 0xaf, 0x3b, 0x0f, 0xc0, 0xdb, 0x9c, 0x07, 0xde, 0xc6, 0xaf, 0xd5, 0x83, 0x06, 0xed, 0x6f, 0xe7, 0xce, 0x15, 0x85, 0xf3, 0x43, 0xe3, 0x02, 0xe7, 0x07, 0x61, 0xd8, 0x7a, 0xd3, 0xf9,
0xe9, 0x86, 0x88, 0x54, 0x69, 0xe4, 0x17, 0x6d, 0x4e, 0x99, 0xb7, 0xf8, 0x45, 0xda, 0x53, 0x5c, 0x01, 0x2e, 0x72, 0x7e, 0xb8, 0x88, 0x1f, 0xac, 0x07, 0x0d, 0xda, 0xd3, 0x0d, 0x11, 0xa9, 0xd2,
0x9d, 0xef, 0x8c, 0x60, 0x4e, 0x82, 0xa8, 0x8a, 0x1d, 0x05, 0xa9, 0xb4, 0x5c, 0xe2, 0x4f, 0xa4, 0xc8, 0x2f, 0xda, 0xfc, 0x32, 0x6f, 0xf1, 0x8b, 0xb4, 0xbf, 0xb8, 0x3a, 0xdf, 0x19, 0xc1, 0x9c,
0xc8, 0xd0, 0x1f, 0xa9, 0xdb, 0xe8, 0xf4, 0x1b, 0x87, 0x4c, 0x97, 0x62, 0xbf, 0x98, 0x04, 0x31, 0x04, 0x51, 0x15, 0x3b, 0x0c, 0x52, 0x69, 0xe9, 0xc4, 0x9f, 0x48, 0x91, 0xa1, 0x3f, 0x52, 0xb7,
0x1f, 0xa8, 0x7b, 0x5d, 0x06, 0x44, 0x91, 0xb8, 0x89, 0xf7, 0x32, 0x8c, 0xce, 0x43, 0x79, 0xb3, 0xd7, 0xe9, 0x37, 0x0e, 0x99, 0x2e, 0xd1, 0x7e, 0x3e, 0x09, 0x62, 0x3e, 0x50, 0xf7, 0xc0, 0x0c,
0x4b, 0xa7, 0x1d, 0x06, 0x1d, 0x7a, 0x95, 0x02, 0x8f, 0xd3, 0x8a, 0x2d, 0xff, 0x6e, 0x05, 0x3a, 0x88, 0x22, 0x77, 0x13, 0xef, 0x55, 0x18, 0x9d, 0x85, 0xf2, 0x26, 0x98, 0x4e, 0x3b, 0x0c, 0x3a,
0x92, 0x41, 0x74, 0x9e, 0x72, 0x42, 0xbf, 0xee, 0xfa, 0xe2, 0x4d, 0x98, 0xa7, 0xc3, 0xbc, 0xde, 0xf4, 0x8a, 0x05, 0x1e, 0xbf, 0x15, 0x5b, 0xfe, 0xdd, 0x0a, 0x74, 0x24, 0x83, 0xe8, 0x3c, 0xe5,
0x2a, 0xa4, 0x43, 0xd7, 0x02, 0xb1, 0xbf, 0x2a, 0x14, 0x6e, 0x14, 0x0c, 0x25, 0xbd, 0x99, 0x90, 0xb4, 0x7e, 0xd3, 0x75, 0xc7, 0x9b, 0x30, 0x4f, 0x87, 0x7f, 0xbd, 0x55, 0x48, 0x07, 0xb0, 0x05,
0xda, 0x6d, 0x62, 0x5f, 0x06, 0xf1, 0x57, 0x5c, 0x9d, 0x76, 0xfe, 0xb8, 0x02, 0x4b, 0x46, 0x87, 0x62, 0x7f, 0x55, 0xe8, 0xdc, 0x28, 0x18, 0x4a, 0x7a, 0x33, 0x21, 0xb5, 0xdb, 0xc4, 0xbe, 0x0c,
0x25, 0x83, 0x7d, 0x0a, 0x6d, 0xfd, 0xf8, 0x0b, 0xd7, 0xca, 0xd0, 0x9a, 0x2d, 0x11, 0xb2, 0xcf, 0xfa, 0xaf, 0xb8, 0x3a, 0xed, 0xfc, 0x51, 0x05, 0x96, 0x8c, 0x0e, 0x4b, 0x06, 0xfb, 0x04, 0xda,
0xac, 0xc2, 0x44, 0xa7, 0xfe, 0x05, 0x75, 0x30, 0x99, 0x8c, 0xa4, 0x16, 0x62, 0x42, 0xb8, 0xfe, 0xfa, 0xb1, 0x18, 0xae, 0x95, 0xa1, 0x35, 0x5b, 0x22, 0x64, 0x9f, 0x59, 0x85, 0x89, 0x4e, 0xfd,
0xe7, 0x9c, 0xbf, 0xd4, 0x45, 0x84, 0x1e, 0x64, 0x61, 0xe4, 0x04, 0x89, 0xc2, 0xf4, 0x54, 0x17, 0x73, 0xea, 0x60, 0x32, 0x19, 0x49, 0x2d, 0xc4, 0x84, 0x70, 0xfd, 0xcf, 0x38, 0x7f, 0xa5, 0x8b,
0xaa, 0x4b, 0x27, 0x88, 0x09, 0x3a, 0xff, 0xa9, 0x0a, 0xcb, 0xc2, 0xaa, 0x24, 0xad, 0x79, 0xfa, 0x08, 0x3d, 0xc8, 0xc2, 0xc8, 0x69, 0x12, 0x85, 0xe9, 0x89, 0x2e, 0x54, 0x97, 0x4e, 0x13, 0x13,
0xfe, 0xfd, 0xac, 0x30, 0xb0, 0x09, 0x61, 0xb3, 0x7b, 0xc9, 0x95, 0x69, 0xf6, 0xbd, 0xb7, 0xb4, 0x74, 0xfe, 0x73, 0x15, 0x96, 0x85, 0x15, 0x4a, 0x5a, 0xff, 0xf4, 0x7d, 0xfd, 0x59, 0x61, 0x90,
0x84, 0xe9, 0xdb, 0x02, 0x53, 0xd6, 0xa2, 0x56, 0xb6, 0x16, 0xaf, 0x99, 0xe9, 0x32, 0x7f, 0xd4, 0x13, 0xc2, 0x66, 0xf7, 0x92, 0x2b, 0xd3, 0xec, 0xfb, 0x17, 0xb4, 0x9c, 0xe9, 0xdb, 0x05, 0x53,
0x4c, 0xb9, 0x3f, 0xea, 0xed, 0xfc, 0x3f, 0x85, 0x90, 0xfa, 0x39, 0x59, 0xca, 0x0a, 0xa9, 0xdf, 0xd6, 0xa2, 0x56, 0xb6, 0x16, 0x6f, 0x98, 0xe9, 0x32, 0xff, 0xd5, 0x4c, 0xb9, 0xff, 0xea, 0x62,
0x80, 0x35, 0x0b, 0x20, 0x39, 0x1b, 0x1c, 0x07, 0x5c, 0xdd, 0x95, 0x5b, 0x4a, 0x78, 0xea, 0x59, 0xfe, 0xa2, 0x42, 0x08, 0xfe, 0x9c, 0x2c, 0x65, 0x85, 0xe0, 0x6f, 0xc0, 0x9a, 0x05, 0x90, 0x9c,
0x45, 0x1e, 0xcc, 0xc1, 0x4c, 0xd2, 0x8f, 0xc6, 0xdc, 0x59, 0x85, 0x15, 0x7b, 0x72, 0xa5, 0x74, 0x0d, 0x8e, 0x02, 0xae, 0xee, 0xd6, 0x2d, 0x25, 0x3c, 0xf5, 0xac, 0x22, 0x0f, 0xe6, 0x60, 0x26,
0xff, 0x45, 0x05, 0xba, 0x0f, 0x85, 0x23, 0x3f, 0x08, 0x4f, 0x76, 0x83, 0x24, 0x8d, 0x62, 0xfd, 0xe9, 0x47, 0x63, 0xee, 0xac, 0xc2, 0x8a, 0x3d, 0xb9, 0x52, 0xba, 0xff, 0xb2, 0x02, 0xdd, 0x87,
0x4c, 0xca, 0x75, 0x80, 0x24, 0xf5, 0x63, 0x79, 0xde, 0x13, 0x4a, 0xaa, 0x81, 0xe0, 0x1c, 0xf1, 0xc2, 0xf1, 0x1f, 0x84, 0xc7, 0xbb, 0x41, 0x92, 0x46, 0xb1, 0x7e, 0x56, 0xe5, 0x3a, 0x40, 0x92,
0x70, 0x20, 0x72, 0x05, 0x6d, 0xe8, 0x74, 0xe1, 0x10, 0x20, 0x6d, 0x6e, 0x96, 0x2a, 0x7d, 0x4b, 0xfa, 0xb1, 0x3c, 0x1f, 0x0a, 0x25, 0xd5, 0x40, 0x70, 0x8e, 0x78, 0x38, 0x10, 0xb9, 0x82, 0x36,
0xdc, 0xf4, 0xc1, 0xc9, 0xe0, 0x67, 0xb4, 0x65, 0x0a, 0x43, 0x56, 0x0e, 0x75, 0x7e, 0xbf, 0x0a, 0x74, 0xba, 0x70, 0x08, 0x90, 0x36, 0x3a, 0x4b, 0x95, 0xbe, 0x25, 0x6e, 0x06, 0xe1, 0x64, 0xf0,
0x8b, 0x59, 0x27, 0x29, 0xc2, 0xcc, 0x16, 0xbc, 0x52, 0x7f, 0xce, 0x04, 0xaf, 0xf4, 0x8f, 0x79, 0x53, 0xda, 0x32, 0x85, 0xe1, 0x2b, 0x87, 0x3a, 0xbf, 0x5f, 0x85, 0xc5, 0xac, 0x93, 0x14, 0x91,
0x01, 0x2a, 0xd4, 0x86, 0xd9, 0xcd, 0x40, 0xd9, 0x4d, 0x68, 0xa9, 0x54, 0x34, 0x49, 0x8d, 0xf7, 0x66, 0x0b, 0x5e, 0xa9, 0x3f, 0x67, 0x82, 0x57, 0xfa, 0xd3, 0xbc, 0x00, 0x15, 0x6a, 0xc3, 0x4c,
0x0a, 0x4c, 0x58, 0xc4, 0xe3, 0xa3, 0x4a, 0x2f, 0x8f, 0x27, 0x32, 0x45, 0x77, 0x27, 0x47, 0x29, 0x67, 0xa0, 0xec, 0x26, 0xb4, 0x54, 0x2a, 0x9a, 0xa4, 0xc6, 0xfb, 0x06, 0x26, 0x2c, 0xe2, 0xf7,
0x7d, 0x29, 0xd6, 0x54, 0x25, 0x51, 0x36, 0xa1, 0x2e, 0x2c, 0xd6, 0x90, 0xf4, 0x60, 0x53, 0x47, 0x51, 0xa5, 0x97, 0xc7, 0x13, 0x99, 0xa2, 0xbb, 0x96, 0xa3, 0x94, 0xbe, 0x14, 0x6b, 0xaa, 0x92,
0x6c, 0xe8, 0x77, 0x9e, 0x34, 0xcf, 0x8b, 0x1a, 0xb3, 0xcb, 0x14, 0x75, 0xd7, 0x84, 0x94, 0xd9, 0x28, 0x9b, 0x50, 0x17, 0x16, 0x6b, 0x48, 0x7a, 0xb0, 0xa9, 0x23, 0x36, 0xf4, 0xbb, 0x50, 0x9a,
0x23, 0x9a, 0x18, 0x41, 0x01, 0x75, 0xd7, 0xc2, 0x9c, 0xdf, 0xab, 0xc0, 0x95, 0x92, 0x65, 0x94, 0xe7, 0x45, 0x8d, 0xd9, 0xe5, 0x8b, 0xba, 0x6b, 0x42, 0xca, 0x4c, 0x12, 0x4d, 0xac, 0x63, 0xab,
0x32, 0x60, 0x1b, 0x96, 0x8e, 0x75, 0xa6, 0x9a, 0x6a, 0x21, 0x08, 0x56, 0x95, 0xb4, 0xb5, 0xa7, 0x85, 0x39, 0xbf, 0x57, 0x81, 0x2b, 0x25, 0xcb, 0x28, 0x65, 0xc0, 0x36, 0x2c, 0x1d, 0xe9, 0x4c,
0xd7, 0x2d, 0x7e, 0xa0, 0x8f, 0x49, 0x62, 0xf1, 0xac, 0xbb, 0x33, 0xc5, 0x0c, 0xe7, 0x00, 0x7a, 0x35, 0xd5, 0x42, 0x10, 0xac, 0x2a, 0x69, 0x6b, 0x4f, 0xaf, 0x5b, 0xfc, 0x40, 0x1f, 0x93, 0xc4,
0x3b, 0xaf, 0x50, 0xa4, 0x6c, 0x99, 0x8f, 0x76, 0x2a, 0xca, 0xda, 0x28, 0x88, 0xcc, 0x37, 0x5b, 0xe2, 0x59, 0x77, 0x6d, 0x8a, 0x19, 0xce, 0x3e, 0xf4, 0x76, 0x5e, 0xa3, 0x48, 0xd9, 0x32, 0x1f,
0x5b, 0x8f, 0x61, 0xde, 0xaa, 0x8b, 0x7d, 0xe7, 0x6d, 0x2b, 0x31, 0xb9, 0xff, 0x86, 0x5c, 0x75, 0xf9, 0x54, 0x94, 0xb5, 0x51, 0x10, 0x99, 0x6f, 0xb7, 0xce, 0x1e, 0xc1, 0xbc, 0x55, 0x17, 0xfb,
0xf1, 0xea, 0xa8, 0xba, 0xc1, 0x63, 0x40, 0xce, 0x19, 0x2c, 0x3e, 0x99, 0x0c, 0xd3, 0x20, 0x7b, 0xee, 0x45, 0x2b, 0x31, 0xb9, 0xff, 0x86, 0x5c, 0x75, 0xf1, 0x4a, 0xa9, 0xba, 0xf1, 0x63, 0x40,
0x81, 0x94, 0x7d, 0x4f, 0x7e, 0x44, 0x55, 0xa8, 0xa9, 0x2b, 0x6d, 0xca, 0x2c, 0x87, 0x33, 0x36, 0xce, 0x29, 0x2c, 0x3e, 0x9d, 0x0c, 0xd3, 0x20, 0x7b, 0xb1, 0x94, 0x7d, 0x5f, 0x7e, 0x44, 0x55,
0xc2, 0x9a, 0xbc, 0x62, 0x8b, 0xc5, 0x0c, 0xe7, 0x0a, 0xac, 0x65, 0x4d, 0x8a, 0xb9, 0x53, 0xdb, 0xa8, 0xa9, 0x2b, 0x6d, 0xca, 0x2c, 0x87, 0x33, 0x36, 0xc2, 0x9a, 0xbc, 0x62, 0x8b, 0xc5, 0x0c,
0xce, 0x1f, 0x54, 0x44, 0x18, 0xaa, 0xfd, 0x20, 0x2a, 0x7b, 0x04, 0xcb, 0x49, 0x10, 0x9e, 0x0c, 0xe7, 0x0a, 0xac, 0x65, 0x4d, 0x8a, 0xb9, 0x53, 0xdb, 0xce, 0x1f, 0x54, 0x44, 0xd8, 0xaa, 0xfd,
0xb9, 0x59, 0x4f, 0x22, 0x67, 0xe2, 0xb2, 0xdd, 0x3d, 0xf9, 0x68, 0xaa, 0x5b, 0xf6, 0x05, 0x12, 0x80, 0x2a, 0x7b, 0x04, 0xcb, 0x49, 0x10, 0x1e, 0x0f, 0xb9, 0x59, 0x4f, 0x22, 0x67, 0xe2, 0xb2,
0x48, 0x79, 0x47, 0x33, 0x02, 0xc9, 0x4d, 0x49, 0xd9, 0x00, 0x3e, 0x83, 0x05, 0xbb, 0x31, 0xf6, 0xdd, 0x3d, 0xf9, 0xc8, 0xaa, 0x5b, 0xf6, 0x05, 0x12, 0x48, 0x79, 0x47, 0x33, 0x02, 0xc9, 0x4d,
0xb1, 0xbc, 0x78, 0x93, 0xf5, 0xcc, 0x74, 0x8f, 0xda, 0x94, 0x61, 0x95, 0x74, 0x7e, 0x5e, 0x81, 0x49, 0xd9, 0x00, 0x3e, 0x85, 0x05, 0xbb, 0x31, 0xf6, 0x91, 0xbc, 0xa8, 0x93, 0xf5, 0xcc, 0x74,
0xae, 0xcb, 0x91, 0x8c, 0xb9, 0xd1, 0xa8, 0xa4, 0x9e, 0x4f, 0x0b, 0xd5, 0x4e, 0x1f, 0xb0, 0xbe, 0xa7, 0xda, 0x94, 0x61, 0x95, 0x74, 0x7e, 0x51, 0x81, 0xae, 0xcb, 0x91, 0x8c, 0xb9, 0xd1, 0xa8,
0xd0, 0xa3, 0xc6, 0xba, 0x3e, 0x75, 0x51, 0x76, 0x2f, 0x95, 0x8c, 0xea, 0x41, 0x03, 0x66, 0xe5, 0xa4, 0x9e, 0x4f, 0x0a, 0xd5, 0x4e, 0x1f, 0xb0, 0xbe, 0x00, 0xa4, 0xc6, 0xba, 0x3e, 0x75, 0x51,
0xf8, 0xd6, 0xe0, 0xb2, 0xec, 0x92, 0xea, 0x4e, 0xe6, 0x57, 0xb3, 0x1a, 0xb5, 0xfc, 0x6a, 0x3d, 0x76, 0x2f, 0x95, 0x8c, 0xea, 0x41, 0x03, 0x66, 0xe5, 0xf8, 0xd6, 0xe0, 0xb2, 0xec, 0x92, 0xea,
0xe8, 0x8a, 0xd7, 0x70, 0xcc, 0x71, 0xc8, 0x0f, 0xb7, 0x81, 0x3d, 0xf1, 0xfb, 0x7e, 0x1c, 0x45, 0x4e, 0xe6, 0x87, 0xb3, 0x1a, 0xb5, 0xfc, 0x70, 0x3d, 0xe8, 0x8a, 0xd7, 0x73, 0xcc, 0x71, 0xc8,
0xe1, 0x01, 0x8f, 0x65, 0xdc, 0x20, 0x69, 0x8d, 0xe4, 0x76, 0x52, 0x0a, 0xae, 0x48, 0xa9, 0x07, 0x0f, 0xb7, 0x81, 0x3d, 0xf5, 0xfb, 0x7e, 0x1c, 0x45, 0xe1, 0x3e, 0x8f, 0x65, 0x9c, 0x21, 0x69,
0x5c, 0xa2, 0x50, 0x3d, 0x94, 0x23, 0x52, 0x8e, 0x0b, 0xcb, 0x0f, 0xfc, 0x97, 0x5c, 0xd5, 0x94, 0x8d, 0xe4, 0xa6, 0x52, 0x0a, 0xae, 0x48, 0xa9, 0x07, 0x5f, 0xa2, 0x50, 0x3d, 0xac, 0x23, 0x52,
0xcd, 0x52, 0x6b, 0xac, 0x2b, 0x55, 0x73, 0xaf, 0xee, 0xd4, 0x15, 0x9b, 0x75, 0xcd, 0xd2, 0xce, 0x8e, 0x0b, 0xcb, 0x0f, 0xfc, 0x57, 0x5c, 0xd5, 0x94, 0xcd, 0x52, 0x6b, 0xac, 0x2b, 0x55, 0x73,
0x06, 0xac, 0xd8, 0x75, 0x4a, 0x51, 0xd2, 0x83, 0xc6, 0x48, 0x62, 0xb2, 0x77, 0x3a, 0x7d, 0xf7, 0xaf, 0xee, 0xe0, 0x15, 0x9b, 0x75, 0xcd, 0xd2, 0xce, 0x06, 0xac, 0xd8, 0x75, 0x4a, 0x51, 0xd2,
0x2b, 0x68, 0x19, 0x2f, 0x1c, 0xb1, 0x35, 0x58, 0x7e, 0xf1, 0xf8, 0xd9, 0xfe, 0xce, 0xe1, 0xa1, 0x83, 0xc6, 0x48, 0x62, 0xb2, 0x77, 0x3a, 0x7d, 0xf7, 0x4b, 0x68, 0x19, 0x2f, 0x22, 0xb1, 0x35,
0x77, 0xf0, 0xfc, 0xc1, 0xe7, 0x3b, 0x3f, 0xf4, 0x76, 0x37, 0x0f, 0x77, 0x3b, 0x97, 0xd8, 0x2a, 0x58, 0x7e, 0xf9, 0xf8, 0xf9, 0xde, 0xce, 0xc1, 0x81, 0xb7, 0xff, 0xe2, 0xc1, 0x67, 0x3b, 0x3f,
0xb0, 0xfd, 0x9d, 0xc3, 0x67, 0x3b, 0xdb, 0x16, 0x5e, 0x61, 0xd7, 0xa1, 0xf7, 0x7c, 0xff, 0xf9, 0xf2, 0x76, 0x37, 0x0f, 0x76, 0x3b, 0x97, 0xd8, 0x2a, 0xb0, 0xbd, 0x9d, 0x83, 0xe7, 0x3b, 0xdb,
0xe1, 0xce, 0xb6, 0x57, 0xf6, 0x5d, 0x95, 0x5d, 0x83, 0x2b, 0x32, 0xbf, 0xe4, 0xf3, 0xda, 0xdd, 0x16, 0x5e, 0x61, 0xd7, 0xa1, 0xf7, 0x62, 0xef, 0xc5, 0xc1, 0xce, 0xb6, 0x57, 0xf6, 0x5d, 0x95,
0x4f, 0xa1, 0x93, 0x37, 0x0f, 0x5a, 0x66, 0xd5, 0xd7, 0xd9, 0x5f, 0x37, 0x7e, 0x5e, 0x83, 0x05, 0x5d, 0x83, 0x2b, 0x32, 0xbf, 0xe4, 0xf3, 0xda, 0xdd, 0x4f, 0xa0, 0x93, 0x37, 0x27, 0x5a, 0x66,
0x11, 0x18, 0x2c, 0x9e, 0x14, 0xe6, 0x31, 0x7b, 0x02, 0x73, 0xf2, 0x6d, 0x6a, 0xa6, 0x48, 0xcb, 0xd8, 0x37, 0xd9, 0x6b, 0x37, 0x7e, 0x51, 0x83, 0x05, 0x11, 0x48, 0x2c, 0x9e, 0x20, 0xe6, 0x31,
0x7e, 0x0d, 0xbb, 0xb7, 0x9a, 0x87, 0xe5, 0xb2, 0x2e, 0xff, 0x95, 0x7f, 0xf7, 0xdf, 0xfe, 0x56, 0x7b, 0x0a, 0x73, 0xf2, 0x2d, 0x6b, 0xa6, 0x48, 0xcb, 0x7e, 0x3d, 0xbb, 0xb7, 0x9a, 0x87, 0xe5,
0x75, 0x9e, 0xb5, 0xee, 0x9d, 0x7d, 0x78, 0xef, 0x84, 0x87, 0x09, 0xd6, 0xf1, 0x3b, 0x00, 0xd9, 0xb2, 0x2e, 0xff, 0x95, 0x7f, 0xff, 0xdf, 0xff, 0x56, 0x75, 0x9e, 0xb5, 0xee, 0x9d, 0x7e, 0x70,
0x8b, 0xcb, 0xac, 0xab, 0xad, 0x51, 0xb9, 0xe7, 0xa8, 0x7b, 0x57, 0x4a, 0x72, 0x64, 0xbd, 0x57, 0xef, 0x98, 0x87, 0x09, 0xd6, 0xf1, 0x3b, 0x00, 0xd9, 0x0b, 0xcd, 0xac, 0xab, 0xad, 0x51, 0xb9,
0xa8, 0xde, 0x65, 0x67, 0x01, 0xeb, 0x0d, 0xc2, 0x20, 0x15, 0xaf, 0x2f, 0x7f, 0x52, 0xb9, 0xcb, 0xe7, 0xab, 0x7b, 0x57, 0x4a, 0x72, 0x64, 0xbd, 0x57, 0xa8, 0xde, 0x65, 0x67, 0x01, 0xeb, 0x0d,
0x06, 0xd0, 0x36, 0xdf, 0x42, 0x66, 0xca, 0x4d, 0x5a, 0xf2, 0x9a, 0x73, 0xef, 0x9d, 0xd2, 0x3c, 0xc2, 0x20, 0x15, 0xaf, 0x35, 0x7f, 0x5c, 0xb9, 0xcb, 0x06, 0xd0, 0x36, 0xdf, 0x4e, 0x66, 0xca,
0x45, 0xcb, 0xd4, 0xc6, 0x65, 0xa7, 0x83, 0x6d, 0x4c, 0xa8, 0x44, 0xd6, 0xca, 0x50, 0x70, 0x78, 0xad, 0x5a, 0xf2, 0xfa, 0x73, 0xef, 0x9d, 0xd2, 0x3c, 0x45, 0xcb, 0xd4, 0xc6, 0x65, 0xa7, 0x83,
0xf6, 0xe4, 0x31, 0xbb, 0x6a, 0x30, 0x5d, 0xe1, 0xc1, 0xe5, 0xde, 0xb5, 0x29, 0xb9, 0xb2, 0xad, 0x6d, 0x4c, 0xa8, 0x44, 0xd6, 0xca, 0x50, 0x70, 0x78, 0xf6, 0x44, 0x32, 0xbb, 0x6a, 0x30, 0x5d,
0x6b, 0xd4, 0xd6, 0x9a, 0xc3, 0xb0, 0xad, 0x3e, 0x95, 0x51, 0x0f, 0x2e, 0x7f, 0x52, 0xb9, 0xbb, 0xe1, 0x81, 0xe6, 0xde, 0xb5, 0x29, 0xb9, 0xb2, 0xad, 0x6b, 0xd4, 0xd6, 0x9a, 0xc3, 0xb0, 0xad,
0xf1, 0xaf, 0x6f, 0x43, 0x53, 0x87, 0x50, 0xb0, 0x9f, 0xc2, 0xbc, 0x15, 0xb9, 0xcd, 0xd4, 0x30, 0x3e, 0x95, 0x51, 0x0f, 0x34, 0x7f, 0x5c, 0xb9, 0xbb, 0xf1, 0x6f, 0x6e, 0x43, 0x53, 0x87, 0x5c,
0xca, 0x02, 0xbd, 0x7b, 0x57, 0xcb, 0x33, 0x65, 0xc3, 0xd7, 0xa9, 0xe1, 0x2e, 0x5b, 0xc5, 0x86, 0xb0, 0x9f, 0xc1, 0xbc, 0x15, 0xe9, 0xcd, 0xd4, 0x30, 0xca, 0x02, 0xc3, 0x7b, 0x57, 0xcb, 0x33,
0x65, 0xe8, 0xf3, 0x3d, 0xba, 0x83, 0x20, 0xae, 0x3c, 0xbf, 0x34, 0x24, 0x99, 0x68, 0xec, 0x6a, 0x65, 0xc3, 0xd7, 0xa9, 0xe1, 0x2e, 0x5b, 0xc5, 0x86, 0x65, 0xa8, 0xf4, 0x3d, 0xba, 0xb3, 0x20,
0x5e, 0xb8, 0x58, 0xad, 0x5d, 0x9b, 0x92, 0x2b, 0x9b, 0xbb, 0x4a, 0xcd, 0xad, 0xb2, 0x15, 0xb3, 0xae, 0x48, 0xbf, 0x32, 0x24, 0x99, 0x68, 0xec, 0x6a, 0x5e, 0xb8, 0x58, 0xad, 0x5d, 0x9b, 0x92,
0x39, 0x1d, 0xd6, 0xc0, 0xe9, 0x9e, 0xbf, 0xf9, 0x1a, 0x30, 0xbb, 0xa6, 0x09, 0xab, 0xec, 0x95, 0x2b, 0x9b, 0xbb, 0x4a, 0xcd, 0xad, 0xb2, 0x15, 0xb3, 0x39, 0x1d, 0x06, 0xc1, 0xe9, 0x5d, 0x00,
0x60, 0x4d, 0x22, 0xc5, 0xa7, 0x82, 0x9d, 0x2e, 0x35, 0xc5, 0x18, 0x2d, 0x9f, 0xf9, 0x18, 0x30, 0xf3, 0xf5, 0x60, 0x76, 0x4d, 0x13, 0x56, 0xd9, 0xab, 0xc2, 0x9a, 0x44, 0x8a, 0x4f, 0x0b, 0x3b,
0x3b, 0x82, 0x96, 0xf1, 0xd8, 0x1e, 0xbb, 0x32, 0xf5, 0x61, 0xc0, 0x5e, 0xaf, 0x2c, 0xab, 0x6c, 0x5d, 0x6a, 0x8a, 0x31, 0x5a, 0x3e, 0xf3, 0xf1, 0x60, 0x76, 0x08, 0x2d, 0xe3, 0x71, 0x3e, 0x76,
0x28, 0x66, 0xfd, 0xf7, 0x50, 0xd1, 0xf9, 0x31, 0x34, 0xf5, 0xf3, 0x6d, 0x6c, 0xcd, 0x78, 0x4e, 0x65, 0xea, 0x43, 0x82, 0xbd, 0x5e, 0x59, 0x56, 0xd9, 0x50, 0xcc, 0xfa, 0xef, 0xa1, 0xa2, 0xf3,
0xcf, 0x7c, 0x6e, 0xae, 0xd7, 0x2d, 0x66, 0x94, 0x11, 0x9f, 0x59, 0x3b, 0x12, 0xdf, 0x0b, 0x68, 0x13, 0x68, 0xea, 0xe7, 0xde, 0xd8, 0x9a, 0xf1, 0xfc, 0x9e, 0xf9, 0x3c, 0x5d, 0xaf, 0x5b, 0xcc,
0x19, 0x4f, 0xb4, 0xe9, 0x01, 0x14, 0x9f, 0x81, 0xd3, 0x03, 0x28, 0x79, 0xd1, 0xcd, 0x59, 0xa2, 0x28, 0x23, 0x3e, 0xb3, 0x76, 0x24, 0xbe, 0x97, 0xd0, 0x32, 0x9e, 0x74, 0xd3, 0x03, 0x28, 0x3e,
0x26, 0x5a, 0xac, 0x49, 0xf4, 0x9d, 0xbe, 0x8a, 0x12, 0xb6, 0x07, 0x97, 0xa5, 0xc4, 0x3e, 0xe2, 0x1b, 0xa7, 0x07, 0x50, 0xf2, 0x02, 0x9c, 0xb3, 0x44, 0x4d, 0xb4, 0x58, 0x93, 0xe8, 0x3b, 0x7d,
0x5f, 0x67, 0x19, 0x4a, 0x1e, 0x60, 0xbe, 0x5f, 0x61, 0x9f, 0x42, 0x43, 0xbd, 0xc4, 0xc7, 0x56, 0x1d, 0x25, 0xec, 0x09, 0x5c, 0x96, 0x12, 0xfb, 0x90, 0x7f, 0x95, 0x65, 0x28, 0x79, 0xb0, 0xf9,
0xcb, 0x5f, 0x14, 0xec, 0xad, 0x15, 0x70, 0x29, 0x5e, 0x7f, 0x08, 0x90, 0xbd, 0x07, 0xa7, 0x85, 0x7e, 0x85, 0x7d, 0x02, 0x0d, 0xf5, 0x72, 0x1f, 0x5b, 0x2d, 0x7f, 0x81, 0xb0, 0xb7, 0x56, 0xc0,
0x44, 0xe1, 0x7d, 0x39, 0x4d, 0x01, 0xc5, 0xc7, 0xe3, 0x9c, 0x55, 0x1a, 0x60, 0x87, 0x91, 0x90, 0xa5, 0x78, 0xfd, 0x11, 0x40, 0xf6, 0x7e, 0x9c, 0x16, 0x12, 0x85, 0xf7, 0xe8, 0x34, 0x05, 0x14,
0x08, 0xf9, 0xb9, 0x7a, 0xd2, 0xe3, 0x27, 0xd0, 0x32, 0x9e, 0x84, 0xd3, 0xd3, 0x57, 0x7c, 0x4e, 0x1f, 0x9b, 0x73, 0x56, 0x69, 0x80, 0x1d, 0x46, 0x42, 0x22, 0xe4, 0x67, 0xea, 0x09, 0x90, 0x9f,
0x4e, 0x4f, 0x5f, 0xc9, 0x0b, 0x72, 0x4e, 0x8f, 0x6a, 0x5f, 0x71, 0x16, 0xb1, 0xf6, 0x24, 0x38, 0x42, 0xcb, 0x78, 0x42, 0x4e, 0x4f, 0x5f, 0xf1, 0xf9, 0x39, 0x3d, 0x7d, 0x25, 0x2f, 0xce, 0x39,
0x09, 0x47, 0xa2, 0x00, 0x2e, 0xd0, 0x29, 0xcc, 0x5b, 0xef, 0xbe, 0x69, 0x0e, 0x2d, 0x7b, 0x55, 0x3d, 0xaa, 0x7d, 0xc5, 0x59, 0xc4, 0xda, 0x93, 0xe0, 0x38, 0x1c, 0x89, 0x02, 0xb8, 0x40, 0x27,
0x4e, 0x73, 0x68, 0xe9, 0x53, 0x71, 0x8a, 0xce, 0x9c, 0x25, 0x6c, 0xe7, 0x8c, 0x8a, 0x18, 0x2d, 0x30, 0x6f, 0xbd, 0x13, 0xa7, 0x39, 0xb4, 0xec, 0x15, 0x3a, 0xcd, 0xa1, 0xa5, 0x4f, 0xcb, 0x29,
0xfd, 0x08, 0x5a, 0xc6, 0x1b, 0x6e, 0x7a, 0x2c, 0xc5, 0xe7, 0xe2, 0xf4, 0x58, 0xca, 0x9e, 0x7c, 0x3a, 0x73, 0x96, 0xb0, 0x9d, 0x53, 0x2a, 0x62, 0xb4, 0xf4, 0x63, 0x68, 0x19, 0x6f, 0xbe, 0xe9,
0x5b, 0xa1, 0x36, 0x16, 0x1c, 0x22, 0x05, 0x7a, 0x9c, 0x02, 0xeb, 0xfe, 0x29, 0x2c, 0xd8, 0xaf, 0xb1, 0x14, 0x9f, 0x97, 0xd3, 0x63, 0x29, 0x7b, 0x22, 0x6e, 0x85, 0xda, 0x58, 0x70, 0x88, 0x14,
0xba, 0x69, 0xde, 0x2f, 0x7d, 0x1f, 0x4e, 0xf3, 0xfe, 0x94, 0xa7, 0xe0, 0x24, 0x49, 0xdf, 0x5d, 0xe8, 0x31, 0x0b, 0xac, 0xfb, 0x67, 0xb0, 0x60, 0xbf, 0x02, 0xa7, 0x79, 0xbf, 0xf4, 0x3d, 0x39,
0xd6, 0x8d, 0xdc, 0xfb, 0x52, 0x06, 0x61, 0x7e, 0xc5, 0xbe, 0x8f, 0x02, 0x4e, 0xbe, 0x16, 0xc2, 0xcd, 0xfb, 0x53, 0x9e, 0x8e, 0x93, 0x24, 0x7d, 0x77, 0x59, 0x37, 0x72, 0xef, 0x0b, 0x19, 0xb4,
0xd6, 0x0c, 0xaa, 0x35, 0xdf, 0x14, 0xd1, 0xfc, 0x52, 0x78, 0x58, 0xc4, 0x26, 0x66, 0xf1, 0xbc, 0xf9, 0x25, 0xfb, 0x01, 0x0a, 0x38, 0xf9, 0xba, 0x08, 0x5b, 0x33, 0xa8, 0xd6, 0x7c, 0x83, 0x44,
0x06, 0xed, 0x5a, 0xf4, 0x6a, 0x88, 0xb1, 0x6b, 0x99, 0x0f, 0x8b, 0x18, 0xbb, 0x96, 0xf5, 0xb8, 0xf3, 0x4b, 0xe1, 0x21, 0x12, 0x9b, 0x98, 0xc5, 0x73, 0x1c, 0xb4, 0x6b, 0xd1, 0x2b, 0x23, 0xc6,
0x48, 0x7e, 0xd7, 0x4a, 0x03, 0xac, 0x23, 0x84, 0xc5, 0xdc, 0xed, 0x32, 0xcd, 0x15, 0xe5, 0x17, 0xae, 0x65, 0x3e, 0x44, 0x62, 0xec, 0x5a, 0xd6, 0x63, 0x24, 0xf9, 0x5d, 0x2b, 0x0d, 0xb0, 0x8e,
0x80, 0x7b, 0xd7, 0x5f, 0x7f, 0x29, 0xcd, 0x96, 0x20, 0x4a, 0x08, 0xde, 0x53, 0xd7, 0xad, 0x7f, 0x10, 0x16, 0x73, 0xb7, 0xd1, 0x34, 0x57, 0x94, 0x5f, 0x18, 0xee, 0x5d, 0x7f, 0xf3, 0x25, 0x36,
0x17, 0xda, 0xe6, 0x4b, 0x53, 0xcc, 0x64, 0xe5, 0x7c, 0x4b, 0xef, 0x94, 0xe6, 0xd9, 0x8b, 0xcb, 0x5b, 0x82, 0x28, 0x21, 0x78, 0x4f, 0x5d, 0xcf, 0xfe, 0x5d, 0x68, 0x9b, 0x2f, 0x53, 0x31, 0x93,
0xda, 0x66, 0x33, 0xec, 0x07, 0xb0, 0xaa, 0x59, 0xdd, 0xbc, 0xb0, 0x94, 0xb0, 0x77, 0x4b, 0xae, 0x95, 0xf3, 0x2d, 0xbd, 0x53, 0x9a, 0x67, 0x2f, 0x2e, 0x6b, 0x9b, 0xcd, 0xb0, 0x1f, 0xc2, 0xaa,
0x31, 0x99, 0x7a, 0x5c, 0xef, 0xca, 0xd4, 0x7b, 0x4e, 0xf7, 0x2b, 0x48, 0x34, 0xf6, 0xf3, 0x3d, 0x66, 0x75, 0xf3, 0x82, 0x53, 0xc2, 0xde, 0x2d, 0xb9, 0xf6, 0x64, 0xea, 0x71, 0xbd, 0x2b, 0x53,
0xd9, 0x86, 0x51, 0xf6, 0x6a, 0x51, 0xb6, 0x61, 0x94, 0xbe, 0xf9, 0xa3, 0x88, 0x86, 0x2d, 0x5b, 0xef, 0x45, 0xdd, 0xaf, 0x20, 0xd1, 0xd8, 0xcf, 0xfd, 0x64, 0x1b, 0x46, 0xd9, 0x2b, 0x47, 0xd9,
0x73, 0x24, 0xe2, 0x55, 0xd8, 0x8f, 0x60, 0xd1, 0xb8, 0x12, 0x7a, 0x78, 0x11, 0xf6, 0x35, 0x03, 0x86, 0x51, 0xfa, 0x46, 0x90, 0x22, 0x1a, 0xb6, 0x6c, 0xcd, 0x91, 0x88, 0x6f, 0x61, 0x3f, 0x86,
0x14, 0x5f, 0x2c, 0xe8, 0x95, 0x9d, 0x52, 0x9c, 0x35, 0xaa, 0x7f, 0xc9, 0xb1, 0x26, 0x07, 0x89, 0x45, 0xe3, 0x0a, 0xe9, 0xc1, 0x79, 0xd8, 0xd7, 0x0c, 0x50, 0x7c, 0xe1, 0xa0, 0x57, 0x76, 0x4a,
0x7f, 0x0b, 0x5a, 0xe6, 0x75, 0xd3, 0xd7, 0xd4, 0xbb, 0x66, 0x64, 0x99, 0x97, 0xed, 0xef, 0x57, 0x71, 0xd6, 0xa8, 0xfe, 0x25, 0xc7, 0x9a, 0x1c, 0x24, 0xfe, 0x2d, 0x68, 0x99, 0xd7, 0x53, 0xdf,
0xd8, 0x81, 0x88, 0x5b, 0xd4, 0x4f, 0x09, 0x47, 0x71, 0x7e, 0xfb, 0xb4, 0x9f, 0x18, 0xd6, 0x0b, 0x50, 0xef, 0x9a, 0x91, 0x65, 0x5e, 0xce, 0xbf, 0x5f, 0x61, 0xfb, 0x22, 0xce, 0x51, 0x3f, 0x3d,
0x59, 0xf6, 0xb8, 0xf4, 0x9d, 0xca, 0xfd, 0x0a, 0xfb, 0x7b, 0x15, 0x68, 0x5b, 0xd7, 0x41, 0xad, 0x1c, 0xc5, 0xf9, 0xed, 0xd3, 0x7e, 0x92, 0x58, 0x2f, 0x64, 0xd9, 0x63, 0xd4, 0x77, 0x2a, 0xf7,
0x28, 0xb0, 0x5c, 0xcf, 0xba, 0x66, 0x9e, 0xd9, 0x35, 0xc7, 0xa5, 0x61, 0xef, 0xdd, 0xfd, 0xcc, 0x2b, 0xec, 0xef, 0x55, 0xa0, 0x6d, 0x5d, 0x1f, 0xb5, 0xa2, 0xc6, 0x72, 0x3d, 0xeb, 0x9a, 0x79,
0x9a, 0xd6, 0x2f, 0x2d, 0x53, 0xdd, 0x7a, 0xfe, 0x3d, 0xe1, 0xaf, 0xf2, 0x05, 0xcc, 0x77, 0x22, 0x66, 0xd7, 0x1c, 0x97, 0x86, 0xfd, 0xe4, 0xee, 0xa7, 0xd6, 0xb4, 0x7e, 0x61, 0x99, 0xea, 0xd6,
0xbe, 0xba, 0x5f, 0x61, 0x7f, 0x58, 0x81, 0x05, 0xdb, 0x76, 0xae, 0x87, 0x5b, 0x6a, 0xa5, 0xd7, 0xf3, 0xef, 0x0f, 0x7f, 0x99, 0x2f, 0x60, 0xbe, 0x2b, 0xf1, 0xe5, 0xfd, 0x0a, 0xfb, 0xc3, 0x0a,
0x8b, 0x3f, 0xc5, 0xe0, 0xfe, 0x23, 0xea, 0xe5, 0xb3, 0xbb, 0xae, 0xd5, 0x4b, 0xf9, 0x54, 0xd4, 0x2c, 0xd8, 0xb6, 0x73, 0x3d, 0xdc, 0x52, 0x2b, 0xbd, 0x5e, 0xfc, 0x29, 0x06, 0xf7, 0x1f, 0x53,
0xaf, 0xd6, 0x5b, 0xf6, 0x89, 0x78, 0xa6, 0x5f, 0xb9, 0x0d, 0x59, 0xf1, 0x59, 0x77, 0x4d, 0x30, 0x2f, 0x9f, 0xdf, 0x75, 0xad, 0x5e, 0xca, 0xa7, 0xa5, 0x7e, 0xbd, 0xde, 0xb2, 0x8f, 0xc5, 0xb3,
0xe6, 0xe3, 0xe9, 0xb4, 0x08, 0x3f, 0x11, 0xef, 0xe8, 0x2a, 0xdf, 0x13, 0xd2, 0xdd, 0xdb, 0x7e, 0xfe, 0xca, 0x6d, 0xc8, 0x8a, 0xcf, 0xc0, 0x6b, 0x82, 0x31, 0x1f, 0x5b, 0xa7, 0x45, 0xf8, 0xa9,
0xef, 0xdc, 0xa4, 0x31, 0x5d, 0x77, 0xae, 0x58, 0x63, 0xca, 0xef, 0xf0, 0x9b, 0xa2, 0x77, 0xf2, 0x78, 0x77, 0x57, 0xf9, 0x9e, 0x90, 0xee, 0x2e, 0xfa, 0xbd, 0x73, 0x93, 0xc6, 0x74, 0xdd, 0xb9,
0xdd, 0xf3, 0x6c, 0x8b, 0x2a, 0xbc, 0x85, 0x3e, 0xbd, 0x93, 0x23, 0xd1, 0x49, 0x59, 0xdc, 0x62, 0x62, 0x8d, 0x29, 0xbf, 0xc3, 0x6f, 0x8a, 0xde, 0xc9, 0x77, 0xd2, 0xb3, 0x2d, 0xaa, 0xf0, 0x76,
0x8e, 0xb7, 0xac, 0xc6, 0xb9, 0x4b, 0x7d, 0xbd, 0xe9, 0xbc, 0x3b, 0xb5, 0xaf, 0xf7, 0xc8, 0x02, 0xfa, 0xf4, 0x4e, 0x8e, 0x44, 0x27, 0x65, 0x71, 0x8b, 0x39, 0x2e, 0x58, 0x8d, 0x73, 0x97, 0xfa,
0x8e, 0x3d, 0x3e, 0x00, 0xc8, 0xdc, 0xfc, 0x2c, 0xe7, 0x62, 0xd6, 0x22, 0xa3, 0x18, 0x09, 0x60, 0x7a, 0xd3, 0x79, 0x77, 0x6a, 0x5f, 0xef, 0x91, 0x05, 0x1c, 0x7b, 0xbc, 0x0f, 0x90, 0xb9, 0xf9,
0x73, 0xa0, 0xf2, 0x44, 0x63, 0x8d, 0x3f, 0x16, 0x02, 0xf0, 0xb1, 0x72, 0x4e, 0x9b, 0x6a, 0x8e, 0x59, 0xce, 0xc5, 0xac, 0x45, 0x46, 0x31, 0x12, 0xc0, 0xe6, 0x40, 0xe5, 0x89, 0xc6, 0x1a, 0x7f,
0xed, 0x8b, 0xb7, 0xd4, 0x9c, 0x7c, 0xfd, 0x96, 0xf8, 0xd3, 0x9e, 0xee, 0xe7, 0x30, 0xbf, 0x17, 0x22, 0x04, 0xe0, 0x63, 0xe5, 0x9c, 0x36, 0xd5, 0x1c, 0xdb, 0x17, 0x6f, 0xa9, 0x39, 0xf9, 0xfa,
0x45, 0x2f, 0x27, 0x63, 0x1d, 0xa0, 0x65, 0x3b, 0xa7, 0x76, 0xfd, 0xe4, 0xb4, 0x97, 0x1b, 0x85, 0x2d, 0xf1, 0xa7, 0x3d, 0xdd, 0x2f, 0x60, 0xfe, 0x49, 0x14, 0xbd, 0x9a, 0x8c, 0x75, 0x40, 0x97,
0x73, 0x83, 0xaa, 0xea, 0xb1, 0xae, 0x51, 0xd5, 0xbd, 0x2f, 0xb3, 0x10, 0x82, 0xaf, 0x98, 0x0f, 0xed, 0x9c, 0xda, 0xf5, 0x93, 0x93, 0x5e, 0x6e, 0x14, 0xce, 0x0d, 0xaa, 0xaa, 0xc7, 0xba, 0x46,
0x4b, 0x5a, 0xaa, 0xea, 0x8e, 0xf7, 0xec, 0x6a, 0x2c, 0x59, 0x9a, 0x6f, 0xc2, 0xd2, 0xc7, 0x55, 0x55, 0xf7, 0xbe, 0xc8, 0x42, 0x08, 0xbe, 0x64, 0x3e, 0x2c, 0x69, 0xa9, 0xaa, 0x3b, 0xde, 0xb3,
0x6f, 0xef, 0x25, 0xaa, 0x4e, 0x92, 0x29, 0xed, 0x6d, 0xde, 0xa7, 0x9b, 0x62, 0xe4, 0xe1, 0x59, 0xab, 0xb1, 0x64, 0x69, 0xbe, 0x09, 0x4b, 0x1f, 0x57, 0xbd, 0xbd, 0x97, 0xa8, 0x3a, 0x49, 0xa6,
0xce, 0x3a, 0xae, 0x5d, 0x43, 0xbd, 0x79, 0x0b, 0xb4, 0x77, 0x9a, 0xb1, 0x7f, 0x11, 0xf3, 0x2f, 0xb4, 0xb7, 0x79, 0x9f, 0x6e, 0x96, 0x91, 0x87, 0x67, 0x39, 0xeb, 0xb8, 0x76, 0x0d, 0xf5, 0xe6,
0xee, 0x7d, 0x29, 0x7d, 0x47, 0x5f, 0xa9, 0x9d, 0x46, 0x39, 0xd7, 0xac, 0x9d, 0x26, 0xe7, 0x8d, 0x2d, 0xd0, 0xde, 0x69, 0xc6, 0xfe, 0x79, 0xcc, 0x3f, 0xbf, 0xf7, 0x85, 0xf4, 0x1d, 0x7d, 0xa9,
0xb3, 0x76, 0x9a, 0x82, 0x37, 0xce, 0x9a, 0x6a, 0xe5, 0xdc, 0x63, 0x43, 0x58, 0x2a, 0x38, 0xf0, 0x76, 0x1a, 0xe5, 0x5c, 0xb3, 0x76, 0x9a, 0x9c, 0x37, 0xce, 0xda, 0x69, 0x0a, 0xde, 0x38, 0x6b,
0xf4, 0x26, 0x33, 0xcd, 0xed, 0xd7, 0xbb, 0x31, 0xbd, 0x80, 0xdd, 0xda, 0x5d, 0xbb, 0xb5, 0x43, 0xaa, 0x95, 0x73, 0x8f, 0x0d, 0x61, 0xa9, 0xe0, 0xc0, 0xd3, 0x9b, 0xcc, 0x34, 0xb7, 0x5f, 0xef,
0x98, 0xdf, 0xe6, 0x62, 0xb2, 0x44, 0x44, 0x7a, 0xee, 0x4e, 0xb1, 0x19, 0xef, 0x9e, 0xdf, 0x12, 0xc6, 0xf4, 0x02, 0x76, 0x6b, 0x77, 0xed, 0xd6, 0x0e, 0x60, 0x7e, 0x9b, 0x8b, 0xc9, 0x12, 0x11,
0x28, 0xcf, 0x56, 0x25, 0x28, 0x14, 0x9c, 0xfd, 0x18, 0x5a, 0x8f, 0x78, 0xaa, 0x42, 0xd0, 0xb5, 0xec, 0xb9, 0x3b, 0xc8, 0x66, 0x7c, 0x7c, 0x7e, 0x4b, 0xa0, 0x3c, 0x5b, 0x95, 0xa0, 0xd0, 0x71,
0x32, 0x9b, 0x8b, 0x49, 0xef, 0x95, 0x44, 0xb0, 0xdb, 0x34, 0x43, 0xb5, 0xdd, 0xe3, 0x83, 0x13, 0xf6, 0x13, 0x68, 0x3d, 0xe2, 0xa9, 0x0a, 0x59, 0xd7, 0xca, 0x6c, 0x2e, 0x86, 0xbd, 0x57, 0x12,
0x2e, 0x84, 0x93, 0x17, 0x0c, 0xbe, 0x62, 0x7f, 0x91, 0x2a, 0xd7, 0x77, 0x70, 0x56, 0x8d, 0x78, 0xf1, 0x6e, 0xd3, 0x0c, 0xd5, 0x76, 0x8f, 0x0f, 0x8e, 0xb9, 0x10, 0x4e, 0x5e, 0x30, 0xf8, 0x92,
0x62, 0xb3, 0xf2, 0xc5, 0x1c, 0x5e, 0x56, 0x73, 0x18, 0x0d, 0xb8, 0xa1, 0x54, 0x85, 0xd0, 0x32, 0xfd, 0x45, 0xaa, 0x5c, 0xdf, 0xd9, 0x59, 0x35, 0xe2, 0x8f, 0xcd, 0xca, 0x17, 0x73, 0x78, 0x59,
0xee, 0xf0, 0x69, 0x06, 0x2a, 0x5e, 0x79, 0xd4, 0x0c, 0x54, 0x72, 0xe5, 0xcf, 0xb9, 0x43, 0xed, 0xcd, 0x61, 0x34, 0xe0, 0x86, 0x52, 0x15, 0x42, 0xcb, 0xb8, 0xf3, 0xa7, 0x19, 0xa8, 0x78, 0x45,
0x38, 0xec, 0x46, 0xd6, 0x8e, 0xb8, 0xe6, 0x97, 0xb5, 0x74, 0xef, 0x4b, 0x7f, 0x94, 0x7e, 0xc5, 0x52, 0x33, 0x50, 0xc9, 0x15, 0x41, 0xe7, 0x0e, 0xb5, 0xe3, 0xb0, 0x1b, 0x59, 0x3b, 0xe2, 0x5a,
0x5e, 0xd0, 0xd3, 0x6d, 0x66, 0x88, 0x7d, 0xa6, 0x9d, 0xe7, 0xa3, 0xf1, 0xf5, 0x64, 0x19, 0x59, 0x60, 0xd6, 0xd2, 0xbd, 0x2f, 0xfc, 0x51, 0xfa, 0x25, 0x7b, 0x49, 0x4f, 0xbd, 0x99, 0x21, 0xf9,
0xb6, 0xc6, 0x2e, 0x9a, 0x22, 0xdd, 0xeb, 0x7b, 0x00, 0x87, 0x69, 0x34, 0xde, 0xf6, 0xf9, 0x28, 0x99, 0x76, 0x9e, 0x8f, 0xde, 0xd7, 0x93, 0x65, 0x64, 0xd9, 0x1a, 0xbb, 0x68, 0x8a, 0x74, 0xaf,
0x0a, 0x33, 0x59, 0x9b, 0x05, 0x78, 0x67, 0xf2, 0xcb, 0x88, 0xf2, 0x66, 0x2f, 0x8c, 0xe3, 0x8c, 0xef, 0x03, 0x1c, 0xa4, 0xd1, 0x78, 0xdb, 0xe7, 0xa3, 0x28, 0xcc, 0x64, 0x6d, 0x16, 0x10, 0x9e,
0x75, 0x4b, 0x41, 0x11, 0xd7, 0xd4, 0x18, 0x70, 0x3d, 0x21, 0x25, 0x71, 0xe0, 0xf7, 0x2b, 0x6c, 0xc9, 0x2f, 0x23, 0x2a, 0x9c, 0xbd, 0x34, 0x8e, 0x33, 0xd6, 0xad, 0x06, 0x45, 0x5c, 0x53, 0x63,
0x13, 0x20, 0xf3, 0xe0, 0xea, 0xc3, 0x49, 0xc1, 0x39, 0xac, 0xc5, 0x5e, 0x89, 0xbb, 0xf7, 0x00, 0xc6, 0xf5, 0x84, 0x94, 0xc4, 0x8d, 0xdf, 0xaf, 0xb0, 0x4d, 0x80, 0xcc, 0x83, 0xab, 0x0f, 0x27,
0x9a, 0x99, 0xdf, 0x6c, 0x2d, 0xbb, 0xd1, 0x6b, 0x79, 0xd9, 0xf4, 0x0e, 0x5e, 0xf0, 0x66, 0x39, 0x05, 0xe7, 0xb0, 0x16, 0x7b, 0x25, 0xee, 0xde, 0x7d, 0x68, 0x66, 0x7e, 0xb3, 0xb5, 0xec, 0x06,
0x1d, 0x9a, 0x2a, 0x60, 0x0d, 0x9c, 0x2a, 0x72, 0x51, 0x05, 0xb0, 0x2c, 0x3a, 0xa8, 0x15, 0x1c, 0xb0, 0xe5, 0x65, 0xd3, 0x3b, 0x78, 0xc1, 0x9b, 0xe5, 0x74, 0x68, 0xaa, 0x80, 0x35, 0x70, 0xaa,
0x0a, 0x4c, 0x56, 0x23, 0x29, 0xf1, 0x28, 0x69, 0x6e, 0x2e, 0x75, 0x88, 0x58, 0x36, 0x16, 0xa4, 0xc8, 0x45, 0x15, 0xc0, 0xb2, 0xe8, 0xa0, 0x56, 0x70, 0x28, 0x90, 0x59, 0x8d, 0xa4, 0xc4, 0xa3,
0x56, 0x11, 0x14, 0x8d, 0xa2, 0x79, 0x04, 0x4b, 0x05, 0x1b, 0xbb, 0x66, 0xe9, 0x69, 0x4e, 0x14, 0xa4, 0xb9, 0xb9, 0xd4, 0x21, 0x62, 0xd9, 0x58, 0x90, 0x5a, 0x45, 0x10, 0x35, 0x8a, 0xe6, 0x11,
0xcd, 0xd2, 0x53, 0xcd, 0xf3, 0xce, 0x65, 0x6a, 0x72, 0xd1, 0x01, 0x3a, 0x53, 0x9d, 0x07, 0x69, 0x2c, 0x15, 0x6c, 0xec, 0x9a, 0xa5, 0xa7, 0x39, 0x51, 0x34, 0x4b, 0x4f, 0x35, 0xcf, 0x3b, 0x97,
0xff, 0x14, 0x9b, 0xfb, 0x83, 0x0a, 0x2c, 0x97, 0x98, 0xd0, 0xd9, 0x7b, 0xea, 0x78, 0x3e, 0xd5, 0xa9, 0xc9, 0x45, 0x07, 0xe8, 0x4c, 0x75, 0x16, 0xa4, 0xfd, 0x13, 0x6c, 0xee, 0x0f, 0x2a, 0xb0,
0xbc, 0xde, 0x2b, 0xb5, 0xb0, 0x3a, 0x87, 0xd4, 0xce, 0x13, 0xf6, 0xb9, 0xb5, 0xb1, 0x09, 0xe3, 0x5c, 0x62, 0x42, 0x67, 0xef, 0xa9, 0xe3, 0xf9, 0x54, 0xf3, 0x7a, 0xaf, 0xd4, 0xc2, 0xea, 0x1c,
0xa6, 0xe4, 0xcc, 0xd7, 0x2a, 0x15, 0xa5, 0x1a, 0xc5, 0x17, 0xb0, 0x26, 0x3a, 0xb2, 0x39, 0x1c, 0x50, 0x3b, 0x4f, 0xd9, 0x67, 0xd6, 0xc6, 0x26, 0x8c, 0x9b, 0x92, 0x33, 0xdf, 0xa8, 0x54, 0x94,
0xe6, 0xac, 0xbf, 0xd7, 0x0b, 0xff, 0xca, 0xcb, 0xb2, 0x6a, 0xf7, 0xa6, 0xff, 0xab, 0xaf, 0x29, 0x6a, 0x14, 0x9f, 0xc3, 0x9a, 0xe8, 0xc8, 0xe6, 0x70, 0x98, 0xb3, 0xfe, 0x5e, 0x2f, 0xfc, 0xeb,
0x0a, 0xb0, 0xe8, 0x2a, 0x9b, 0x40, 0x27, 0x6f, 0x51, 0x65, 0xd3, 0xeb, 0xea, 0xbd, 0x6b, 0x1d, 0x2f, 0xcb, 0xaa, 0xdd, 0x9b, 0xfe, 0xaf, 0xc1, 0xa6, 0x28, 0xc0, 0xa2, 0xab, 0x6c, 0x02, 0x9d,
0x34, 0x4b, 0xac, 0xb0, 0xdf, 0xa4, 0xc6, 0xde, 0x75, 0x7a, 0x65, 0xf3, 0x22, 0xce, 0x9e, 0xb8, 0xbc, 0x45, 0x95, 0x4d, 0xaf, 0xab, 0xf7, 0xae, 0x75, 0xd0, 0x2c, 0xb1, 0xc2, 0x7e, 0x93, 0x1a,
0x1e, 0x7f, 0x59, 0x9b, 0x7f, 0x73, 0xe3, 0x54, 0x0d, 0x4c, 0xb3, 0x57, 0xeb, 0xa3, 0x6e, 0xb9, 0x7b, 0xd7, 0xe9, 0x95, 0xcd, 0x8b, 0x38, 0x7b, 0xe2, 0x7a, 0xfc, 0x65, 0x6d, 0xfe, 0xcd, 0x8d,
0xf5, 0xf8, 0x16, 0x35, 0x7f, 0xc3, 0x79, 0xa7, 0xac, 0xf9, 0x58, 0x7c, 0x22, 0x0e, 0xbd, 0x6b, 0x53, 0x35, 0x30, 0xcd, 0x5e, 0xad, 0x8f, 0xba, 0xe5, 0xd6, 0xe3, 0x5b, 0xd4, 0xfc, 0x0d, 0xe7,
0x79, 0xbe, 0x56, 0x3d, 0xb8, 0x51, 0xb6, 0xde, 0x53, 0x4f, 0x2f, 0xb9, 0xb9, 0xbe, 0x44, 0xba, 0x9d, 0xb2, 0xe6, 0x63, 0xf1, 0x89, 0x38, 0xf4, 0xae, 0xe5, 0xf9, 0x5a, 0xf5, 0xe0, 0x46, 0xd9,
0x5d, 0xdb, 0x34, 0xf7, 0x6a, 0xf6, 0x29, 0xb1, 0x2b, 0x6b, 0xf6, 0x29, 0xb3, 0x0f, 0xdb, 0x7a, 0x7a, 0x4f, 0x3d, 0xbd, 0xe4, 0xe6, 0xfa, 0x12, 0xe9, 0x76, 0x6d, 0xd3, 0xdc, 0xab, 0xd9, 0xa7,
0x8d, 0xb2, 0x0c, 0x7f, 0x52, 0xb9, 0xfb, 0xe0, 0xf6, 0x8f, 0xbe, 0x79, 0x12, 0xa4, 0xa7, 0x93, 0xc4, 0xae, 0xac, 0xd9, 0xa7, 0xcc, 0x3e, 0x6c, 0xeb, 0x35, 0xca, 0x32, 0xfc, 0x71, 0xe5, 0xee,
0xa3, 0xf5, 0x7e, 0x34, 0xba, 0x37, 0x54, 0x66, 0x3d, 0x79, 0x59, 0xe7, 0xde, 0x30, 0x1c, 0xdc, 0x83, 0xdb, 0x3f, 0xfe, 0xe6, 0x71, 0x90, 0x9e, 0x4c, 0x0e, 0xd7, 0xfb, 0xd1, 0xe8, 0xde, 0x50,
0xa3, 0x6a, 0x8f, 0x66, 0xe9, 0x7f, 0x0f, 0x7e, 0xe7, 0xff, 0x06, 0x00, 0x00, 0xff, 0xff, 0x55, 0x99, 0xf5, 0xe4, 0xe5, 0x9e, 0x7b, 0xc3, 0x70, 0x70, 0x8f, 0xaa, 0x3d, 0x9c, 0xa5, 0xff, 0x55,
0x01, 0x55, 0xb7, 0xad, 0x70, 0x00, 0x00, 0xf8, 0xdd, 0xff, 0x17, 0x00, 0x00, 0xff, 0xff, 0x44, 0x97, 0x33, 0xa8, 0xdd, 0x70, 0x00, 0x00,
} }
// Reference imports to suppress errors if they are not otherwise used. // Reference imports to suppress errors if they are not otherwise used.

@ -2407,6 +2407,9 @@ message InvoiceHTLC {
/// Custom tlv records. /// Custom tlv records.
map<uint64, bytes> custom_records = 9 [json_name = "custom_records"]; map<uint64, bytes> custom_records = 9 [json_name = "custom_records"];
/// The total amount of the mpp payment in msat.
uint64 mpp_total_amt_msat = 10 [json_name = "mpp_total_amt_msat"];
} }
message AddInvoiceResponse { message AddInvoiceResponse {

@ -2854,6 +2854,11 @@
"format": "byte" "format": "byte"
}, },
"description": "/ Custom tlv records." "description": "/ Custom tlv records."
},
"mpp_total_amt_msat": {
"type": "string",
"format": "uint64",
"description": "/ The total amount of the mpp payment in msat."
} }
}, },
"title": "/ Details of an HTLC that paid to an invoice" "title": "/ Details of an HTLC that paid to an invoice"

@ -4712,13 +4712,29 @@ func testSingleHopSendToRouteCase(net *lntest.NetworkHarness, t *harnessTest,
} }
// Create invoices for Dave, which expect a payment from Carol. // Create invoices for Dave, which expect a payment from Carol.
_, rHashes, _, err := createPayReqs( payReqs, rHashes, _, err := createPayReqs(
dave, paymentAmtSat, numPayments, dave, paymentAmtSat, numPayments,
) )
if err != nil { if err != nil {
t.Fatalf("unable to create pay reqs: %v", err) t.Fatalf("unable to create pay reqs: %v", err)
} }
// Reconstruct payment addresses.
var payAddrs [][]byte
for _, payReq := range payReqs {
ctx, _ := context.WithTimeout(
context.Background(), defaultTimeout,
)
resp, err := dave.DecodePayReq(
ctx,
&lnrpc.PayReqString{PayReq: payReq},
)
if err != nil {
t.Fatalf("decode pay req: %v", err)
}
payAddrs = append(payAddrs, resp.PaymentAddr)
}
// Query for routes to pay from Carol to Dave. // Query for routes to pay from Carol to Dave.
// We set FinalCltvDelta to 40 since by default QueryRoutes returns // We set FinalCltvDelta to 40 since by default QueryRoutes returns
// the last hop with a final cltv delta of 9 where as the default in // the last hop with a final cltv delta of 9 where as the default in
@ -4741,12 +4757,10 @@ func testSingleHopSendToRouteCase(net *lntest.NetworkHarness, t *harnessTest,
// Construct a closure that will set MPP fields on the route, which // Construct a closure that will set MPP fields on the route, which
// allows us to test MPP payments. // allows us to test MPP payments.
setMPPFields := func(i int) { setMPPFields := func(i int) {
addr := [32]byte{byte(i)}
hop := r.Hops[len(r.Hops)-1] hop := r.Hops[len(r.Hops)-1]
hop.TlvPayload = true hop.TlvPayload = true
hop.MppRecord = &lnrpc.MPPRecord{ hop.MppRecord = &lnrpc.MPPRecord{
PaymentAddr: addr[:], PaymentAddr: payAddrs[i],
TotalAmtMsat: paymentAmtSat * 1000, TotalAmtMsat: paymentAmtSat * 1000,
} }
} }
@ -4930,8 +4944,8 @@ func testSingleHopSendToRouteCase(net *lntest.NetworkHarness, t *harnessTest,
hop.MppRecord.TotalAmtMsat) hop.MppRecord.TotalAmtMsat)
} }
expAddr := [32]byte{byte(i)} expAddr := payAddrs[i]
if !bytes.Equal(hop.MppRecord.PaymentAddr, expAddr[:]) { if !bytes.Equal(hop.MppRecord.PaymentAddr, expAddr) {
t.Fatalf("incorrect mpp payment addr for payment %d "+ t.Fatalf("incorrect mpp payment addr for payment %d "+
"want: %x, got: %x", "want: %x, got: %x",
i, expAddr, hop.MppRecord.PaymentAddr) i, expAddr, hop.MppRecord.PaymentAddr)

@ -380,6 +380,9 @@ func newServer(listenAddrs []net.Addr, chanDB *channeldb.DB,
registryConfig := invoices.RegistryConfig{ registryConfig := invoices.RegistryConfig{
FinalCltvRejectDelta: defaultFinalCltvRejectDelta, FinalCltvRejectDelta: defaultFinalCltvRejectDelta,
HtlcHoldDuration: invoices.DefaultHtlcHoldDuration,
Now: time.Now,
TickAfter: time.After,
} }
s := &server{ s := &server{