Merge pull request #3758 from joostjager/anchor-output-poc-joost
cnct: anchor output sweeping and fee bumping
This commit is contained in:
commit
e2052f7f65
@ -4,8 +4,12 @@ package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
"sort"
|
||||
|
||||
"github.com/btcsuite/btcd/chaincfg/chainhash"
|
||||
"github.com/lightningnetwork/lnd/lnrpc"
|
||||
"github.com/lightningnetwork/lnd/lnrpc/walletrpc"
|
||||
"github.com/urfave/cli"
|
||||
)
|
||||
@ -22,6 +26,7 @@ func walletCommands() []cli.Command {
|
||||
Subcommands: []cli.Command{
|
||||
pendingSweepsCommand,
|
||||
bumpFeeCommand,
|
||||
bumpCloseFeeCommand,
|
||||
},
|
||||
},
|
||||
}
|
||||
@ -168,3 +173,130 @@ func bumpFee(ctx *cli.Context) error {
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
var bumpCloseFeeCommand = cli.Command{
|
||||
Name: "bumpclosefee",
|
||||
Usage: "Bumps the fee of a channel closing transaction.",
|
||||
ArgsUsage: "channel_point",
|
||||
Description: `
|
||||
This command allows the fee of a channel closing transaction to be
|
||||
increased by using the child-pays-for-parent mechanism. It will instruct
|
||||
the sweeper to sweep the anchor outputs of transactions in the set
|
||||
of valid commitments for the specified channel at the requested fee
|
||||
rate or confirmation target.
|
||||
`,
|
||||
Flags: []cli.Flag{
|
||||
cli.Uint64Flag{
|
||||
Name: "conf_target",
|
||||
Usage: "the number of blocks that the output should " +
|
||||
"be swept on-chain within",
|
||||
},
|
||||
cli.Uint64Flag{
|
||||
Name: "sat_per_byte",
|
||||
Usage: "a manual fee expressed in sat/byte that " +
|
||||
"should be used when sweeping the output",
|
||||
},
|
||||
},
|
||||
Action: actionDecorator(bumpCloseFee),
|
||||
}
|
||||
|
||||
func bumpCloseFee(ctx *cli.Context) error {
|
||||
// Display the command's help message if we do not have the expected
|
||||
// number of arguments/flags.
|
||||
if ctx.NArg() != 1 {
|
||||
return cli.ShowCommandHelp(ctx, "bumpclosefee")
|
||||
}
|
||||
|
||||
// Validate the channel point.
|
||||
channelPoint := ctx.Args().Get(0)
|
||||
_, err := NewProtoOutPoint(channelPoint)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Fetch all waiting close channels.
|
||||
client, cleanUp := getClient(ctx)
|
||||
defer cleanUp()
|
||||
|
||||
// Fetch waiting close channel commitments.
|
||||
commitments, err := getWaitingCloseCommitments(client, channelPoint)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Retrieve pending sweeps.
|
||||
walletClient, cleanUp := getWalletClient(ctx)
|
||||
defer cleanUp()
|
||||
|
||||
ctxb := context.Background()
|
||||
sweeps, err := walletClient.PendingSweeps(
|
||||
ctxb, &walletrpc.PendingSweepsRequest{},
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Match pending sweeps with commitments of the channel for which a bump
|
||||
// is requested and bump their fees.
|
||||
commitSet := map[string]struct{}{
|
||||
commitments.LocalTxid: {},
|
||||
commitments.RemoteTxid: {},
|
||||
}
|
||||
if commitments.RemotePendingTxid != "" {
|
||||
commitSet[commitments.RemotePendingTxid] = struct{}{}
|
||||
}
|
||||
|
||||
for _, sweep := range sweeps.PendingSweeps {
|
||||
// Only bump anchor sweeps.
|
||||
if sweep.WitnessType != walletrpc.WitnessType_COMMITMENT_ANCHOR {
|
||||
continue
|
||||
}
|
||||
|
||||
// Skip unrelated sweeps.
|
||||
sweepTxID, err := chainhash.NewHash(sweep.Outpoint.TxidBytes)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
if _, match := commitSet[sweepTxID.String()]; !match {
|
||||
continue
|
||||
}
|
||||
|
||||
// Bump fee of the anchor sweep.
|
||||
fmt.Printf("Bumping fee of %v:%v\n",
|
||||
sweepTxID, sweep.Outpoint.OutputIndex)
|
||||
|
||||
_, err = walletClient.BumpFee(ctxb, &walletrpc.BumpFeeRequest{
|
||||
Outpoint: sweep.Outpoint,
|
||||
TargetConf: uint32(ctx.Uint64("conf_target")),
|
||||
SatPerByte: uint32(ctx.Uint64("sat_per_byte")),
|
||||
Force: true,
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func getWaitingCloseCommitments(client lnrpc.LightningClient,
|
||||
channelPoint string) (*lnrpc.PendingChannelsResponse_Commitments,
|
||||
error) {
|
||||
|
||||
ctxb := context.Background()
|
||||
|
||||
req := &lnrpc.PendingChannelsRequest{}
|
||||
resp, err := client.PendingChannels(ctxb, req)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Lookup the channel commit tx hashes.
|
||||
for _, channel := range resp.WaitingCloseChannels {
|
||||
if channel.Channel.ChannelPoint == channelPoint {
|
||||
return channel.Commitments, nil
|
||||
}
|
||||
}
|
||||
|
||||
return nil, errors.New("channel not found")
|
||||
}
|
||||
|
205
contractcourt/anchor_resolver.go
Normal file
205
contractcourt/anchor_resolver.go
Normal file
@ -0,0 +1,205 @@
|
||||
package contractcourt
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"io"
|
||||
"sync"
|
||||
|
||||
"github.com/btcsuite/btcd/wire"
|
||||
"github.com/btcsuite/btcutil"
|
||||
"github.com/lightningnetwork/lnd/input"
|
||||
"github.com/lightningnetwork/lnd/lnwallet"
|
||||
"github.com/lightningnetwork/lnd/sweep"
|
||||
)
|
||||
|
||||
// anchorResolver is a resolver that will attempt to sweep our anchor output.
|
||||
type anchorResolver struct {
|
||||
// anchorSignDescriptor contains the information that is required to
|
||||
// sweep the anchor.
|
||||
anchorSignDescriptor input.SignDescriptor
|
||||
|
||||
// anchor is the outpoint on the commitment transaction.
|
||||
anchor wire.OutPoint
|
||||
|
||||
// resolved reflects if the contract has been fully resolved or not.
|
||||
resolved bool
|
||||
|
||||
// broadcastHeight is the height that the original contract was
|
||||
// broadcast to the main-chain at. We'll use this value to bound any
|
||||
// historical queries to the chain for spends/confirmations.
|
||||
broadcastHeight uint32
|
||||
|
||||
// chanPoint is the channel point of the original contract.
|
||||
chanPoint wire.OutPoint
|
||||
|
||||
// currentReport stores the current state of the resolver for reporting
|
||||
// over the rpc interface.
|
||||
currentReport ContractReport
|
||||
|
||||
// reportLock prevents concurrent access to the resolver report.
|
||||
reportLock sync.Mutex
|
||||
|
||||
contractResolverKit
|
||||
}
|
||||
|
||||
// newAnchorResolver instantiates a new anchor resolver.
|
||||
func newAnchorResolver(anchorSignDescriptor input.SignDescriptor,
|
||||
anchor wire.OutPoint, broadcastHeight uint32,
|
||||
chanPoint wire.OutPoint, resCfg ResolverConfig) *anchorResolver {
|
||||
|
||||
amt := btcutil.Amount(anchorSignDescriptor.Output.Value)
|
||||
|
||||
report := ContractReport{
|
||||
Outpoint: anchor,
|
||||
Type: ReportOutputAnchor,
|
||||
Amount: amt,
|
||||
LimboBalance: amt,
|
||||
RecoveredBalance: 0,
|
||||
}
|
||||
|
||||
r := &anchorResolver{
|
||||
contractResolverKit: *newContractResolverKit(resCfg),
|
||||
anchorSignDescriptor: anchorSignDescriptor,
|
||||
anchor: anchor,
|
||||
broadcastHeight: broadcastHeight,
|
||||
chanPoint: chanPoint,
|
||||
currentReport: report,
|
||||
}
|
||||
|
||||
r.initLogger(r)
|
||||
|
||||
return r
|
||||
}
|
||||
|
||||
// ResolverKey returns an identifier which should be globally unique for this
|
||||
// particular resolver within the chain the original contract resides within.
|
||||
func (c *anchorResolver) ResolverKey() []byte {
|
||||
// The anchor resolver is stateless and doesn't need a database key.
|
||||
return nil
|
||||
}
|
||||
|
||||
// Resolve offers the anchor output to the sweeper and waits for it to be swept.
|
||||
func (c *anchorResolver) Resolve() (ContractResolver, error) {
|
||||
// Attempt to update the sweep parameters to the post-confirmation
|
||||
// situation. We don't want to force sweep anymore, because the anchor
|
||||
// lost its special purpose to get the commitment confirmed. It is just
|
||||
// an output that we want to sweep only if it is economical to do so.
|
||||
relayFeeRate := c.Sweeper.RelayFeePerKW()
|
||||
|
||||
resultChan, err := c.Sweeper.UpdateParams(
|
||||
c.anchor,
|
||||
sweep.ParamsUpdate{
|
||||
Fee: sweep.FeePreference{
|
||||
FeeRate: relayFeeRate,
|
||||
},
|
||||
Force: false,
|
||||
},
|
||||
)
|
||||
|
||||
// After a restart or when the remote force closes, the sweeper is not
|
||||
// yet aware of the anchor. In that case, offer it as a new input to the
|
||||
// sweeper. An exclusive group is not necessary anymore, because we know
|
||||
// that this is the only anchor that can be swept.
|
||||
if err == lnwallet.ErrNotMine {
|
||||
anchorInput := input.MakeBaseInput(
|
||||
&c.anchor,
|
||||
input.CommitmentAnchor,
|
||||
&c.anchorSignDescriptor,
|
||||
c.broadcastHeight,
|
||||
)
|
||||
|
||||
resultChan, err = c.Sweeper.SweepInput(
|
||||
&anchorInput,
|
||||
sweep.Params{
|
||||
Fee: sweep.FeePreference{
|
||||
FeeRate: relayFeeRate,
|
||||
},
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
|
||||
var anchorRecovered bool
|
||||
select {
|
||||
case sweepRes := <-resultChan:
|
||||
switch sweepRes.Err {
|
||||
|
||||
// Anchor was swept successfully.
|
||||
case nil:
|
||||
c.log.Debugf("anchor swept by tx %v",
|
||||
sweepRes.Tx.TxHash())
|
||||
|
||||
anchorRecovered = true
|
||||
|
||||
// Anchor was swept by someone else. This is possible after the
|
||||
// 16 block csv lock.
|
||||
case sweep.ErrRemoteSpend:
|
||||
c.log.Warnf("our anchor spent by someone else")
|
||||
|
||||
// The sweeper gave up on sweeping the anchor. This happens
|
||||
// after the maximum number of sweep attempts has been reached.
|
||||
// See sweep.DefaultMaxSweepAttempts. Sweep attempts are
|
||||
// interspaced with random delays picked from a range that
|
||||
// increases exponentially.
|
||||
//
|
||||
// We consider the anchor as being lost.
|
||||
case sweep.ErrTooManyAttempts:
|
||||
c.log.Warnf("anchor sweep abandoned")
|
||||
|
||||
// An unexpected error occurred.
|
||||
default:
|
||||
c.log.Errorf("unable to sweep anchor: %v", sweepRes.Err)
|
||||
|
||||
return nil, sweepRes.Err
|
||||
}
|
||||
|
||||
case <-c.quit:
|
||||
return nil, errResolverShuttingDown
|
||||
}
|
||||
|
||||
// Update report to reflect that funds are no longer in limbo.
|
||||
c.reportLock.Lock()
|
||||
if anchorRecovered {
|
||||
c.currentReport.RecoveredBalance = c.currentReport.LimboBalance
|
||||
}
|
||||
c.currentReport.LimboBalance = 0
|
||||
c.reportLock.Unlock()
|
||||
|
||||
c.resolved = true
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// Stop signals the resolver to cancel any current resolution processes, and
|
||||
// suspend.
|
||||
//
|
||||
// NOTE: Part of the ContractResolver interface.
|
||||
func (c *anchorResolver) Stop() {
|
||||
close(c.quit)
|
||||
}
|
||||
|
||||
// IsResolved returns true if the stored state in the resolve is fully
|
||||
// resolved. In this case the target output can be forgotten.
|
||||
//
|
||||
// NOTE: Part of the ContractResolver interface.
|
||||
func (c *anchorResolver) IsResolved() bool {
|
||||
return c.resolved
|
||||
}
|
||||
|
||||
// report returns a report on the resolution state of the contract.
|
||||
func (c *anchorResolver) report() *ContractReport {
|
||||
c.reportLock.Lock()
|
||||
defer c.reportLock.Unlock()
|
||||
|
||||
reportCopy := c.currentReport
|
||||
return &reportCopy
|
||||
}
|
||||
|
||||
func (c *anchorResolver) Encode(w io.Writer) error {
|
||||
return errors.New("serialization not supported")
|
||||
}
|
||||
|
||||
// A compile time assertion to ensure anchorResolver meets the
|
||||
// ContractResolver interface.
|
||||
var _ ContractResolver = (*anchorResolver)(nil)
|
@ -29,6 +29,11 @@ type ContractResolutions struct {
|
||||
// HtlcResolutions contains all data required to fully resolve any
|
||||
// incoming+outgoing HTLC's present within the commitment transaction.
|
||||
HtlcResolutions lnwallet.HtlcResolutions
|
||||
|
||||
// AnchorResolution contains the data required to sweep the anchor
|
||||
// output. If the channel type doesn't include anchors, the value of
|
||||
// this field will be nil.
|
||||
AnchorResolution *lnwallet.AnchorResolution
|
||||
}
|
||||
|
||||
// IsEmpty returns true if the set of resolutions is "empty". A resolution is
|
||||
@ -37,7 +42,8 @@ type ContractResolutions struct {
|
||||
func (c *ContractResolutions) IsEmpty() bool {
|
||||
return c.CommitResolution == nil &&
|
||||
len(c.HtlcResolutions.IncomingHTLCs) == 0 &&
|
||||
len(c.HtlcResolutions.OutgoingHTLCs) == 0
|
||||
len(c.HtlcResolutions.OutgoingHTLCs) == 0 &&
|
||||
c.AnchorResolution == nil
|
||||
}
|
||||
|
||||
// ArbitratorLog is the primary source of persistent storage for the
|
||||
@ -263,6 +269,10 @@ var (
|
||||
// the full set of resolutions for a channel.
|
||||
resolutionsKey = []byte("resolutions")
|
||||
|
||||
// anchorResolutionKey is the key under the logScope that we'll use to
|
||||
// store the anchor resolution, if any.
|
||||
anchorResolutionKey = []byte("anchor-resolution")
|
||||
|
||||
// actionsBucketKey is the key under the logScope that we'll use to
|
||||
// store all chain actions once they're determined.
|
||||
actionsBucketKey = []byte("chain-actions")
|
||||
@ -362,6 +372,13 @@ func fetchContractWriteBucket(tx *bbolt.Tx, scopeKey []byte) (*bbolt.Bucket, err
|
||||
func (b *boltArbitratorLog) writeResolver(contractBucket *bbolt.Bucket,
|
||||
res ContractResolver) error {
|
||||
|
||||
// Only persist resolvers that are stateful. Stateless resolvers don't
|
||||
// expose a resolver key.
|
||||
resKey := res.ResolverKey()
|
||||
if resKey == nil {
|
||||
return nil
|
||||
}
|
||||
|
||||
// First, we'll write to the buffer the type of this resolver. Using
|
||||
// this byte, we can later properly deserialize the resolver properly.
|
||||
var (
|
||||
@ -390,8 +407,6 @@ func (b *boltArbitratorLog) writeResolver(contractBucket *bbolt.Bucket,
|
||||
return err
|
||||
}
|
||||
|
||||
resKey := res.ResolverKey()
|
||||
|
||||
return contractBucket.Put(resKey, buf.Bytes())
|
||||
}
|
||||
|
||||
@ -630,7 +645,26 @@ func (b *boltArbitratorLog) LogContractResolutions(c *ContractResolutions) error
|
||||
}
|
||||
}
|
||||
|
||||
return scopeBucket.Put(resolutionsKey, b.Bytes())
|
||||
err = scopeBucket.Put(resolutionsKey, b.Bytes())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// Write out the anchor resolution if present.
|
||||
if c.AnchorResolution != nil {
|
||||
var b bytes.Buffer
|
||||
err := encodeAnchorResolution(&b, c.AnchorResolution)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
err = scopeBucket.Put(anchorResolutionKey, b.Bytes())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
}
|
||||
|
||||
@ -710,6 +744,18 @@ func (b *boltArbitratorLog) FetchContractResolutions() (*ContractResolutions, er
|
||||
}
|
||||
}
|
||||
|
||||
anchorResBytes := scopeBucket.Get(anchorResolutionKey)
|
||||
if anchorResBytes != nil {
|
||||
c.AnchorResolution = &lnwallet.AnchorResolution{}
|
||||
resReader := bytes.NewReader(anchorResBytes)
|
||||
err := decodeAnchorResolution(
|
||||
resReader, c.AnchorResolution,
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
})
|
||||
if err != nil {
|
||||
@ -1045,6 +1091,35 @@ func decodeCommitResolution(r io.Reader,
|
||||
return binary.Read(r, endian, &c.MaturityDelay)
|
||||
}
|
||||
|
||||
func encodeAnchorResolution(w io.Writer,
|
||||
a *lnwallet.AnchorResolution) error {
|
||||
|
||||
if _, err := w.Write(a.CommitAnchor.Hash[:]); err != nil {
|
||||
return err
|
||||
}
|
||||
err := binary.Write(w, endian, a.CommitAnchor.Index)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return input.WriteSignDescriptor(w, &a.AnchorSignDescriptor)
|
||||
}
|
||||
|
||||
func decodeAnchorResolution(r io.Reader,
|
||||
a *lnwallet.AnchorResolution) error {
|
||||
|
||||
_, err := io.ReadFull(r, a.CommitAnchor.Hash[:])
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = binary.Read(r, endian, &a.CommitAnchor.Index)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return input.ReadSignDescriptor(r, &a.AnchorSignDescriptor)
|
||||
}
|
||||
|
||||
func encodeHtlcSetKey(w io.Writer, h *HtlcSetKey) error {
|
||||
err := binary.Write(w, endian, h.IsRemote)
|
||||
if err != nil {
|
||||
|
@ -46,6 +46,15 @@ var (
|
||||
Index: 2,
|
||||
}
|
||||
|
||||
testChanPoint3 = wire.OutPoint{
|
||||
Hash: chainhash.Hash{
|
||||
0x48, 0x59, 0xe6, 0x96, 0x31, 0x13, 0xa1, 0x17,
|
||||
0x51, 0xb6, 0x37, 0xd8, 0xfc, 0xd2, 0xc6, 0xda,
|
||||
0x2d, 0xe7, 0x93, 0xe4,
|
||||
},
|
||||
Index: 3,
|
||||
}
|
||||
|
||||
testPreimage = [32]byte{
|
||||
0x52, 0xb6, 0x37, 0xd8, 0xfc, 0xd2, 0xc6, 0xda,
|
||||
0x48, 0x59, 0xe6, 0x96, 0x31, 0x13, 0xa1, 0x17,
|
||||
@ -540,6 +549,10 @@ func TestContractResolutionsStorage(t *testing.T) {
|
||||
},
|
||||
},
|
||||
},
|
||||
AnchorResolution: &lnwallet.AnchorResolution{
|
||||
CommitAnchor: testChanPoint3,
|
||||
AnchorSignDescriptor: testSignDesc,
|
||||
},
|
||||
}
|
||||
|
||||
// First make sure that fetching unlogged contract resolutions will
|
||||
|
@ -220,6 +220,88 @@ func NewChainArbitrator(cfg ChainArbitratorConfig,
|
||||
}
|
||||
}
|
||||
|
||||
// arbChannel is a wrapper around an open channel that channel arbitrators
|
||||
// interact with.
|
||||
type arbChannel struct {
|
||||
// channel is the in-memory channel state.
|
||||
channel *channeldb.OpenChannel
|
||||
|
||||
// c references the chain arbitrator and is used by arbChannel
|
||||
// internally.
|
||||
c *ChainArbitrator
|
||||
}
|
||||
|
||||
// NewAnchorResolutions returns the anchor resolutions for currently valid
|
||||
// commitment transactions.
|
||||
//
|
||||
// NOTE: Part of the ArbChannel interface.
|
||||
func (a *arbChannel) NewAnchorResolutions() ([]*lnwallet.AnchorResolution,
|
||||
error) {
|
||||
|
||||
// Get a fresh copy of the database state to base the anchor resolutions
|
||||
// on. Unfortunately the channel instance that we have here isn't the
|
||||
// same instance that is used by the link.
|
||||
chanPoint := a.channel.FundingOutpoint
|
||||
|
||||
channel, err := a.c.chanSource.FetchChannel(chanPoint)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
chanMachine, err := lnwallet.NewLightningChannel(
|
||||
a.c.cfg.Signer, channel, nil,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return chanMachine.NewAnchorResolutions()
|
||||
}
|
||||
|
||||
// ForceCloseChan should force close the contract that this attendant is
|
||||
// watching over. We'll use this when we decide that we need to go to chain. It
|
||||
// should in addition tell the switch to remove the corresponding link, such
|
||||
// that we won't accept any new updates. The returned summary contains all items
|
||||
// needed to eventually resolve all outputs on chain.
|
||||
//
|
||||
// NOTE: Part of the ArbChannel interface.
|
||||
func (a *arbChannel) ForceCloseChan() (*lnwallet.LocalForceCloseSummary, error) {
|
||||
// First, we mark the channel as borked, this ensure
|
||||
// that no new state transitions can happen, and also
|
||||
// that the link won't be loaded into the switch.
|
||||
if err := a.channel.MarkBorked(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// With the channel marked as borked, we'll now remove
|
||||
// the link from the switch if its there. If the link
|
||||
// is active, then this method will block until it
|
||||
// exits.
|
||||
chanPoint := a.channel.FundingOutpoint
|
||||
|
||||
if err := a.c.cfg.MarkLinkInactive(chanPoint); err != nil {
|
||||
log.Errorf("unable to mark link inactive: %v", err)
|
||||
}
|
||||
|
||||
// Now that we know the link can't mutate the channel
|
||||
// state, we'll read the channel from disk the target
|
||||
// channel according to its channel point.
|
||||
channel, err := a.c.chanSource.FetchChannel(chanPoint)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Finally, we'll force close the channel completing
|
||||
// the force close workflow.
|
||||
chanMachine, err := lnwallet.NewLightningChannel(
|
||||
a.c.cfg.Signer, channel, nil,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return chanMachine.ForceClose()
|
||||
}
|
||||
|
||||
// newActiveChannelArbitrator creates a new instance of an active channel
|
||||
// arbitrator given the state of the target channel.
|
||||
func newActiveChannelArbitrator(channel *channeldb.OpenChannel,
|
||||
@ -247,42 +329,10 @@ func newActiveChannelArbitrator(channel *channeldb.OpenChannel,
|
||||
// all interfaces and methods the arbitrator needs to do its job.
|
||||
arbCfg := ChannelArbitratorConfig{
|
||||
ChanPoint: chanPoint,
|
||||
Channel: c.getArbChannel(channel),
|
||||
ShortChanID: channel.ShortChanID(),
|
||||
BlockEpochs: blockEpoch,
|
||||
ForceCloseChan: func() (*lnwallet.LocalForceCloseSummary, error) {
|
||||
// First, we mark the channel as borked, this ensure
|
||||
// that no new state transitions can happen, and also
|
||||
// that the link won't be loaded into the switch.
|
||||
if err := channel.MarkBorked(); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// With the channel marked as borked, we'll now remove
|
||||
// the link from the switch if its there. If the link
|
||||
// is active, then this method will block until it
|
||||
// exits.
|
||||
if err := c.cfg.MarkLinkInactive(chanPoint); err != nil {
|
||||
log.Errorf("unable to mark link inactive: %v", err)
|
||||
}
|
||||
|
||||
// Now that we know the link can't mutate the channel
|
||||
// state, we'll read the channel from disk the target
|
||||
// channel according to its channel point.
|
||||
channel, err := c.chanSource.FetchChannel(chanPoint)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Finally, we'll force close the channel completing
|
||||
// the force close workflow.
|
||||
chanMachine, err := lnwallet.NewLightningChannel(
|
||||
c.cfg.Signer, channel, nil,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return chanMachine.ForceClose()
|
||||
},
|
||||
MarkCommitmentBroadcasted: channel.MarkCommitmentBroadcasted,
|
||||
MarkChannelClosed: func(summary *channeldb.ChannelCloseSummary,
|
||||
statuses ...channeldb.ChannelStatus) error {
|
||||
@ -339,6 +389,16 @@ func newActiveChannelArbitrator(channel *channeldb.OpenChannel,
|
||||
), nil
|
||||
}
|
||||
|
||||
// getArbChannel returns an open channel wrapper for use by channel arbitrators.
|
||||
func (c *ChainArbitrator) getArbChannel(
|
||||
channel *channeldb.OpenChannel) *arbChannel {
|
||||
|
||||
return &arbChannel{
|
||||
channel: channel,
|
||||
c: c,
|
||||
}
|
||||
}
|
||||
|
||||
// ResolveContract marks a contract as fully resolved within the database.
|
||||
// This is only to be done once all contracts which were live on the channel
|
||||
// before hitting the chain have been resolved.
|
||||
|
@ -35,7 +35,9 @@ func TestChainArbitratorRepublishCloses(t *testing.T) {
|
||||
const numChans = 10
|
||||
var channels []*channeldb.OpenChannel
|
||||
for i := 0; i < numChans; i++ {
|
||||
lChannel, _, cleanup, err := lnwallet.CreateTestChannels(true)
|
||||
lChannel, _, cleanup, err := lnwallet.CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
@ -149,7 +151,9 @@ func TestResolveContract(t *testing.T) {
|
||||
|
||||
// With the DB created, we'll make a new channel, and mark it as
|
||||
// pending open within the database.
|
||||
newChannel, _, cleanup, err := lnwallet.CreateTestChannels(true)
|
||||
newChannel, _, cleanup, err := lnwallet.CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to make new test channel: %v", err)
|
||||
}
|
||||
|
@ -63,7 +63,9 @@ func TestChainWatcherRemoteUnilateralClose(t *testing.T) {
|
||||
|
||||
// First, we'll create two channels which already have established a
|
||||
// commitment contract between themselves.
|
||||
aliceChannel, bobChannel, cleanUp, err := lnwallet.CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := lnwallet.CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -150,7 +152,9 @@ func TestChainWatcherRemoteUnilateralClosePendingCommit(t *testing.T) {
|
||||
|
||||
// First, we'll create two channels which already have established a
|
||||
// commitment contract between themselves.
|
||||
aliceChannel, bobChannel, cleanUp, err := lnwallet.CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := lnwallet.CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -274,7 +278,7 @@ func TestChainWatcherDataLossProtect(t *testing.T) {
|
||||
// First, we'll create two channels which already have
|
||||
// established a commitment contract between themselves.
|
||||
aliceChannel, bobChannel, cleanUp, err := lnwallet.CreateTestChannels(
|
||||
false,
|
||||
channeldb.SingleFunderBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
@ -443,7 +447,7 @@ func TestChainWatcherLocalForceCloseDetect(t *testing.T) {
|
||||
// First, we'll create two channels which already have
|
||||
// established a commitment contract between themselves.
|
||||
aliceChannel, bobChannel, cleanUp, err := lnwallet.CreateTestChannels(
|
||||
false,
|
||||
channeldb.SingleFunderBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
|
@ -13,9 +13,11 @@ import (
|
||||
"github.com/davecgh/go-spew/spew"
|
||||
"github.com/lightningnetwork/lnd/chainntnfs"
|
||||
"github.com/lightningnetwork/lnd/channeldb"
|
||||
"github.com/lightningnetwork/lnd/input"
|
||||
"github.com/lightningnetwork/lnd/lntypes"
|
||||
"github.com/lightningnetwork/lnd/lnwallet"
|
||||
"github.com/lightningnetwork/lnd/lnwire"
|
||||
"github.com/lightningnetwork/lnd/sweep"
|
||||
)
|
||||
|
||||
var (
|
||||
@ -64,6 +66,22 @@ type WitnessBeacon interface {
|
||||
AddPreimages(preimages ...lntypes.Preimage) error
|
||||
}
|
||||
|
||||
// ArbChannel is an abstraction that allows the channel arbitrator to interact
|
||||
// with an open channel.
|
||||
type ArbChannel interface {
|
||||
// ForceCloseChan should force close the contract that this attendant
|
||||
// is watching over. We'll use this when we decide that we need to go
|
||||
// to chain. It should in addition tell the switch to remove the
|
||||
// corresponding link, such that we won't accept any new updates. The
|
||||
// returned summary contains all items needed to eventually resolve all
|
||||
// outputs on chain.
|
||||
ForceCloseChan() (*lnwallet.LocalForceCloseSummary, error)
|
||||
|
||||
// NewAnchorResolutions returns the anchor resolutions for currently
|
||||
// valid commitment transactions.
|
||||
NewAnchorResolutions() ([]*lnwallet.AnchorResolution, error)
|
||||
}
|
||||
|
||||
// ChannelArbitratorConfig contains all the functionality that the
|
||||
// ChannelArbitrator needs in order to properly arbitrate any contract dispute
|
||||
// on chain.
|
||||
@ -72,6 +90,10 @@ type ChannelArbitratorConfig struct {
|
||||
// channel.
|
||||
ChanPoint wire.OutPoint
|
||||
|
||||
// Channel is the full channel data structure. For legacy channels, this
|
||||
// field may not always be set after a restart.
|
||||
Channel ArbChannel
|
||||
|
||||
// ShortChanID describes the exact location of the channel within the
|
||||
// chain. We'll use this to address any messages that we need to send
|
||||
// to the switch during contract resolution.
|
||||
@ -88,14 +110,6 @@ type ChannelArbitratorConfig struct {
|
||||
// channel.
|
||||
ChainEvents *ChainEventSubscription
|
||||
|
||||
// ForceCloseChan should force close the contract that this attendant
|
||||
// is watching over. We'll use this when we decide that we need to go
|
||||
// to chain. It should in addition tell the switch to remove the
|
||||
// corresponding link, such that we won't accept any new updates. The
|
||||
// returned summary contains all items needed to eventually resolve all
|
||||
// outputs on chain.
|
||||
ForceCloseChan func() (*lnwallet.LocalForceCloseSummary, error)
|
||||
|
||||
// MarkCommitmentBroadcasted should mark the channel as the commitment
|
||||
// being broadcast, and we are waiting for the commitment to confirm.
|
||||
MarkCommitmentBroadcasted func(*wire.MsgTx, bool) error
|
||||
@ -148,6 +162,9 @@ const (
|
||||
// ReportOutputUnencumbered is an uncontested output on the commitment
|
||||
// transaction paying to us directly.
|
||||
ReportOutputUnencumbered
|
||||
|
||||
// ReportOutputAnchor is an anchor output on the commitment tx.
|
||||
ReportOutputAnchor
|
||||
)
|
||||
|
||||
// ContractReport provides a summary of a commitment tx output.
|
||||
@ -354,9 +371,6 @@ func (c *ChannelArbitrator) Start() error {
|
||||
return err
|
||||
}
|
||||
|
||||
log.Infof("ChannelArbitrator(%v): starting state=%v", c.cfg.ChanPoint,
|
||||
c.state)
|
||||
|
||||
_, bestHeight, err := c.cfg.ChainIO.GetBestBlock()
|
||||
if err != nil {
|
||||
c.cfg.BlockEpochs.Cancel()
|
||||
@ -391,14 +405,19 @@ func (c *ChannelArbitrator) Start() error {
|
||||
case channeldb.RemoteForceClose:
|
||||
trigger = remoteCloseTrigger
|
||||
}
|
||||
triggerHeight = c.cfg.ClosingHeight
|
||||
|
||||
log.Warnf("ChannelArbitrator(%v): detected stalled "+
|
||||
"state=%v for closed channel, using "+
|
||||
"trigger=%v", c.cfg.ChanPoint, c.state, trigger)
|
||||
"state=%v for closed channel",
|
||||
c.cfg.ChanPoint, c.state)
|
||||
}
|
||||
|
||||
triggerHeight = c.cfg.ClosingHeight
|
||||
}
|
||||
|
||||
log.Infof("ChannelArbitrator(%v): starting state=%v, trigger=%v, "+
|
||||
"triggerHeight=%v", c.cfg.ChanPoint, c.state, trigger,
|
||||
triggerHeight)
|
||||
|
||||
// Next we'll fetch our confirmed commitment set. This will only exist
|
||||
// if the channel has been closed out on chain for modern nodes. For
|
||||
// older nodes, this won't be found at all, and will rely on the
|
||||
@ -451,7 +470,7 @@ func (c *ChannelArbitrator) Start() error {
|
||||
// receive a chain event from the chain watcher than the
|
||||
// commitment has been confirmed on chain, and before we
|
||||
// advance our state step, we call InsertConfirmedCommitSet.
|
||||
if err := c.relaunchResolvers(commitSet); err != nil {
|
||||
if err := c.relaunchResolvers(commitSet, triggerHeight); err != nil {
|
||||
c.cfg.BlockEpochs.Cancel()
|
||||
return err
|
||||
}
|
||||
@ -467,7 +486,9 @@ func (c *ChannelArbitrator) Start() error {
|
||||
// starting the ChannelArbitrator. This information should ideally be stored in
|
||||
// the database, so this only serves as a intermediate work-around to prevent a
|
||||
// migration.
|
||||
func (c *ChannelArbitrator) relaunchResolvers(commitSet *CommitSet) error {
|
||||
func (c *ChannelArbitrator) relaunchResolvers(commitSet *CommitSet,
|
||||
heightHint uint32) error {
|
||||
|
||||
// We'll now query our log to see if there are any active unresolved
|
||||
// contracts. If this is the case, then we'll relaunch all contract
|
||||
// resolvers.
|
||||
@ -542,6 +563,19 @@ func (c *ChannelArbitrator) relaunchResolvers(commitSet *CommitSet) error {
|
||||
htlcResolver.Supplement(*htlc)
|
||||
}
|
||||
|
||||
// The anchor resolver is stateless and can always be re-instantiated.
|
||||
if contractResolutions.AnchorResolution != nil {
|
||||
anchorResolver := newAnchorResolver(
|
||||
contractResolutions.AnchorResolution.AnchorSignDescriptor,
|
||||
contractResolutions.AnchorResolution.CommitAnchor,
|
||||
heightHint, c.cfg.ChanPoint,
|
||||
ResolverConfig{
|
||||
ChannelArbitratorConfig: c.cfg,
|
||||
},
|
||||
)
|
||||
unresolvedContracts = append(unresolvedContracts, anchorResolver)
|
||||
}
|
||||
|
||||
c.launchResolvers(unresolvedContracts)
|
||||
|
||||
return nil
|
||||
@ -559,10 +593,6 @@ func (c *ChannelArbitrator) Report() []*ContractReport {
|
||||
continue
|
||||
}
|
||||
|
||||
if r.IsResolved() {
|
||||
continue
|
||||
}
|
||||
|
||||
report := r.report()
|
||||
if report == nil {
|
||||
continue
|
||||
@ -789,7 +819,7 @@ func (c *ChannelArbitrator) stateStep(
|
||||
// We'll tell the switch that it should remove the link for
|
||||
// this channel, in addition to fetching the force close
|
||||
// summary needed to close this channel on chain.
|
||||
closeSummary, err := c.cfg.ForceCloseChan()
|
||||
closeSummary, err := c.cfg.Channel.ForceCloseChan()
|
||||
if err != nil {
|
||||
log.Errorf("ChannelArbitrator(%v): unable to "+
|
||||
"force close: %v", c.cfg.ChanPoint, err)
|
||||
@ -837,31 +867,49 @@ func (c *ChannelArbitrator) stateStep(
|
||||
// to be confirmed.
|
||||
case StateCommitmentBroadcasted:
|
||||
switch trigger {
|
||||
// We are waiting for a commitment to be confirmed, so any
|
||||
// other trigger will be ignored.
|
||||
|
||||
// We are waiting for a commitment to be confirmed.
|
||||
case chainTrigger, userTrigger:
|
||||
log.Infof("ChannelArbitrator(%v): noop trigger %v",
|
||||
c.cfg.ChanPoint, trigger)
|
||||
// The commitment transaction has been broadcast, but it
|
||||
// doesn't necessarily need to be the commitment
|
||||
// transaction version that is going to be confirmed. To
|
||||
// be sure that any of those versions can be anchored
|
||||
// down, we now submit all anchor resolutions to the
|
||||
// sweeper. The sweeper will keep trying to sweep all of
|
||||
// them.
|
||||
//
|
||||
// Note that the sweeper is idempotent. If we ever
|
||||
// happen to end up at this point in the code again, no
|
||||
// harm is done by re-offering the anchors to the
|
||||
// sweeper.
|
||||
anchors, err := c.cfg.Channel.NewAnchorResolutions()
|
||||
if err != nil {
|
||||
return StateError, closeTx, err
|
||||
}
|
||||
|
||||
err = c.sweepAnchors(anchors, triggerHeight)
|
||||
if err != nil {
|
||||
return StateError, closeTx, err
|
||||
}
|
||||
|
||||
nextState = StateCommitmentBroadcasted
|
||||
|
||||
// If this state advance was triggered by any of the
|
||||
// commitments being confirmed, then we'll jump to the state
|
||||
// where the contract has been closed.
|
||||
case localCloseTrigger, remoteCloseTrigger:
|
||||
log.Infof("ChannelArbitrator(%v): trigger %v, "+
|
||||
" going to StateContractClosed",
|
||||
c.cfg.ChanPoint, trigger)
|
||||
nextState = StateContractClosed
|
||||
|
||||
// If a coop close or breach was confirmed, jump straight to
|
||||
// the fully resolved state.
|
||||
case coopCloseTrigger, breachCloseTrigger:
|
||||
log.Infof("ChannelArbitrator(%v): trigger %v, "+
|
||||
" going to StateFullyResolved",
|
||||
c.cfg.ChanPoint, trigger)
|
||||
nextState = StateFullyResolved
|
||||
}
|
||||
|
||||
log.Infof("ChannelArbitrator(%v): trigger %v moving from "+
|
||||
"state %v to %v", c.cfg.ChanPoint, trigger, c.state,
|
||||
nextState)
|
||||
|
||||
// If we're in this state, then the contract has been fully closed to
|
||||
// outside sub-systems, so we'll process the prior set of on-chain
|
||||
// contract actions and launch a set of resolvers.
|
||||
@ -973,6 +1021,54 @@ func (c *ChannelArbitrator) stateStep(
|
||||
return nextState, closeTx, nil
|
||||
}
|
||||
|
||||
// sweepAnchors offers all given anchor resolutions to the sweeper. It requests
|
||||
// sweeping at the minimum fee rate. This fee rate can be upped manually by the
|
||||
// user via the BumpFee rpc.
|
||||
func (c *ChannelArbitrator) sweepAnchors(anchors []*lnwallet.AnchorResolution,
|
||||
heightHint uint32) error {
|
||||
|
||||
// Use the chan id as the exclusive group. This prevents any of the
|
||||
// anchors from being batched together.
|
||||
exclusiveGroup := c.cfg.ShortChanID.ToUint64()
|
||||
|
||||
// Retrieve the current minimum fee rate from the sweeper.
|
||||
minFeeRate := c.cfg.Sweeper.RelayFeePerKW()
|
||||
|
||||
for _, anchor := range anchors {
|
||||
log.Debugf("ChannelArbitrator(%v): pre-confirmation sweep of "+
|
||||
"anchor of tx %v", c.cfg.ChanPoint, anchor.CommitAnchor)
|
||||
|
||||
// Prepare anchor output for sweeping.
|
||||
anchorInput := input.MakeBaseInput(
|
||||
&anchor.CommitAnchor,
|
||||
input.CommitmentAnchor,
|
||||
&anchor.AnchorSignDescriptor,
|
||||
heightHint,
|
||||
)
|
||||
|
||||
// Sweep anchor output with the minimum fee rate. This usually
|
||||
// (up to a min relay fee of 3 sat/b) means that the anchor
|
||||
// sweep will be economical. Also signal that this is a force
|
||||
// sweep. If the user decides to bump the fee on the anchor
|
||||
// sweep, it will be swept even if it isn't economical.
|
||||
_, err := c.cfg.Sweeper.SweepInput(
|
||||
&anchorInput,
|
||||
sweep.Params{
|
||||
Fee: sweep.FeePreference{
|
||||
FeeRate: minFeeRate,
|
||||
},
|
||||
Force: true,
|
||||
ExclusiveGroup: &exclusiveGroup,
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// launchResolvers updates the activeResolvers list and starts the resolvers.
|
||||
func (c *ChannelArbitrator) launchResolvers(resolvers []ContractResolver) {
|
||||
c.activeResolversLock.Lock()
|
||||
@ -1778,8 +1874,8 @@ func (c *ChannelArbitrator) prepContractResolutions(
|
||||
}
|
||||
}
|
||||
|
||||
// Finally, if this is was a unilateral closure, then we'll also create
|
||||
// a resolver to sweep our commitment output (but only if it wasn't
|
||||
// If this is was an unilateral closure, then we'll also create a
|
||||
// resolver to sweep our commitment output (but only if it wasn't
|
||||
// trimmed).
|
||||
if contractResolutions.CommitResolution != nil {
|
||||
resolver := newCommitSweepResolver(
|
||||
@ -1789,6 +1885,17 @@ func (c *ChannelArbitrator) prepContractResolutions(
|
||||
htlcResolvers = append(htlcResolvers, resolver)
|
||||
}
|
||||
|
||||
// We instantiate an anchor resolver if the commitmentment tx has an
|
||||
// anchor.
|
||||
if contractResolutions.AnchorResolution != nil {
|
||||
anchorResolver := newAnchorResolver(
|
||||
contractResolutions.AnchorResolution.AnchorSignDescriptor,
|
||||
contractResolutions.AnchorResolution.CommitAnchor,
|
||||
height, c.cfg.ChanPoint, resolverCfg,
|
||||
)
|
||||
htlcResolvers = append(htlcResolvers, anchorResolver)
|
||||
}
|
||||
|
||||
return htlcResolvers, msgsToSend, nil
|
||||
}
|
||||
|
||||
@ -2080,6 +2187,7 @@ func (c *ChannelArbitrator) channelAttendant(bestHeight int32) {
|
||||
CommitHash: closeTx.TxHash(),
|
||||
CommitResolution: closeInfo.CommitResolution,
|
||||
HtlcResolutions: *closeInfo.HtlcResolutions,
|
||||
AnchorResolution: closeInfo.AnchorResolution,
|
||||
}
|
||||
|
||||
// When processing a unilateral close event, we'll
|
||||
@ -2146,6 +2254,7 @@ func (c *ChannelArbitrator) channelAttendant(bestHeight int32) {
|
||||
CommitHash: *uniClosure.SpenderTxHash,
|
||||
CommitResolution: uniClosure.CommitResolution,
|
||||
HtlcResolutions: *uniClosure.HtlcResolutions,
|
||||
AnchorResolution: uniClosure.AnchorResolution,
|
||||
}
|
||||
|
||||
// When processing a unilateral close event, we'll
|
||||
|
@ -83,6 +83,11 @@ func (b *mockArbitratorLog) InsertUnresolvedContracts(
|
||||
|
||||
b.Lock()
|
||||
for _, resolver := range resolvers {
|
||||
resKey := resolver.ResolverKey()
|
||||
if resKey == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
b.resolvers[resolver] = struct{}{}
|
||||
}
|
||||
b.Unlock()
|
||||
@ -197,6 +202,8 @@ type chanArbTestCtx struct {
|
||||
resolutions chan []ResolutionMsg
|
||||
|
||||
log ArbitratorLog
|
||||
|
||||
sweeper *mockSweeper
|
||||
}
|
||||
|
||||
func (c *chanArbTestCtx) CleanUp() {
|
||||
@ -314,6 +321,7 @@ func createTestChannelArbitrator(t *testing.T, log ArbitratorLog,
|
||||
incubateChan := make(chan struct{})
|
||||
|
||||
chainIO := &mockChainIO{}
|
||||
mockSweeper := newMockSweeper()
|
||||
chainArbCfg := ChainArbitratorConfig{
|
||||
ChainIO: chainIO,
|
||||
PublishTx: func(*wire.MsgTx) error {
|
||||
@ -343,7 +351,8 @@ func createTestChannelArbitrator(t *testing.T, log ArbitratorLog,
|
||||
|
||||
return true
|
||||
},
|
||||
Clock: clock.NewDefaultClock(),
|
||||
Clock: clock.NewDefaultClock(),
|
||||
Sweeper: mockSweeper,
|
||||
}
|
||||
|
||||
// We'll use the resolvedChan to synchronize on call to
|
||||
@ -360,13 +369,7 @@ func createTestChannelArbitrator(t *testing.T, log ArbitratorLog,
|
||||
resolvedChan <- struct{}{}
|
||||
return nil
|
||||
},
|
||||
ForceCloseChan: func() (*lnwallet.LocalForceCloseSummary, error) {
|
||||
summary := &lnwallet.LocalForceCloseSummary{
|
||||
CloseTx: &wire.MsgTx{},
|
||||
HtlcResolutions: &lnwallet.HtlcResolutions{},
|
||||
}
|
||||
return summary, nil
|
||||
},
|
||||
Channel: &mockChannel{},
|
||||
MarkCommitmentBroadcasted: func(_ *wire.MsgTx, _ bool) error {
|
||||
return nil
|
||||
},
|
||||
@ -426,6 +429,7 @@ func createTestChannelArbitrator(t *testing.T, log ArbitratorLog,
|
||||
blockEpochs: blockEpochs,
|
||||
log: log,
|
||||
incubationRequests: incubateChan,
|
||||
sweeper: mockSweeper,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@ -2005,7 +2009,7 @@ func TestRemoteCloseInitiator(t *testing.T) {
|
||||
|
||||
// First, create alice's channel.
|
||||
alice, _, cleanUp, err := lnwallet.CreateTestChannels(
|
||||
true,
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v",
|
||||
@ -2088,3 +2092,161 @@ func TestRemoteCloseInitiator(t *testing.T) {
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
// TestChannelArbitratorAnchors asserts that the commitment tx anchor is swept.
|
||||
func TestChannelArbitratorAnchors(t *testing.T) {
|
||||
log := &mockArbitratorLog{
|
||||
state: StateDefault,
|
||||
newStates: make(chan ArbitratorState, 5),
|
||||
}
|
||||
|
||||
chanArbCtx, err := createTestChannelArbitrator(t, log)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create ChannelArbitrator: %v", err)
|
||||
}
|
||||
chanArb := chanArbCtx.chanArb
|
||||
chanArb.cfg.PreimageDB = newMockWitnessBeacon()
|
||||
chanArb.cfg.Registry = &mockRegistry{}
|
||||
|
||||
// Setup two pre-confirmation anchor resolutions on the mock channel.
|
||||
chanArb.cfg.Channel.(*mockChannel).anchorResolutions =
|
||||
[]*lnwallet.AnchorResolution{
|
||||
{}, {},
|
||||
}
|
||||
|
||||
if err := chanArb.Start(); err != nil {
|
||||
t.Fatalf("unable to start ChannelArbitrator: %v", err)
|
||||
}
|
||||
defer func() {
|
||||
if err := chanArb.Stop(); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}()
|
||||
|
||||
// Create htlcUpdates channel.
|
||||
htlcUpdates := make(chan *ContractUpdate)
|
||||
|
||||
signals := &ContractSignals{
|
||||
HtlcUpdates: htlcUpdates,
|
||||
ShortChanID: lnwire.ShortChannelID{},
|
||||
}
|
||||
chanArb.UpdateContractSignals(signals)
|
||||
|
||||
errChan := make(chan error, 1)
|
||||
respChan := make(chan *wire.MsgTx, 1)
|
||||
|
||||
// With the channel found, and the request crafted, we'll send over a
|
||||
// force close request to the arbitrator that watches this channel.
|
||||
chanArb.forceCloseReqs <- &forceCloseReq{
|
||||
errResp: errChan,
|
||||
closeTx: respChan,
|
||||
}
|
||||
|
||||
// The force close request should trigger broadcast of the commitment
|
||||
// transaction.
|
||||
chanArbCtx.AssertStateTransitions(
|
||||
StateBroadcastCommit,
|
||||
StateCommitmentBroadcasted,
|
||||
)
|
||||
|
||||
// With the commitment tx still unconfirmed, we expect sweep attempts
|
||||
// for all three versions of the commitment transaction.
|
||||
<-chanArbCtx.sweeper.sweptInputs
|
||||
<-chanArbCtx.sweeper.sweptInputs
|
||||
|
||||
select {
|
||||
case <-respChan:
|
||||
case <-time.After(5 * time.Second):
|
||||
t.Fatalf("no response received")
|
||||
}
|
||||
|
||||
select {
|
||||
case err := <-errChan:
|
||||
if err != nil {
|
||||
t.Fatalf("error force closing channel: %v", err)
|
||||
}
|
||||
case <-time.After(5 * time.Second):
|
||||
t.Fatalf("no response received")
|
||||
}
|
||||
|
||||
// Now notify about the local force close getting confirmed.
|
||||
closeTx := &wire.MsgTx{
|
||||
TxIn: []*wire.TxIn{
|
||||
{
|
||||
PreviousOutPoint: wire.OutPoint{},
|
||||
Witness: [][]byte{
|
||||
{0x1},
|
||||
{0x2},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
chanArb.cfg.ChainEvents.LocalUnilateralClosure <- &LocalUnilateralCloseInfo{
|
||||
SpendDetail: &chainntnfs.SpendDetail{},
|
||||
LocalForceCloseSummary: &lnwallet.LocalForceCloseSummary{
|
||||
CloseTx: closeTx,
|
||||
HtlcResolutions: &lnwallet.HtlcResolutions{},
|
||||
AnchorResolution: &lnwallet.AnchorResolution{
|
||||
AnchorSignDescriptor: input.SignDescriptor{
|
||||
Output: &wire.TxOut{
|
||||
Value: 1,
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
ChannelCloseSummary: &channeldb.ChannelCloseSummary{},
|
||||
CommitSet: CommitSet{
|
||||
ConfCommitKey: &LocalHtlcSet,
|
||||
HtlcSets: map[HtlcSetKey][]channeldb.HTLC{},
|
||||
},
|
||||
}
|
||||
|
||||
chanArbCtx.AssertStateTransitions(
|
||||
StateContractClosed,
|
||||
StateWaitingFullResolution,
|
||||
)
|
||||
|
||||
// We expect to only have the anchor resolver active.
|
||||
if len(chanArb.activeResolvers) != 1 {
|
||||
t.Fatalf("expected single resolver, instead got: %v",
|
||||
len(chanArb.activeResolvers))
|
||||
}
|
||||
|
||||
resolver := chanArb.activeResolvers[0]
|
||||
_, ok := resolver.(*anchorResolver)
|
||||
if !ok {
|
||||
t.Fatalf("expected anchor resolver, got %T", resolver)
|
||||
}
|
||||
|
||||
// The anchor resolver is expected to offer the anchor input to the
|
||||
// sweeper.
|
||||
<-chanArbCtx.sweeper.updatedInputs
|
||||
|
||||
// The mock sweeper immediately signals success for that input. This
|
||||
// should transition the channel to the resolved state.
|
||||
chanArbCtx.AssertStateTransitions(StateFullyResolved)
|
||||
select {
|
||||
case <-chanArbCtx.resolvedChan:
|
||||
case <-time.After(5 * time.Second):
|
||||
t.Fatalf("contract was not resolved")
|
||||
}
|
||||
}
|
||||
|
||||
type mockChannel struct {
|
||||
anchorResolutions []*lnwallet.AnchorResolution
|
||||
}
|
||||
|
||||
func (m *mockChannel) NewAnchorResolutions() ([]*lnwallet.AnchorResolution,
|
||||
error) {
|
||||
|
||||
return m.anchorResolutions, nil
|
||||
}
|
||||
|
||||
func (m *mockChannel) ForceCloseChan() (*lnwallet.LocalForceCloseSummary, error) {
|
||||
summary := &lnwallet.LocalForceCloseSummary{
|
||||
CloseTx: &wire.MsgTx{},
|
||||
HtlcResolutions: &lnwallet.HtlcResolutions{},
|
||||
}
|
||||
return summary, nil
|
||||
}
|
||||
|
@ -10,6 +10,7 @@ import (
|
||||
"github.com/lightningnetwork/lnd/chainntnfs"
|
||||
"github.com/lightningnetwork/lnd/input"
|
||||
"github.com/lightningnetwork/lnd/lnwallet"
|
||||
"github.com/lightningnetwork/lnd/lnwallet/chainfee"
|
||||
"github.com/lightningnetwork/lnd/sweep"
|
||||
)
|
||||
|
||||
@ -93,12 +94,14 @@ func (i *commitSweepResolverTestContext) waitForResult() {
|
||||
}
|
||||
|
||||
type mockSweeper struct {
|
||||
sweptInputs chan input.Input
|
||||
sweptInputs chan input.Input
|
||||
updatedInputs chan wire.OutPoint
|
||||
}
|
||||
|
||||
func newMockSweeper() *mockSweeper {
|
||||
return &mockSweeper{
|
||||
sweptInputs: make(chan input.Input),
|
||||
sweptInputs: make(chan input.Input),
|
||||
updatedInputs: make(chan wire.OutPoint),
|
||||
}
|
||||
}
|
||||
|
||||
@ -120,6 +123,22 @@ func (s *mockSweeper) CreateSweepTx(inputs []input.Input, feePref sweep.FeePrefe
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (s *mockSweeper) RelayFeePerKW() chainfee.SatPerKWeight {
|
||||
return 253
|
||||
}
|
||||
|
||||
func (s *mockSweeper) UpdateParams(input wire.OutPoint,
|
||||
params sweep.ParamsUpdate) (chan sweep.Result, error) {
|
||||
|
||||
s.updatedInputs <- input
|
||||
|
||||
result := make(chan sweep.Result, 1)
|
||||
result <- sweep.Result{
|
||||
Tx: &wire.MsgTx{},
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
var _ UtxoSweeper = &mockSweeper{}
|
||||
|
||||
// TestCommitSweepResolverNoDelay tests resolution of a direct commitment output
|
||||
|
@ -9,6 +9,7 @@ import (
|
||||
"github.com/lightningnetwork/lnd/input"
|
||||
"github.com/lightningnetwork/lnd/invoices"
|
||||
"github.com/lightningnetwork/lnd/lntypes"
|
||||
"github.com/lightningnetwork/lnd/lnwallet/chainfee"
|
||||
"github.com/lightningnetwork/lnd/lnwire"
|
||||
"github.com/lightningnetwork/lnd/sweep"
|
||||
)
|
||||
@ -51,4 +52,16 @@ type UtxoSweeper interface {
|
||||
// estimate before generating the required witnesses.
|
||||
CreateSweepTx(inputs []input.Input, feePref sweep.FeePreference,
|
||||
currentBlockHeight uint32) (*wire.MsgTx, error)
|
||||
|
||||
// RelayFeePerKW returns the minimum fee rate required for transactions
|
||||
// to be relayed.
|
||||
RelayFeePerKW() chainfee.SatPerKWeight
|
||||
|
||||
// UpdateParams allows updating the sweep parameters of a pending input
|
||||
// in the UtxoSweeper. This function can be used to provide an updated
|
||||
// fee preference that will be used for a new sweep transaction of the
|
||||
// input that will act as a replacement transaction (RBF) of the
|
||||
// original sweeping transaction, if any.
|
||||
UpdateParams(input wire.OutPoint, params sweep.ParamsUpdate) (
|
||||
chan sweep.Result, error)
|
||||
}
|
||||
|
@ -1,8 +1,12 @@
|
||||
package input
|
||||
|
||||
import (
|
||||
"math/big"
|
||||
|
||||
"github.com/btcsuite/btcd/blockchain"
|
||||
"github.com/btcsuite/btcd/btcec"
|
||||
"github.com/btcsuite/btcd/wire"
|
||||
"github.com/lightningnetwork/lnd/keychain"
|
||||
)
|
||||
|
||||
const (
|
||||
@ -406,6 +410,47 @@ const (
|
||||
OfferedHtlcPenaltyWitnessSize = 1 + 1 + 73 + 1 + 33 + 1 + OfferedHtlcScriptSize
|
||||
)
|
||||
|
||||
// dummySigner is a fake signer used for size (upper bound) calculations.
|
||||
type dummySigner struct {
|
||||
Signer
|
||||
}
|
||||
|
||||
// SignOutputRaw generates a signature for the passed transaction according to
|
||||
// the data within the passed SignDescriptor.
|
||||
func (s *dummySigner) SignOutputRaw(tx *wire.MsgTx, signDesc *SignDescriptor) (
|
||||
[]byte, error) {
|
||||
|
||||
// Always return worst-case signature length, excluding the one byte
|
||||
// sighash flag.
|
||||
return make([]byte, 73-1), nil
|
||||
}
|
||||
|
||||
var (
|
||||
// dummyPubKey is a pubkey used in script size calculation.
|
||||
dummyPubKey = btcec.PublicKey{
|
||||
X: &big.Int{},
|
||||
Y: &big.Int{},
|
||||
}
|
||||
|
||||
// dummyAnchorScript is a script used for size calculation.
|
||||
dummyAnchorScript, _ = CommitScriptAnchor(&dummyPubKey)
|
||||
|
||||
// dummyAnchorWitness is a witness used for size calculation.
|
||||
dummyAnchorWitness, _ = CommitSpendAnchor(
|
||||
&dummySigner{},
|
||||
&SignDescriptor{
|
||||
KeyDesc: keychain.KeyDescriptor{
|
||||
PubKey: &dummyPubKey,
|
||||
},
|
||||
WitnessScript: dummyAnchorScript,
|
||||
},
|
||||
nil,
|
||||
)
|
||||
|
||||
// AnchorWitnessSize 116 bytes
|
||||
AnchorWitnessSize = dummyAnchorWitness.SerializeSize()
|
||||
)
|
||||
|
||||
// EstimateCommitTxWeight estimate commitment transaction weight depending on
|
||||
// the precalculated weight of base transaction, witness data, which is needed
|
||||
// for paying for funding tx, and htlc weight multiplied by their count.
|
||||
|
@ -280,3 +280,11 @@ func TestTxWeightEstimator(t *testing.T) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TestSizes guards calculated constants to make sure their values remain
|
||||
// unchanged.
|
||||
func TestSizes(t *testing.T) {
|
||||
if input.AnchorWitnessSize != 116 {
|
||||
t.Fatal("unexpected anchor witness size")
|
||||
}
|
||||
}
|
||||
|
@ -125,6 +125,10 @@ const (
|
||||
// output on the counterparty's commitment transaction after a
|
||||
// confirmation.
|
||||
CommitmentToRemoteConfirmed StandardWitnessType = 13
|
||||
|
||||
// CommitmentAnchor is a witness that allows us to spend our anchor on
|
||||
// the commitment transaction.
|
||||
CommitmentAnchor StandardWitnessType = 14
|
||||
)
|
||||
|
||||
// String returns a human readable version of the target WitnessType.
|
||||
@ -138,6 +142,9 @@ func (wt StandardWitnessType) String() string {
|
||||
case CommitmentToRemoteConfirmed:
|
||||
return "CommitmentToRemoteConfirmed"
|
||||
|
||||
case CommitmentAnchor:
|
||||
return "CommitmentAnchor"
|
||||
|
||||
case CommitmentNoDelay:
|
||||
return "CommitmentNoDelay"
|
||||
|
||||
@ -218,6 +225,16 @@ func (wt StandardWitnessType) WitnessGenerator(signer Signer,
|
||||
Witness: witness,
|
||||
}, nil
|
||||
|
||||
case CommitmentAnchor:
|
||||
witness, err := CommitSpendAnchor(signer, desc, tx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &Script{
|
||||
Witness: witness,
|
||||
}, nil
|
||||
|
||||
case CommitmentNoDelay:
|
||||
witness, err := CommitSpendNoDelay(signer, desc, tx, false)
|
||||
if err != nil {
|
||||
@ -348,6 +365,10 @@ func (wt StandardWitnessType) SizeUpperBound() (int, bool, error) {
|
||||
case CommitmentToRemoteConfirmed:
|
||||
return ToRemoteConfirmedWitnessSize, false, nil
|
||||
|
||||
// Anchor output on the commitment transaction.
|
||||
case CommitmentAnchor:
|
||||
return AnchorWitnessSize, false, nil
|
||||
|
||||
// Outgoing second layer HTLC's that have confirmed within the
|
||||
// chain, and the output they produced is now mature enough to
|
||||
// sweep.
|
||||
|
1543
lnrpc/rpc.pb.go
1543
lnrpc/rpc.pb.go
@ -324,6 +324,34 @@ func (PeerEvent_EventType) EnumDescriptor() ([]byte, []int) {
|
||||
return fileDescriptor_77a6da22d6a3feb1, []int{51, 0}
|
||||
}
|
||||
|
||||
type PendingChannelsResponse_ForceClosedChannel_AnchorState int32
|
||||
|
||||
const (
|
||||
PendingChannelsResponse_ForceClosedChannel_LIMBO PendingChannelsResponse_ForceClosedChannel_AnchorState = 0
|
||||
PendingChannelsResponse_ForceClosedChannel_RECOVERED PendingChannelsResponse_ForceClosedChannel_AnchorState = 1
|
||||
PendingChannelsResponse_ForceClosedChannel_LOST PendingChannelsResponse_ForceClosedChannel_AnchorState = 2
|
||||
)
|
||||
|
||||
var PendingChannelsResponse_ForceClosedChannel_AnchorState_name = map[int32]string{
|
||||
0: "LIMBO",
|
||||
1: "RECOVERED",
|
||||
2: "LOST",
|
||||
}
|
||||
|
||||
var PendingChannelsResponse_ForceClosedChannel_AnchorState_value = map[string]int32{
|
||||
"LIMBO": 0,
|
||||
"RECOVERED": 1,
|
||||
"LOST": 2,
|
||||
}
|
||||
|
||||
func (x PendingChannelsResponse_ForceClosedChannel_AnchorState) String() string {
|
||||
return proto.EnumName(PendingChannelsResponse_ForceClosedChannel_AnchorState_name, int32(x))
|
||||
}
|
||||
|
||||
func (PendingChannelsResponse_ForceClosedChannel_AnchorState) EnumDescriptor() ([]byte, []int) {
|
||||
return fileDescriptor_77a6da22d6a3feb1, []int{72, 5, 0}
|
||||
}
|
||||
|
||||
type ChannelEventUpdate_UpdateType int32
|
||||
|
||||
const (
|
||||
@ -5657,10 +5685,14 @@ type PendingChannelsResponse_WaitingCloseChannel struct {
|
||||
/// The pending channel waiting for closing tx to confirm
|
||||
Channel *PendingChannelsResponse_PendingChannel `protobuf:"bytes,1,opt,name=channel,proto3" json:"channel,omitempty"`
|
||||
/// The balance in satoshis encumbered in this channel
|
||||
LimboBalance int64 `protobuf:"varint,2,opt,name=limbo_balance,json=limboBalance,proto3" json:"limbo_balance,omitempty"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
LimboBalance int64 `protobuf:"varint,2,opt,name=limbo_balance,json=limboBalance,proto3" json:"limbo_balance,omitempty"`
|
||||
//*
|
||||
//A list of valid commitment transactions. Any of these can confirm at
|
||||
//this point.
|
||||
Commitments *PendingChannelsResponse_Commitments `protobuf:"bytes,3,opt,name=commitments,proto3" json:"commitments,omitempty"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
}
|
||||
|
||||
func (m *PendingChannelsResponse_WaitingCloseChannel) Reset() {
|
||||
@ -5706,6 +5738,71 @@ func (m *PendingChannelsResponse_WaitingCloseChannel) GetLimboBalance() int64 {
|
||||
return 0
|
||||
}
|
||||
|
||||
func (m *PendingChannelsResponse_WaitingCloseChannel) GetCommitments() *PendingChannelsResponse_Commitments {
|
||||
if m != nil {
|
||||
return m.Commitments
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type PendingChannelsResponse_Commitments struct {
|
||||
/// Hash of the local version of the commitment tx.
|
||||
LocalTxid string `protobuf:"bytes,1,opt,name=local_txid,json=localTxid,proto3" json:"local_txid,omitempty"`
|
||||
/// Hash of the remote version of the commitment tx.
|
||||
RemoteTxid string `protobuf:"bytes,2,opt,name=remote_txid,json=remoteTxid,proto3" json:"remote_txid,omitempty"`
|
||||
/// Hash of the remote pending version of the commitment tx.
|
||||
RemotePendingTxid string `protobuf:"bytes,3,opt,name=remote_pending_txid,json=remotePendingTxid,proto3" json:"remote_pending_txid,omitempty"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
}
|
||||
|
||||
func (m *PendingChannelsResponse_Commitments) Reset() { *m = PendingChannelsResponse_Commitments{} }
|
||||
func (m *PendingChannelsResponse_Commitments) String() string { return proto.CompactTextString(m) }
|
||||
func (*PendingChannelsResponse_Commitments) ProtoMessage() {}
|
||||
func (*PendingChannelsResponse_Commitments) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_77a6da22d6a3feb1, []int{72, 3}
|
||||
}
|
||||
|
||||
func (m *PendingChannelsResponse_Commitments) XXX_Unmarshal(b []byte) error {
|
||||
return xxx_messageInfo_PendingChannelsResponse_Commitments.Unmarshal(m, b)
|
||||
}
|
||||
func (m *PendingChannelsResponse_Commitments) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
|
||||
return xxx_messageInfo_PendingChannelsResponse_Commitments.Marshal(b, m, deterministic)
|
||||
}
|
||||
func (m *PendingChannelsResponse_Commitments) XXX_Merge(src proto.Message) {
|
||||
xxx_messageInfo_PendingChannelsResponse_Commitments.Merge(m, src)
|
||||
}
|
||||
func (m *PendingChannelsResponse_Commitments) XXX_Size() int {
|
||||
return xxx_messageInfo_PendingChannelsResponse_Commitments.Size(m)
|
||||
}
|
||||
func (m *PendingChannelsResponse_Commitments) XXX_DiscardUnknown() {
|
||||
xxx_messageInfo_PendingChannelsResponse_Commitments.DiscardUnknown(m)
|
||||
}
|
||||
|
||||
var xxx_messageInfo_PendingChannelsResponse_Commitments proto.InternalMessageInfo
|
||||
|
||||
func (m *PendingChannelsResponse_Commitments) GetLocalTxid() string {
|
||||
if m != nil {
|
||||
return m.LocalTxid
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (m *PendingChannelsResponse_Commitments) GetRemoteTxid() string {
|
||||
if m != nil {
|
||||
return m.RemoteTxid
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (m *PendingChannelsResponse_Commitments) GetRemotePendingTxid() string {
|
||||
if m != nil {
|
||||
return m.RemotePendingTxid
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
type PendingChannelsResponse_ClosedChannel struct {
|
||||
/// The pending channel to be closed
|
||||
Channel *PendingChannelsResponse_PendingChannel `protobuf:"bytes,1,opt,name=channel,proto3" json:"channel,omitempty"`
|
||||
@ -5720,7 +5817,7 @@ func (m *PendingChannelsResponse_ClosedChannel) Reset() { *m = PendingCh
|
||||
func (m *PendingChannelsResponse_ClosedChannel) String() string { return proto.CompactTextString(m) }
|
||||
func (*PendingChannelsResponse_ClosedChannel) ProtoMessage() {}
|
||||
func (*PendingChannelsResponse_ClosedChannel) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_77a6da22d6a3feb1, []int{72, 3}
|
||||
return fileDescriptor_77a6da22d6a3feb1, []int{72, 4}
|
||||
}
|
||||
|
||||
func (m *PendingChannelsResponse_ClosedChannel) XXX_Unmarshal(b []byte) error {
|
||||
@ -5770,11 +5867,12 @@ type PendingChannelsResponse_ForceClosedChannel struct {
|
||||
//mature.
|
||||
BlocksTilMaturity int32 `protobuf:"varint,5,opt,name=blocks_til_maturity,json=blocksTilMaturity,proto3" json:"blocks_til_maturity,omitempty"`
|
||||
/// The total value of funds successfully recovered from this channel
|
||||
RecoveredBalance int64 `protobuf:"varint,6,opt,name=recovered_balance,json=recoveredBalance,proto3" json:"recovered_balance,omitempty"`
|
||||
PendingHtlcs []*PendingHTLC `protobuf:"bytes,8,rep,name=pending_htlcs,json=pendingHtlcs,proto3" json:"pending_htlcs,omitempty"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
RecoveredBalance int64 `protobuf:"varint,6,opt,name=recovered_balance,json=recoveredBalance,proto3" json:"recovered_balance,omitempty"`
|
||||
PendingHtlcs []*PendingHTLC `protobuf:"bytes,8,rep,name=pending_htlcs,json=pendingHtlcs,proto3" json:"pending_htlcs,omitempty"`
|
||||
Anchor PendingChannelsResponse_ForceClosedChannel_AnchorState `protobuf:"varint,9,opt,name=anchor,proto3,enum=lnrpc.PendingChannelsResponse_ForceClosedChannel_AnchorState" json:"anchor,omitempty"`
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
XXX_sizecache int32 `json:"-"`
|
||||
}
|
||||
|
||||
func (m *PendingChannelsResponse_ForceClosedChannel) Reset() {
|
||||
@ -5785,7 +5883,7 @@ func (m *PendingChannelsResponse_ForceClosedChannel) String() string {
|
||||
}
|
||||
func (*PendingChannelsResponse_ForceClosedChannel) ProtoMessage() {}
|
||||
func (*PendingChannelsResponse_ForceClosedChannel) Descriptor() ([]byte, []int) {
|
||||
return fileDescriptor_77a6da22d6a3feb1, []int{72, 4}
|
||||
return fileDescriptor_77a6da22d6a3feb1, []int{72, 5}
|
||||
}
|
||||
|
||||
func (m *PendingChannelsResponse_ForceClosedChannel) XXX_Unmarshal(b []byte) error {
|
||||
@ -5855,6 +5953,13 @@ func (m *PendingChannelsResponse_ForceClosedChannel) GetPendingHtlcs() []*Pendin
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *PendingChannelsResponse_ForceClosedChannel) GetAnchor() PendingChannelsResponse_ForceClosedChannel_AnchorState {
|
||||
if m != nil {
|
||||
return m.Anchor
|
||||
}
|
||||
return PendingChannelsResponse_ForceClosedChannel_LIMBO
|
||||
}
|
||||
|
||||
type ChannelEventSubscription struct {
|
||||
XXX_NoUnkeyedLiteral struct{} `json:"-"`
|
||||
XXX_unrecognized []byte `json:"-"`
|
||||
@ -11043,6 +11148,7 @@ func init() {
|
||||
proto.RegisterEnum("lnrpc.ChannelCloseSummary_Initiator", ChannelCloseSummary_Initiator_name, ChannelCloseSummary_Initiator_value)
|
||||
proto.RegisterEnum("lnrpc.Peer_SyncType", Peer_SyncType_name, Peer_SyncType_value)
|
||||
proto.RegisterEnum("lnrpc.PeerEvent_EventType", PeerEvent_EventType_name, PeerEvent_EventType_value)
|
||||
proto.RegisterEnum("lnrpc.PendingChannelsResponse_ForceClosedChannel_AnchorState", PendingChannelsResponse_ForceClosedChannel_AnchorState_name, PendingChannelsResponse_ForceClosedChannel_AnchorState_value)
|
||||
proto.RegisterEnum("lnrpc.ChannelEventUpdate_UpdateType", ChannelEventUpdate_UpdateType_name, ChannelEventUpdate_UpdateType_value)
|
||||
proto.RegisterEnum("lnrpc.Invoice_InvoiceState", Invoice_InvoiceState_name, Invoice_InvoiceState_value)
|
||||
proto.RegisterEnum("lnrpc.Payment_PaymentStatus", Payment_PaymentStatus_name, Payment_PaymentStatus_value)
|
||||
@ -11129,6 +11235,7 @@ func init() {
|
||||
proto.RegisterType((*PendingChannelsResponse_PendingChannel)(nil), "lnrpc.PendingChannelsResponse.PendingChannel")
|
||||
proto.RegisterType((*PendingChannelsResponse_PendingOpenChannel)(nil), "lnrpc.PendingChannelsResponse.PendingOpenChannel")
|
||||
proto.RegisterType((*PendingChannelsResponse_WaitingCloseChannel)(nil), "lnrpc.PendingChannelsResponse.WaitingCloseChannel")
|
||||
proto.RegisterType((*PendingChannelsResponse_Commitments)(nil), "lnrpc.PendingChannelsResponse.Commitments")
|
||||
proto.RegisterType((*PendingChannelsResponse_ClosedChannel)(nil), "lnrpc.PendingChannelsResponse.ClosedChannel")
|
||||
proto.RegisterType((*PendingChannelsResponse_ForceClosedChannel)(nil), "lnrpc.PendingChannelsResponse.ForceClosedChannel")
|
||||
proto.RegisterType((*ChannelEventSubscription)(nil), "lnrpc.ChannelEventSubscription")
|
||||
@ -11218,709 +11325,717 @@ func init() {
|
||||
func init() { proto.RegisterFile("rpc.proto", fileDescriptor_77a6da22d6a3feb1) }
|
||||
|
||||
var fileDescriptor_77a6da22d6a3feb1 = []byte{
|
||||
// 11219 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x7d, 0x6b, 0x8f, 0x1c, 0x49,
|
||||
0x72, 0x18, 0xfb, 0x35, 0xdd, 0x1d, 0xfd, 0x9c, 0x9c, 0x57, 0x73, 0xb8, 0x5c, 0x72, 0x6b, 0xf7,
|
||||
0x96, 0x3c, 0xee, 0x1d, 0xc9, 0xe5, 0x1d, 0xf7, 0x4e, 0xbb, 0xf6, 0xe9, 0x7a, 0x66, 0x7a, 0x38,
|
||||
0x7d, 0x9c, 0xd7, 0x56, 0xf7, 0xec, 0x6a, 0x4f, 0x96, 0xeb, 0x6a, 0xba, 0x73, 0x66, 0x4a, 0xec,
|
||||
0xae, 0xea, 0xad, 0xaa, 0x9e, 0xc7, 0x1d, 0xd6, 0x1f, 0xfc, 0x10, 0x0c, 0xbf, 0x00, 0xc1, 0x96,
|
||||
0x01, 0xcb, 0x16, 0x6c, 0xd8, 0x30, 0x0c, 0xc3, 0x80, 0x20, 0xe3, 0x64, 0xc0, 0x1f, 0xfc, 0x5d,
|
||||
0x5f, 0x6c, 0xe8, 0x83, 0xe4, 0x2f, 0x86, 0x20, 0x40, 0xb0, 0x7c, 0xfe, 0xaa, 0x9f, 0x60, 0x64,
|
||||
0x44, 0x66, 0x55, 0x56, 0x77, 0x0d, 0xc9, 0xbd, 0x5b, 0xdf, 0x17, 0x72, 0x2a, 0x32, 0xf2, 0x1d,
|
||||
0x19, 0x19, 0x8f, 0x8c, 0x68, 0x28, 0xfb, 0x93, 0xc1, 0xc3, 0x89, 0xef, 0x85, 0x1e, 0x2b, 0x8c,
|
||||
0x5c, 0x7f, 0x32, 0x58, 0x7f, 0xe3, 0xd4, 0xf3, 0x4e, 0x47, 0xfc, 0x91, 0x3d, 0x71, 0x1e, 0xd9,
|
||||
0xae, 0xeb, 0x85, 0x76, 0xe8, 0x78, 0x6e, 0x40, 0x48, 0xc6, 0x8f, 0xa0, 0xfe, 0x8c, 0xbb, 0x3d,
|
||||
0xce, 0x87, 0x26, 0xff, 0x7c, 0xca, 0x83, 0x90, 0xbd, 0x07, 0x8b, 0x36, 0xff, 0x31, 0xe7, 0x43,
|
||||
0x6b, 0x62, 0x07, 0xc1, 0xe4, 0xcc, 0xb7, 0x03, 0xde, 0xca, 0xdc, 0xcd, 0xdc, 0xaf, 0x9a, 0x4d,
|
||||
0x2a, 0x38, 0x8c, 0xe0, 0xec, 0x2d, 0xa8, 0x06, 0x02, 0x95, 0xbb, 0xa1, 0xef, 0x4d, 0xae, 0x5a,
|
||||
0x59, 0xc4, 0xab, 0x08, 0x58, 0x87, 0x40, 0xc6, 0x08, 0x1a, 0x51, 0x0f, 0xc1, 0xc4, 0x73, 0x03,
|
||||
0xce, 0x1e, 0xc3, 0xf2, 0xc0, 0x99, 0x9c, 0x71, 0xdf, 0xc2, 0xca, 0x63, 0x97, 0x8f, 0x3d, 0xd7,
|
||||
0x19, 0xb4, 0x32, 0x77, 0x73, 0xf7, 0xcb, 0x26, 0xa3, 0x32, 0x51, 0x63, 0x4f, 0x96, 0xb0, 0x7b,
|
||||
0xd0, 0xe0, 0x2e, 0xc1, 0xf9, 0x10, 0x6b, 0xc9, 0xae, 0xea, 0x31, 0x58, 0x54, 0x30, 0xfe, 0x7e,
|
||||
0x16, 0x16, 0xbb, 0xae, 0x13, 0x7e, 0x6a, 0x8f, 0x46, 0x3c, 0x54, 0x73, 0xba, 0x07, 0x8d, 0x0b,
|
||||
0x04, 0xe0, 0x9c, 0x2e, 0x3c, 0x7f, 0x28, 0x67, 0x54, 0x27, 0xf0, 0xa1, 0x84, 0x5e, 0x3b, 0xb2,
|
||||
0xec, 0xb5, 0x23, 0x4b, 0x5d, 0xae, 0xdc, 0x35, 0xcb, 0x75, 0x0f, 0x1a, 0x3e, 0x1f, 0x78, 0xe7,
|
||||
0xdc, 0xbf, 0xb2, 0x2e, 0x1c, 0x77, 0xe8, 0x5d, 0xb4, 0xf2, 0x77, 0x33, 0xf7, 0x0b, 0x66, 0x5d,
|
||||
0x81, 0x3f, 0x45, 0x28, 0xdb, 0x80, 0xc6, 0xe0, 0xcc, 0x76, 0x5d, 0x3e, 0xb2, 0x8e, 0xed, 0xc1,
|
||||
0x8b, 0xe9, 0x24, 0x68, 0x15, 0xee, 0x66, 0xee, 0x57, 0x9e, 0xdc, 0x7c, 0x88, 0xbb, 0xfa, 0x70,
|
||||
0xf3, 0xcc, 0x76, 0x37, 0xb0, 0xa4, 0xe7, 0xda, 0x93, 0xe0, 0xcc, 0x0b, 0xcd, 0xba, 0xac, 0x41,
|
||||
0xe0, 0xc0, 0x58, 0x06, 0xa6, 0xaf, 0x04, 0xad, 0xbd, 0xf1, 0x9f, 0x32, 0xb0, 0x74, 0xe4, 0x8e,
|
||||
0xbc, 0xc1, 0x8b, 0x9f, 0x73, 0x89, 0x52, 0xe6, 0x90, 0x7d, 0xdd, 0x39, 0xe4, 0xbe, 0xec, 0x1c,
|
||||
0x56, 0x61, 0x39, 0x39, 0x58, 0x39, 0x0b, 0x0e, 0x2b, 0xa2, 0xf6, 0x29, 0x57, 0xc3, 0x52, 0xd3,
|
||||
0xf8, 0x3a, 0x34, 0x07, 0x53, 0xdf, 0xe7, 0xee, 0xdc, 0x3c, 0x1a, 0x12, 0x1e, 0x4d, 0xe4, 0x2d,
|
||||
0xa8, 0xba, 0xfc, 0x22, 0x46, 0x93, 0xb4, 0xeb, 0xf2, 0x0b, 0x85, 0x62, 0xb4, 0x60, 0x75, 0xb6,
|
||||
0x1b, 0x39, 0x80, 0x9f, 0x65, 0x20, 0x7f, 0x14, 0x5e, 0x7a, 0xec, 0x29, 0x54, 0xed, 0xe1, 0xd0,
|
||||
0xe7, 0x41, 0x60, 0x85, 0x57, 0x13, 0x3a, 0x29, 0xf5, 0x27, 0x4c, 0x4e, 0xb1, 0x4d, 0x45, 0xfd,
|
||||
0xab, 0x09, 0x37, 0x2b, 0x76, 0xfc, 0xc1, 0x5a, 0x50, 0x94, 0x9f, 0xd8, 0x6f, 0xd9, 0x54, 0x9f,
|
||||
0xec, 0x36, 0x80, 0x3d, 0xf6, 0xa6, 0x6e, 0x68, 0x05, 0x76, 0x88, 0x2b, 0x96, 0x33, 0xcb, 0x04,
|
||||
0xe9, 0xd9, 0x21, 0xbb, 0x05, 0xe5, 0xc9, 0x0b, 0x2b, 0x18, 0xf8, 0xce, 0x24, 0x44, 0xe2, 0x29,
|
||||
0x9b, 0xa5, 0xc9, 0x8b, 0x1e, 0x7e, 0xb3, 0xf7, 0xa0, 0xe4, 0x4d, 0xc3, 0x89, 0xe7, 0xb8, 0xa1,
|
||||
0xa4, 0x97, 0x86, 0x1c, 0xc8, 0xc1, 0x34, 0x3c, 0x14, 0x60, 0x33, 0x42, 0x60, 0xef, 0x40, 0x6d,
|
||||
0xe0, 0xb9, 0x27, 0x8e, 0x3f, 0x26, 0x8e, 0xd0, 0x5a, 0xc0, 0xbe, 0x92, 0x40, 0xe3, 0x0f, 0xb2,
|
||||
0x50, 0xe9, 0xfb, 0xb6, 0x1b, 0xd8, 0x03, 0x01, 0x60, 0x6b, 0x50, 0x0c, 0x2f, 0xad, 0x33, 0x3b,
|
||||
0x38, 0xc3, 0xa9, 0x96, 0xcd, 0x85, 0xf0, 0x72, 0xc7, 0x0e, 0xce, 0xd8, 0x2a, 0x2c, 0xd0, 0x28,
|
||||
0x71, 0x42, 0x39, 0x53, 0x7e, 0x89, 0x03, 0xe2, 0x4e, 0xc7, 0x56, 0xb2, 0xab, 0x1c, 0x52, 0x4c,
|
||||
0xd3, 0x9d, 0x8e, 0x37, 0x75, 0xb8, 0x98, 0xfc, 0xb1, 0xd8, 0x6e, 0xea, 0x80, 0xa6, 0x57, 0x46,
|
||||
0x08, 0xf6, 0xf1, 0x16, 0x54, 0x65, 0x31, 0x77, 0x4e, 0xcf, 0x68, 0x8e, 0x05, 0xb3, 0x42, 0x08,
|
||||
0x08, 0x12, 0x2d, 0x84, 0xce, 0x98, 0x5b, 0x41, 0x68, 0x8f, 0x27, 0x72, 0x4a, 0x65, 0x01, 0xe9,
|
||||
0x09, 0x00, 0x16, 0x7b, 0xa1, 0x3d, 0xb2, 0x4e, 0x38, 0x0f, 0x5a, 0x45, 0x59, 0x2c, 0x20, 0xdb,
|
||||
0x9c, 0x07, 0xec, 0x6b, 0x50, 0x1f, 0xf2, 0x20, 0xb4, 0xe4, 0x66, 0xf0, 0xa0, 0x55, 0xc2, 0x93,
|
||||
0x5f, 0x13, 0xd0, 0xb6, 0x02, 0xb2, 0x37, 0x00, 0x7c, 0xfb, 0xc2, 0x12, 0x0b, 0xc1, 0x2f, 0x5b,
|
||||
0x65, 0xda, 0x05, 0xdf, 0xbe, 0xe8, 0x5f, 0xee, 0xf0, 0x4b, 0x41, 0x35, 0xcf, 0x78, 0xa8, 0x2d,
|
||||
0x5a, 0x20, 0xa9, 0xd3, 0xd8, 0x05, 0xa6, 0x81, 0xb7, 0x78, 0x68, 0x3b, 0xa3, 0x80, 0x7d, 0x00,
|
||||
0xd5, 0x50, 0x43, 0x46, 0x36, 0x58, 0x89, 0x48, 0x48, 0xab, 0x60, 0x26, 0xf0, 0x8c, 0x33, 0x28,
|
||||
0x6d, 0x73, 0xbe, 0xeb, 0x8c, 0x9d, 0x90, 0xad, 0x42, 0xe1, 0xc4, 0xb9, 0xe4, 0x44, 0xec, 0xb9,
|
||||
0x9d, 0x1b, 0x26, 0x7d, 0xb2, 0x3b, 0x00, 0xf8, 0x87, 0x35, 0x8e, 0xa8, 0x69, 0xe7, 0x86, 0x59,
|
||||
0x46, 0xd8, 0x5e, 0x60, 0x87, 0x6c, 0x1d, 0x8a, 0x13, 0xee, 0x0f, 0xb8, 0xda, 0xb7, 0x9d, 0x1b,
|
||||
0xa6, 0x02, 0x6c, 0x14, 0xa1, 0x30, 0x12, 0xad, 0x1b, 0x7f, 0x54, 0x80, 0x4a, 0x8f, 0xbb, 0xd1,
|
||||
0x29, 0x63, 0x90, 0x17, 0x0b, 0x22, 0x4f, 0x16, 0xfe, 0xcd, 0xde, 0x86, 0x0a, 0x2e, 0x5d, 0x10,
|
||||
0xfa, 0x8e, 0x7b, 0x4a, 0x54, 0xbd, 0x91, 0x6d, 0x65, 0x4c, 0x10, 0xe0, 0x1e, 0x42, 0x59, 0x13,
|
||||
0x72, 0xf6, 0x58, 0x51, 0xb5, 0xf8, 0x93, 0xdd, 0x84, 0x92, 0x3d, 0x0e, 0x69, 0x78, 0x55, 0x04,
|
||||
0x17, 0xed, 0x71, 0x88, 0x43, 0x7b, 0x0b, 0xaa, 0x13, 0xfb, 0x6a, 0x2c, 0xce, 0x72, 0x44, 0x0e,
|
||||
0x55, 0xb3, 0x22, 0x61, 0x48, 0x10, 0x4f, 0x60, 0x49, 0x47, 0x51, 0x9d, 0x17, 0xa2, 0xce, 0x17,
|
||||
0x35, 0x6c, 0x39, 0x86, 0x7b, 0xd0, 0x50, 0x75, 0x7c, 0x9a, 0x0f, 0x92, 0x49, 0xd9, 0xac, 0x4b,
|
||||
0xb0, 0x9a, 0xe5, 0x7d, 0x68, 0x9e, 0x38, 0xae, 0x3d, 0xb2, 0x06, 0xa3, 0xf0, 0xdc, 0x1a, 0xf2,
|
||||
0x51, 0x68, 0x23, 0xc5, 0x14, 0xcc, 0x3a, 0xc2, 0x37, 0x47, 0xe1, 0xf9, 0x96, 0x80, 0xb2, 0x6f,
|
||||
0x40, 0xf9, 0x84, 0x73, 0x0b, 0x17, 0xab, 0x55, 0x4a, 0x1c, 0x3c, 0xb5, 0x43, 0x66, 0xe9, 0x44,
|
||||
0xed, 0xd5, 0x37, 0xa0, 0xe9, 0x4d, 0xc3, 0x53, 0xcf, 0x71, 0x4f, 0x2d, 0xc1, 0xef, 0x2c, 0x67,
|
||||
0x88, 0x34, 0x94, 0xdf, 0xc8, 0x3e, 0xce, 0x98, 0x75, 0x55, 0x26, 0x38, 0x4f, 0x77, 0xc8, 0xde,
|
||||
0x85, 0xc6, 0xc8, 0x0e, 0x42, 0xeb, 0xcc, 0x9b, 0x58, 0x93, 0xe9, 0xf1, 0x0b, 0x7e, 0xd5, 0xaa,
|
||||
0xe1, 0x42, 0xd4, 0x04, 0x78, 0xc7, 0x9b, 0x1c, 0x22, 0x50, 0x50, 0x36, 0x8e, 0x93, 0x06, 0x01,
|
||||
0x77, 0x33, 0xf7, 0x6b, 0x66, 0x59, 0x40, 0xa8, 0xd3, 0xcf, 0x60, 0x09, 0xb7, 0x67, 0x30, 0x0d,
|
||||
0x42, 0x6f, 0x6c, 0x09, 0x5e, 0xed, 0x0f, 0x83, 0x56, 0x05, 0x69, 0xed, 0xeb, 0x72, 0xb0, 0xda,
|
||||
0x1e, 0x3f, 0xdc, 0xe2, 0x41, 0xb8, 0x89, 0xc8, 0x26, 0xe1, 0x8a, 0x0b, 0xfd, 0xca, 0x5c, 0x1c,
|
||||
0xce, 0xc2, 0xd9, 0x37, 0x80, 0xd9, 0xa3, 0x91, 0x77, 0x61, 0x05, 0x7c, 0x74, 0x62, 0xc9, 0x45,
|
||||
0x6c, 0xd5, 0xef, 0x66, 0xee, 0x97, 0xcc, 0x26, 0x96, 0xf4, 0xf8, 0xe8, 0xe4, 0x90, 0xe0, 0xec,
|
||||
0x03, 0xc0, 0xc3, 0x64, 0x9d, 0x70, 0x3b, 0x9c, 0xfa, 0x3c, 0x68, 0x35, 0xee, 0xe6, 0xee, 0xd7,
|
||||
0x9f, 0x2c, 0x46, 0xeb, 0x85, 0xe0, 0x0d, 0x27, 0x34, 0xab, 0x02, 0x4f, 0x7e, 0x07, 0xeb, 0x5b,
|
||||
0xb0, 0x9a, 0x3e, 0x24, 0x41, 0x54, 0x62, 0x55, 0x04, 0x31, 0xe6, 0x4d, 0xf1, 0x27, 0x5b, 0x86,
|
||||
0xc2, 0xb9, 0x3d, 0x9a, 0x72, 0xc9, 0xd3, 0xe9, 0xe3, 0xc3, 0xec, 0x77, 0x33, 0xc6, 0x1f, 0x66,
|
||||
0xa0, 0x4a, 0xb3, 0x94, 0xb2, 0xc8, 0xdb, 0x50, 0x53, 0xd4, 0xc0, 0x7d, 0xdf, 0xf3, 0x25, 0x57,
|
||||
0x53, 0x94, 0xd7, 0x11, 0x30, 0x71, 0xab, 0x28, 0xa4, 0x89, 0xcf, 0x9d, 0xb1, 0x7d, 0xaa, 0x9a,
|
||||
0x56, 0xa4, 0x74, 0x28, 0xc1, 0xec, 0xfd, 0xb8, 0x3d, 0xdf, 0x9b, 0x86, 0x5c, 0xde, 0x79, 0x55,
|
||||
0x39, 0x3d, 0x53, 0xc0, 0xa2, 0xd6, 0xf1, 0xeb, 0x35, 0xe8, 0xdc, 0xf8, 0x9d, 0x0c, 0x30, 0x31,
|
||||
0xec, 0xbe, 0x47, 0x0d, 0x48, 0x0a, 0x9d, 0xad, 0x99, 0x79, 0xed, 0x13, 0x92, 0x7d, 0xd9, 0x09,
|
||||
0x31, 0xa0, 0x40, 0x63, 0xcf, 0xa7, 0x8c, 0x9d, 0x8a, 0x7e, 0x90, 0x2f, 0xe5, 0x9a, 0x79, 0xe3,
|
||||
0x7f, 0xe5, 0x60, 0x79, 0x93, 0xae, 0xec, 0xf6, 0x60, 0xc0, 0x27, 0xd1, 0xd9, 0xb9, 0x03, 0x15,
|
||||
0xd7, 0x1b, 0x72, 0x45, 0xb1, 0x34, 0x30, 0x10, 0x20, 0x8d, 0x5c, 0xcf, 0x6c, 0xc7, 0xa5, 0x81,
|
||||
0xd3, 0x62, 0x96, 0x11, 0x82, 0xc3, 0x7e, 0x17, 0x1a, 0x13, 0xee, 0x0e, 0xf5, 0x23, 0x42, 0x42,
|
||||
0x55, 0x4d, 0x82, 0xe5, 0xe9, 0xb8, 0x03, 0x95, 0x93, 0x29, 0xe1, 0x09, 0xc6, 0x92, 0x47, 0x1a,
|
||||
0x00, 0x09, 0x6a, 0x13, 0x7f, 0x99, 0x4c, 0x83, 0x33, 0x2c, 0x2d, 0x60, 0x69, 0x51, 0x7c, 0x8b,
|
||||
0xa2, 0xdb, 0x00, 0xc3, 0x69, 0x10, 0xca, 0x13, 0xb3, 0x80, 0x85, 0x65, 0x01, 0xa1, 0x13, 0xf3,
|
||||
0x4d, 0x58, 0x1a, 0xdb, 0x97, 0x16, 0xd2, 0x8e, 0xe5, 0xb8, 0xd6, 0xc9, 0x08, 0xef, 0x9c, 0x22,
|
||||
0xe2, 0x35, 0xc7, 0xf6, 0xe5, 0x27, 0xa2, 0xa4, 0xeb, 0x6e, 0x23, 0x5c, 0xb0, 0x15, 0x25, 0xee,
|
||||
0xf8, 0x3c, 0xe0, 0xfe, 0x39, 0x47, 0x4e, 0x90, 0x8f, 0x64, 0x1a, 0x93, 0xa0, 0x62, 0x44, 0x63,
|
||||
0x31, 0xef, 0x70, 0x34, 0xa0, 0x63, 0x6f, 0x16, 0xc7, 0x8e, 0xbb, 0x13, 0x8e, 0x06, 0xe2, 0x5e,
|
||||
0x11, 0x7c, 0x64, 0xc2, 0x7d, 0xeb, 0xc5, 0x05, 0x9e, 0xe1, 0x3c, 0xf2, 0x8d, 0x43, 0xee, 0x3f,
|
||||
0xbf, 0x10, 0x57, 0xff, 0x20, 0x40, 0x46, 0x64, 0x5f, 0xb5, 0x2a, 0x78, 0xc0, 0x4b, 0x83, 0x40,
|
||||
0xb0, 0x20, 0xfb, 0x4a, 0x1c, 0x42, 0x31, 0x5a, 0x1b, 0x77, 0x81, 0x0f, 0xb1, 0xf9, 0x00, 0x39,
|
||||
0x6a, 0x0d, 0x07, 0xdb, 0x96, 0x05, 0xa2, 0x9f, 0x40, 0x50, 0xbd, 0x1a, 0xec, 0xc9, 0xc8, 0x3e,
|
||||
0x0d, 0x90, 0xa5, 0xd4, 0xcc, 0xaa, 0x04, 0x6e, 0x0b, 0x98, 0xf1, 0x29, 0x09, 0x59, 0xda, 0xde,
|
||||
0xca, 0x33, 0x23, 0xae, 0x7a, 0x84, 0xe0, 0xbe, 0x96, 0x4c, 0xf9, 0x95, 0xb6, 0x69, 0xd9, 0x94,
|
||||
0x4d, 0x33, 0x7e, 0x2f, 0x03, 0x55, 0xd9, 0x32, 0x0a, 0x25, 0xec, 0x21, 0x30, 0xb5, 0x8b, 0xe1,
|
||||
0xa5, 0x33, 0xb4, 0x8e, 0xaf, 0x42, 0x1e, 0x10, 0xd1, 0xec, 0xdc, 0x30, 0x9b, 0xb2, 0xac, 0x7f,
|
||||
0xe9, 0x0c, 0x37, 0x44, 0x09, 0x7b, 0x00, 0xcd, 0x04, 0x7e, 0x10, 0xfa, 0x44, 0xd1, 0x3b, 0x37,
|
||||
0xcc, 0xba, 0x86, 0xdd, 0x0b, 0x7d, 0x71, 0x46, 0x84, 0xc8, 0x33, 0x0d, 0x2d, 0xc7, 0x1d, 0xf2,
|
||||
0x4b, 0x24, 0xa3, 0x9a, 0x59, 0x21, 0x58, 0x57, 0x80, 0x36, 0xea, 0x50, 0xd5, 0x9b, 0x33, 0x4e,
|
||||
0xa1, 0xa4, 0xe4, 0x25, 0x14, 0x18, 0x66, 0x86, 0x64, 0x96, 0xc3, 0x68, 0x24, 0x37, 0xa1, 0x94,
|
||||
0x1c, 0x81, 0x59, 0x0c, 0x5f, 0xbb, 0x63, 0xe3, 0x7b, 0xd0, 0xdc, 0x15, 0xc4, 0xe3, 0x0a, 0x62,
|
||||
0x95, 0xf2, 0xdf, 0x2a, 0x2c, 0x68, 0x87, 0xa6, 0x6c, 0xca, 0x2f, 0x71, 0xe7, 0x9e, 0x79, 0x41,
|
||||
0x28, 0x7b, 0xc1, 0xbf, 0x8d, 0x3f, 0xca, 0x00, 0xeb, 0x04, 0xa1, 0x33, 0xb6, 0x43, 0xbe, 0xcd,
|
||||
0x23, 0xb6, 0x70, 0x00, 0x55, 0xd1, 0x5a, 0xdf, 0x6b, 0x93, 0x40, 0x46, 0x02, 0xc5, 0x7b, 0xf2,
|
||||
0x18, 0xcf, 0x57, 0x78, 0xa8, 0x63, 0x13, 0x9b, 0x4f, 0x34, 0x20, 0x4e, 0x59, 0x68, 0xfb, 0xa7,
|
||||
0x3c, 0x44, 0x31, 0x4e, 0xca, 0xfb, 0x40, 0x20, 0x21, 0xc0, 0xad, 0xff, 0x2a, 0x2c, 0xce, 0xb5,
|
||||
0xa1, 0xf3, 0xe5, 0x72, 0x0a, 0x5f, 0xce, 0xe9, 0x7c, 0xd9, 0x82, 0xa5, 0xc4, 0xb8, 0x24, 0xa5,
|
||||
0xad, 0x41, 0x51, 0x1c, 0x08, 0x21, 0x1c, 0x64, 0x48, 0xaa, 0x3c, 0xe1, 0x5c, 0x88, 0xc1, 0x8f,
|
||||
0x60, 0xf9, 0x84, 0x73, 0xdf, 0x0e, 0xb1, 0x10, 0x4f, 0x8c, 0xd8, 0x21, 0xd9, 0xf0, 0xa2, 0x2c,
|
||||
0xeb, 0xd9, 0xe1, 0x21, 0xf7, 0xc5, 0x4e, 0x19, 0xff, 0x3b, 0x03, 0x0d, 0xc1, 0x41, 0xf7, 0x6c,
|
||||
0xf7, 0x4a, 0xad, 0xd3, 0x6e, 0xea, 0x3a, 0xdd, 0xd7, 0x2e, 0x43, 0x0d, 0xfb, 0xcb, 0x2e, 0x52,
|
||||
0x6e, 0x76, 0x91, 0xd8, 0x5d, 0xa8, 0x26, 0xc6, 0x5a, 0xc0, 0xb1, 0x42, 0x10, 0x0d, 0xf2, 0x17,
|
||||
0x5f, 0xc6, 0x77, 0xa1, 0x19, 0x0f, 0x5b, 0xae, 0x21, 0x83, 0xbc, 0x20, 0x49, 0xd9, 0x00, 0xfe,
|
||||
0x6d, 0xfc, 0xab, 0x0c, 0x21, 0x6e, 0x7a, 0x4e, 0x24, 0x9d, 0x0a, 0x44, 0x21, 0xf7, 0x2a, 0x44,
|
||||
0xf1, 0xf7, 0xb5, 0x52, 0xfd, 0x2f, 0x3e, 0x59, 0x71, 0x74, 0x02, 0xee, 0x0e, 0x2d, 0x7b, 0x34,
|
||||
0x42, 0xe6, 0x5b, 0x32, 0x8b, 0xe2, 0xbb, 0x3d, 0x1a, 0x19, 0xf7, 0x60, 0x51, 0x1b, 0xdd, 0x4b,
|
||||
0xe6, 0xb1, 0x0f, 0x6c, 0xd7, 0x09, 0xc2, 0x23, 0x37, 0x98, 0x68, 0x82, 0xdb, 0x2d, 0x28, 0x0b,
|
||||
0x0e, 0x2b, 0x46, 0x46, 0x47, 0xb6, 0x60, 0x0a, 0x96, 0x2b, 0xc6, 0x15, 0x60, 0xa1, 0x7d, 0x29,
|
||||
0x0b, 0xb3, 0xb2, 0xd0, 0xbe, 0xc4, 0x42, 0xe3, 0xbb, 0xb0, 0x94, 0x68, 0x4f, 0x76, 0xfd, 0x16,
|
||||
0x14, 0xa6, 0xe1, 0xa5, 0xa7, 0x44, 0xf3, 0x8a, 0xa4, 0x10, 0xa1, 0x00, 0x9a, 0x54, 0x62, 0x7c,
|
||||
0x04, 0x8b, 0xfb, 0xfc, 0x42, 0x1e, 0x62, 0x35, 0x90, 0x77, 0x21, 0xff, 0x0a, 0xa5, 0x10, 0xcb,
|
||||
0x8d, 0x87, 0xc0, 0xf4, 0xca, 0xb2, 0x57, 0x4d, 0x47, 0xcc, 0x24, 0x74, 0x44, 0xe3, 0x5d, 0x60,
|
||||
0x3d, 0xe7, 0xd4, 0xdd, 0xe3, 0x41, 0x60, 0x9f, 0x46, 0xc7, 0xbe, 0x09, 0xb9, 0x71, 0x70, 0x2a,
|
||||
0x79, 0x94, 0xf8, 0xd3, 0xf8, 0x16, 0x2c, 0x25, 0xf0, 0x64, 0xc3, 0x6f, 0x40, 0x39, 0x70, 0x4e,
|
||||
0x5d, 0x14, 0xac, 0x64, 0xd3, 0x31, 0xc0, 0xd8, 0x86, 0xe5, 0x4f, 0xb8, 0xef, 0x9c, 0x5c, 0xbd,
|
||||
0xaa, 0xf9, 0x64, 0x3b, 0xd9, 0xd9, 0x76, 0x3a, 0xb0, 0x32, 0xd3, 0x8e, 0xec, 0x9e, 0xc8, 0x57,
|
||||
0xee, 0x64, 0xc9, 0xa4, 0x0f, 0x8d, 0xef, 0x65, 0x75, 0xbe, 0x67, 0x1c, 0x01, 0xdb, 0xf4, 0x5c,
|
||||
0x97, 0x0f, 0xc2, 0x43, 0xce, 0xfd, 0xd8, 0x4a, 0x15, 0xd3, 0x6a, 0xe5, 0xc9, 0x9a, 0x5c, 0xd9,
|
||||
0x59, 0x66, 0x2a, 0x89, 0x98, 0x41, 0x7e, 0xc2, 0xfd, 0x31, 0x36, 0x5c, 0x32, 0xf1, 0x6f, 0x63,
|
||||
0x05, 0x96, 0x12, 0xcd, 0x4a, 0xbd, 0xfe, 0x31, 0xac, 0x6c, 0x39, 0xc1, 0x60, 0xbe, 0xc3, 0x35,
|
||||
0x28, 0x4e, 0xa6, 0xc7, 0x56, 0x92, 0x2f, 0x3f, 0xe7, 0x57, 0x42, 0xdb, 0x9b, 0xad, 0x21, 0xdb,
|
||||
0xfa, 0xbb, 0x19, 0xc8, 0xef, 0xf4, 0x77, 0x37, 0xd9, 0x3a, 0x94, 0x1c, 0x77, 0xe0, 0x8d, 0x85,
|
||||
0xe0, 0x45, 0x73, 0x8e, 0xbe, 0xaf, 0x3d, 0x60, 0xb7, 0xa0, 0x8c, 0xf2, 0x9a, 0x50, 0x6d, 0xa5,
|
||||
0xe8, 0x53, 0x12, 0x80, 0x5d, 0x6f, 0xf0, 0x42, 0xe8, 0xd4, 0xfc, 0x72, 0xe2, 0xf8, 0xa8, 0x35,
|
||||
0x2b, 0x65, 0x38, 0x4f, 0x77, 0x7d, 0x5c, 0x40, 0x1a, 0xb1, 0xf1, 0x57, 0x45, 0x28, 0xca, 0xdb,
|
||||
0x96, 0x6e, 0xee, 0xd0, 0x39, 0xe7, 0xf1, 0xcd, 0x2d, 0xbe, 0x84, 0x3c, 0xe0, 0xf3, 0xb1, 0x17,
|
||||
0x46, 0x02, 0x1b, 0xed, 0x41, 0x95, 0x80, 0x52, 0x64, 0xd3, 0x84, 0x06, 0x32, 0x31, 0xe4, 0x08,
|
||||
0x69, 0xa0, 0x5f, 0xe5, 0xb7, 0xa0, 0xa8, 0xee, 0xfe, 0x7c, 0xa4, 0xd3, 0x2c, 0x0c, 0x48, 0x5a,
|
||||
0x5b, 0x87, 0xd2, 0xc0, 0x9e, 0xd8, 0x03, 0x27, 0xbc, 0x92, 0x0c, 0x21, 0xfa, 0x16, 0xad, 0x8f,
|
||||
0xbc, 0x81, 0x3d, 0xb2, 0x8e, 0xed, 0x91, 0xed, 0x0e, 0xb8, 0xd4, 0xdd, 0xab, 0x08, 0xdc, 0x20,
|
||||
0x98, 0xd0, 0xcf, 0xe5, 0x38, 0x15, 0x16, 0xa9, 0xf0, 0x72, 0xf4, 0x0a, 0x4d, 0x08, 0x97, 0xde,
|
||||
0x78, 0xec, 0x08, 0x2d, 0x83, 0xc4, 0xb0, 0x9c, 0x59, 0x26, 0xc8, 0x36, 0xc7, 0xd9, 0xca, 0xe2,
|
||||
0x0b, 0x5a, 0xba, 0x32, 0x75, 0x45, 0xc0, 0x4f, 0xc9, 0x90, 0x30, 0x2f, 0x8b, 0xe5, 0x34, 0x59,
|
||||
0xec, 0x3d, 0x58, 0x9c, 0xba, 0x01, 0x0f, 0xc3, 0x11, 0x1f, 0x46, 0x63, 0xa9, 0x20, 0x52, 0x33,
|
||||
0x2a, 0x50, 0xc3, 0x79, 0x08, 0x4b, 0x64, 0x74, 0x08, 0xec, 0xd0, 0x0b, 0xce, 0x9c, 0xc0, 0x0a,
|
||||
0x84, 0x86, 0x44, 0xea, 0xee, 0x22, 0x16, 0xf5, 0x64, 0x49, 0x8f, 0x54, 0xa4, 0xb5, 0x19, 0x7c,
|
||||
0x9f, 0x0f, 0xb8, 0x73, 0xce, 0x87, 0x28, 0xa7, 0xe5, 0xcc, 0x95, 0x44, 0x1d, 0x53, 0x16, 0xa2,
|
||||
0xd0, 0x3d, 0x1d, 0x5b, 0xd3, 0xc9, 0xd0, 0x16, 0xc2, 0x4a, 0x9d, 0x84, 0x61, 0x77, 0x3a, 0x3e,
|
||||
0x22, 0x08, 0x7b, 0x0c, 0x4a, 0x12, 0x93, 0xf2, 0x61, 0x23, 0xc1, 0xcf, 0x04, 0xb1, 0x9a, 0x55,
|
||||
0x89, 0x41, 0x82, 0x62, 0x42, 0xe6, 0x6c, 0xce, 0xc8, 0x9c, 0x2d, 0x28, 0x4e, 0x7c, 0xe7, 0xdc,
|
||||
0x0e, 0x79, 0x6b, 0x91, 0x18, 0xb8, 0xfc, 0x14, 0x9c, 0xc1, 0x71, 0x9d, 0xd0, 0xb1, 0x43, 0xcf,
|
||||
0x6f, 0x31, 0x2c, 0x8b, 0x01, 0xec, 0x01, 0x2c, 0x22, 0x8d, 0x04, 0xa1, 0x1d, 0x4e, 0x03, 0x29,
|
||||
0x81, 0x2e, 0x21, 0x31, 0xa1, 0x0c, 0xdd, 0x43, 0x38, 0x0a, 0xa1, 0xec, 0x5b, 0xb0, 0x4a, 0x64,
|
||||
0x81, 0x35, 0xa4, 0x64, 0x8d, 0x02, 0xc1, 0x32, 0x2e, 0xc5, 0x12, 0x96, 0x0a, 0xfa, 0x96, 0xf2,
|
||||
0xb5, 0x90, 0x0e, 0x9e, 0xc2, 0x9a, 0x24, 0x93, 0xb9, 0x5a, 0x2b, 0x58, 0x6b, 0x99, 0x8a, 0x67,
|
||||
0xaa, 0x3d, 0x84, 0x45, 0x31, 0x24, 0x67, 0x60, 0xc9, 0xda, 0xe2, 0x24, 0xac, 0x8a, 0xd1, 0xa3,
|
||||
0xa6, 0xd4, 0xa0, 0x42, 0x13, 0xcb, 0x9e, 0xf3, 0x2b, 0xf6, 0x3d, 0x68, 0x10, 0xc9, 0xa0, 0x7a,
|
||||
0x85, 0x9c, 0x7e, 0x1d, 0x39, 0xfd, 0x8a, 0xb2, 0x70, 0x46, 0xa5, 0xc8, 0xec, 0xeb, 0x83, 0xc4,
|
||||
0xb7, 0x38, 0x0e, 0x23, 0xe7, 0x84, 0x87, 0xce, 0x98, 0xb7, 0xd6, 0x88, 0xc0, 0xd4, 0xb7, 0x38,
|
||||
0xa9, 0xd3, 0x09, 0x96, 0xb4, 0x88, 0x2f, 0xd0, 0x17, 0xd2, 0xee, 0xc8, 0x0b, 0xb8, 0x32, 0x51,
|
||||
0xb5, 0x6e, 0xca, 0x43, 0x28, 0x80, 0x92, 0xed, 0x19, 0x3f, 0xcd, 0xd0, 0x3d, 0x26, 0x8f, 0x7d,
|
||||
0xa0, 0x69, 0x65, 0x74, 0xe0, 0x2d, 0xcf, 0x1d, 0x5d, 0x49, 0x1e, 0x00, 0x04, 0x3a, 0x70, 0x47,
|
||||
0x78, 0x08, 0x1d, 0x57, 0x47, 0x21, 0x96, 0x59, 0x55, 0x40, 0x44, 0xba, 0x03, 0x95, 0xc9, 0xf4,
|
||||
0x78, 0xe4, 0x0c, 0x08, 0x25, 0x47, 0xad, 0x10, 0x08, 0x11, 0x84, 0x5a, 0x4a, 0x84, 0x40, 0x18,
|
||||
0x79, 0xc4, 0xa8, 0x48, 0x18, 0xa2, 0x20, 0x4b, 0xe6, 0x3e, 0x72, 0x81, 0xaa, 0x89, 0x7f, 0x1b,
|
||||
0x1b, 0xb0, 0x9c, 0x1c, 0xb4, 0xbc, 0x2f, 0x1e, 0x40, 0x49, 0xb2, 0x18, 0x65, 0xaf, 0xa8, 0x6b,
|
||||
0x16, 0x64, 0xa1, 0x59, 0x45, 0xe5, 0xc6, 0x6f, 0x2d, 0xc0, 0x92, 0x84, 0x6e, 0x8a, 0x15, 0xe9,
|
||||
0x4d, 0xc7, 0x63, 0xdb, 0x4f, 0xe1, 0x5d, 0x99, 0x97, 0xf3, 0xae, 0xec, 0x1c, 0xef, 0x4a, 0x2a,
|
||||
0xac, 0xc4, 0xfa, 0x92, 0x0a, 0xab, 0xd8, 0x02, 0xd2, 0x21, 0x74, 0xf3, 0x65, 0x4d, 0x82, 0xfb,
|
||||
0x64, 0x26, 0x9d, 0xe3, 0xb4, 0x85, 0x14, 0x4e, 0xab, 0xf3, 0xc9, 0x85, 0x19, 0x3e, 0xf9, 0x16,
|
||||
0xd0, 0x5e, 0x2b, 0xb6, 0x5f, 0x24, 0xb5, 0x02, 0x61, 0xd2, 0x06, 0x7a, 0x0f, 0x1a, 0xb3, 0xac,
|
||||
0x89, 0x78, 0x60, 0x3d, 0x85, 0x31, 0x39, 0x63, 0x8e, 0x97, 0x8c, 0x86, 0x5c, 0x96, 0x8c, 0xc9,
|
||||
0x19, 0xf3, 0x5d, 0x2c, 0x51, 0xf8, 0x1d, 0x00, 0xea, 0x1b, 0x69, 0x1d, 0x90, 0xd6, 0xdf, 0x4d,
|
||||
0xee, 0x85, 0xbe, 0xea, 0x0f, 0xc5, 0xc7, 0xd4, 0xe7, 0x48, 0xfc, 0x65, 0xac, 0x89, 0x74, 0xff,
|
||||
0x1c, 0xea, 0xde, 0x84, 0xbb, 0x56, 0xcc, 0x22, 0x2a, 0xd8, 0xd4, 0x3b, 0x2f, 0x69, 0xaa, 0xab,
|
||||
0x70, 0xcd, 0x9a, 0xa8, 0x1b, 0x7d, 0xb2, 0x3d, 0x5a, 0x78, 0xae, 0xb5, 0x56, 0xfd, 0x12, 0xad,
|
||||
0xd5, 0xb1, 0x72, 0xf4, 0x6d, 0xfc, 0x83, 0x0c, 0x54, 0xb4, 0x61, 0xb3, 0x15, 0x58, 0xdc, 0x3c,
|
||||
0x38, 0x38, 0xec, 0x98, 0xed, 0x7e, 0xf7, 0x93, 0x8e, 0xb5, 0xb9, 0x7b, 0xd0, 0xeb, 0x34, 0x6f,
|
||||
0x08, 0xf0, 0xee, 0xc1, 0x66, 0x7b, 0xd7, 0xda, 0x3e, 0x30, 0x37, 0x15, 0x38, 0xc3, 0x56, 0x81,
|
||||
0x99, 0x9d, 0xbd, 0x83, 0x7e, 0x27, 0x01, 0xcf, 0xb2, 0x26, 0x54, 0x37, 0xcc, 0x4e, 0x7b, 0x73,
|
||||
0x47, 0x42, 0x72, 0x6c, 0x19, 0x9a, 0xdb, 0x47, 0xfb, 0x5b, 0xdd, 0xfd, 0x67, 0xd6, 0x66, 0x7b,
|
||||
0x7f, 0xb3, 0xb3, 0xdb, 0xd9, 0x6a, 0xe6, 0x59, 0x0d, 0xca, 0xed, 0x8d, 0xf6, 0xfe, 0xd6, 0xc1,
|
||||
0x7e, 0x67, 0xab, 0x59, 0x30, 0x7e, 0x05, 0xca, 0xf1, 0x44, 0x2b, 0x50, 0x3c, 0xda, 0x7f, 0xbe,
|
||||
0x7f, 0xf0, 0xe9, 0x7e, 0xf3, 0x06, 0x2b, 0x43, 0x01, 0xfb, 0x6f, 0x66, 0x18, 0xc0, 0x02, 0xf5,
|
||||
0xd9, 0xcc, 0xb2, 0x12, 0xe4, 0x37, 0x0e, 0xfa, 0x3b, 0xcd, 0x9c, 0xf1, 0xe7, 0x19, 0x58, 0xc1,
|
||||
0x29, 0x0f, 0x67, 0x99, 0xc0, 0x5d, 0xa8, 0x0c, 0x3c, 0x6f, 0x22, 0x14, 0xa4, 0x58, 0x10, 0xd0,
|
||||
0x41, 0xe2, 0x80, 0x13, 0xcf, 0x3d, 0xf1, 0xfc, 0x01, 0x97, 0x3c, 0x00, 0x10, 0xb4, 0x2d, 0x20,
|
||||
0x82, 0x06, 0x25, 0x11, 0x13, 0x06, 0xb1, 0x80, 0x0a, 0xc1, 0x08, 0x65, 0x15, 0x16, 0x8e, 0x7d,
|
||||
0x6e, 0x0f, 0xce, 0xe4, 0xe9, 0x97, 0x5f, 0xec, 0xeb, 0xb1, 0xea, 0x3e, 0x10, 0x34, 0x35, 0xe2,
|
||||
0x43, 0x3c, 0x02, 0x25, 0xb3, 0x21, 0xe1, 0x9b, 0x12, 0x2c, 0x2e, 0x11, 0xfb, 0xd8, 0x76, 0x87,
|
||||
0x9e, 0xcb, 0x87, 0x52, 0x43, 0x88, 0x01, 0xc6, 0x21, 0xac, 0xce, 0xce, 0x4f, 0xf2, 0x8b, 0x0f,
|
||||
0x34, 0x7e, 0x41, 0x02, 0xfb, 0xfa, 0xf5, 0xa4, 0xa0, 0xf1, 0x8e, 0x7f, 0x9c, 0x87, 0xbc, 0x10,
|
||||
0xe0, 0xae, 0x95, 0xf5, 0x74, 0x89, 0x3c, 0x37, 0xe7, 0xb5, 0x41, 0x0b, 0x01, 0xdd, 0xec, 0x64,
|
||||
0x86, 0x2a, 0x23, 0x04, 0x6f, 0xf4, 0xa8, 0xd8, 0xe7, 0x83, 0x73, 0x69, 0x87, 0xa2, 0x62, 0x93,
|
||||
0x0f, 0xce, 0x51, 0x15, 0xb2, 0x43, 0xaa, 0x4b, 0xe7, 0xbd, 0x18, 0xd8, 0x21, 0xd6, 0x94, 0x45,
|
||||
0x58, 0xaf, 0x18, 0x15, 0x61, 0xad, 0x16, 0x14, 0x1d, 0xf7, 0xd8, 0x9b, 0xba, 0x43, 0x3c, 0xde,
|
||||
0x25, 0x53, 0x7d, 0xa2, 0x93, 0x08, 0x39, 0x91, 0xb8, 0x3f, 0xe8, 0x34, 0x97, 0x04, 0xa0, 0x2f,
|
||||
0x6e, 0x90, 0xf7, 0xa1, 0x1c, 0x5c, 0xb9, 0x03, 0xfd, 0x0c, 0x2f, 0xcb, 0xf5, 0x11, 0xb3, 0x7f,
|
||||
0xd8, 0xbb, 0x72, 0x07, 0x78, 0x62, 0x4b, 0x81, 0xfc, 0x8b, 0x3d, 0x85, 0x52, 0x64, 0xae, 0x25,
|
||||
0x0e, 0x7c, 0x53, 0xaf, 0xa1, 0x6c, 0xb4, 0xa4, 0x15, 0x47, 0xa8, 0xec, 0x11, 0x2c, 0xa0, 0x4d,
|
||||
0x35, 0x68, 0x55, 0xb1, 0x92, 0x12, 0xd3, 0xc5, 0x30, 0xd0, 0x3f, 0xc3, 0x87, 0x68, 0x5f, 0x35,
|
||||
0x25, 0xda, 0xfa, 0x73, 0xa8, 0x25, 0xda, 0xd2, 0x75, 0xdf, 0x1a, 0xe9, 0xbe, 0xef, 0xe8, 0xba,
|
||||
0x6f, 0x7c, 0x13, 0xc8, 0x6a, 0xba, 0x2e, 0xfc, 0xab, 0x50, 0x52, 0x53, 0x11, 0xe7, 0x4f, 0x9e,
|
||||
0x1d, 0xab, 0xf7, 0xd9, 0xfe, 0x66, 0xf3, 0x06, 0x6b, 0x40, 0xa5, 0xbd, 0x89, 0x47, 0x1a, 0x01,
|
||||
0x19, 0x81, 0x72, 0xd8, 0xee, 0xf5, 0x22, 0x48, 0xd6, 0xd8, 0x86, 0xe6, 0xec, 0x48, 0x05, 0x4d,
|
||||
0x86, 0x0a, 0x26, 0x2d, 0xce, 0x31, 0x40, 0x68, 0x36, 0x64, 0x44, 0x26, 0xf1, 0x99, 0x3e, 0x8c,
|
||||
0xa7, 0xd0, 0x14, 0xf7, 0x9a, 0x58, 0xaa, 0x40, 0xb3, 0xdc, 0x8e, 0x84, 0x48, 0xa6, 0x5b, 0x9d,
|
||||
0x4b, 0x66, 0x85, 0x60, 0xd8, 0x95, 0xf1, 0x01, 0x2c, 0x6a, 0xd5, 0x62, 0x4d, 0x54, 0xdc, 0x95,
|
||||
0xb3, 0x9a, 0x28, 0xea, 0x1d, 0x54, 0x62, 0xac, 0xc1, 0x8a, 0xf8, 0xec, 0x9c, 0x73, 0x37, 0xec,
|
||||
0x4d, 0x8f, 0xc9, 0x55, 0xe8, 0x78, 0xae, 0xd0, 0x47, 0xca, 0x51, 0xc9, 0xf5, 0x44, 0xfe, 0x50,
|
||||
0x2a, 0xad, 0x59, 0x24, 0x8d, 0x75, 0xad, 0x07, 0xac, 0xf8, 0x10, 0xff, 0x4d, 0x28, 0xaf, 0xe5,
|
||||
0x08, 0x24, 0x96, 0xf5, 0xb0, 0xd3, 0x31, 0xad, 0x83, 0xfd, 0xdd, 0xee, 0xbe, 0x60, 0x94, 0x62,
|
||||
0x59, 0x11, 0xb0, 0xbd, 0x8d, 0x90, 0x8c, 0xd1, 0x84, 0xfa, 0x33, 0x1e, 0x76, 0xdd, 0x13, 0x4f,
|
||||
0xb9, 0xc5, 0x7e, 0x56, 0x80, 0x46, 0x04, 0x8a, 0x95, 0xdf, 0x73, 0xee, 0x07, 0x8e, 0xe7, 0xa2,
|
||||
0x1c, 0x5b, 0x36, 0xd5, 0xa7, 0xb8, 0xdd, 0x9c, 0x21, 0x77, 0x43, 0x27, 0xbc, 0xb2, 0x12, 0x96,
|
||||
0xb2, 0xba, 0x02, 0xcb, 0x5b, 0x74, 0x19, 0x0a, 0xf6, 0xc8, 0xb1, 0x95, 0x87, 0x95, 0x3e, 0x04,
|
||||
0x74, 0xe0, 0x8d, 0x3c, 0x1f, 0x45, 0xd6, 0xb2, 0x49, 0x1f, 0xec, 0x31, 0x2c, 0x0b, 0xd1, 0x59,
|
||||
0x37, 0x5f, 0x22, 0xff, 0x20, 0xa3, 0x1d, 0x73, 0xa7, 0xe3, 0xc3, 0xd8, 0x84, 0x29, 0x4a, 0xc4,
|
||||
0xdd, 0x29, 0x6a, 0x48, 0x61, 0x29, 0xaa, 0x40, 0x5a, 0xd8, 0xa2, 0x3b, 0x1d, 0xb7, 0xb1, 0x24,
|
||||
0xc2, 0x7f, 0x02, 0x2b, 0x02, 0x3f, 0x12, 0xaf, 0xa2, 0x1a, 0x0d, 0xac, 0x21, 0x1a, 0xeb, 0xca,
|
||||
0xb2, 0xa8, 0xce, 0x2d, 0x28, 0xd3, 0xa8, 0xc4, 0x8e, 0x17, 0x48, 0xfa, 0xc6, 0xa1, 0x70, 0x3f,
|
||||
0x98, 0x73, 0x86, 0x2e, 0x90, 0x20, 0x30, 0xe3, 0x0c, 0xd5, 0xdc, 0xa9, 0xa5, 0x59, 0x77, 0xea,
|
||||
0x13, 0x58, 0x39, 0x16, 0x24, 0x78, 0xc6, 0xed, 0x21, 0xf7, 0xad, 0x98, 0xb0, 0x49, 0xcb, 0x58,
|
||||
0x12, 0x85, 0x3b, 0x58, 0x16, 0x9d, 0x03, 0x21, 0xe7, 0x08, 0xb6, 0xc0, 0x87, 0x56, 0xe8, 0x59,
|
||||
0x28, 0xfe, 0x20, 0x83, 0x29, 0x99, 0x35, 0x02, 0xf7, 0xbd, 0x4d, 0x01, 0x4c, 0xe2, 0x9d, 0xfa,
|
||||
0xf6, 0xe4, 0x4c, 0xea, 0x01, 0x11, 0xde, 0x33, 0x01, 0x64, 0x6f, 0x40, 0x51, 0x90, 0xbc, 0xcb,
|
||||
0xc9, 0x67, 0x45, 0x92, 0xb6, 0x02, 0xb1, 0x77, 0x60, 0x01, 0xfb, 0x08, 0x5a, 0x4d, 0xa4, 0xf7,
|
||||
0x6a, 0xcc, 0xc8, 0x1d, 0xd7, 0x94, 0x65, 0x42, 0x98, 0x9c, 0xfa, 0x0e, 0x71, 0x99, 0xb2, 0x89,
|
||||
0x7f, 0xb3, 0xef, 0x6b, 0x2c, 0x6b, 0x09, 0xeb, 0x2a, 0x79, 0x60, 0x86, 0xd2, 0xae, 0xe3, 0x5e,
|
||||
0x5f, 0x29, 0x33, 0xfa, 0x41, 0xbe, 0x54, 0x69, 0x56, 0x8d, 0xef, 0x40, 0x81, 0x56, 0x47, 0x10,
|
||||
0x21, 0xae, 0x5d, 0x46, 0x12, 0x21, 0x42, 0x5b, 0x50, 0x74, 0x79, 0x78, 0xe1, 0xf9, 0x2f, 0x94,
|
||||
0x2d, 0x59, 0x7e, 0x1a, 0x3f, 0x46, 0x23, 0x48, 0xe4, 0x28, 0x27, 0x7d, 0x4e, 0x90, 0x07, 0x6d,
|
||||
0x6f, 0x70, 0x66, 0x4b, 0xbb, 0x4c, 0x09, 0x01, 0xbd, 0x33, 0x7b, 0x8e, 0x3c, 0xb2, 0xf3, 0xbe,
|
||||
0xf2, 0x77, 0xa0, 0xae, 0x5c, 0xf3, 0x81, 0x35, 0xe2, 0x27, 0xa1, 0x24, 0xf7, 0xaa, 0xf4, 0xcb,
|
||||
0x07, 0xbb, 0xfc, 0x24, 0x34, 0xf6, 0x60, 0x51, 0x12, 0xe4, 0xc1, 0x84, 0xab, 0xae, 0xbf, 0x9b,
|
||||
0x26, 0x4f, 0x57, 0x9e, 0x2c, 0x25, 0x2f, 0x5a, 0x7a, 0x72, 0x90, 0x10, 0xb2, 0x8d, 0x8f, 0x81,
|
||||
0xe9, 0xd7, 0xb0, 0x6c, 0x4f, 0x4a, 0xb5, 0xca, 0x04, 0xaf, 0x3c, 0x59, 0x91, 0xec, 0xec, 0x0c,
|
||||
0xc5, 0xea, 0x04, 0xd3, 0xc1, 0x40, 0x3d, 0x99, 0x28, 0x99, 0xea, 0xd3, 0xf8, 0x93, 0x0c, 0x2c,
|
||||
0x61, 0x63, 0x4a, 0x1f, 0x90, 0x4c, 0xf6, 0xe7, 0x1e, 0xa4, 0xd8, 0x1f, 0x5d, 0xf6, 0xa1, 0x8f,
|
||||
0x2f, 0x6f, 0xf4, 0xcc, 0xcf, 0x19, 0x3d, 0xbf, 0x0e, 0xcd, 0x21, 0x1f, 0x39, 0xf8, 0x7a, 0x46,
|
||||
0x89, 0x12, 0xa4, 0x01, 0x34, 0x14, 0x5c, 0x29, 0x71, 0xff, 0x3c, 0x03, 0x8b, 0x24, 0xa9, 0xa0,
|
||||
0x3a, 0x2c, 0x17, 0xea, 0x23, 0xa5, 0xff, 0x49, 0x56, 0x25, 0xe7, 0x14, 0xdf, 0xe0, 0x08, 0x25,
|
||||
0xe4, 0x9d, 0x1b, 0x52, 0x2f, 0x94, 0x50, 0xf6, 0x21, 0xea, 0x30, 0xae, 0x85, 0xc0, 0x94, 0xd7,
|
||||
0x38, 0xc9, 0x4d, 0xd9, 0xb9, 0x81, 0x0a, 0x8e, 0x8b, 0xa0, 0x8d, 0x92, 0x50, 0x48, 0x05, 0xd8,
|
||||
0xd8, 0x86, 0x5a, 0xa2, 0x9b, 0x84, 0x65, 0xb6, 0x4a, 0x96, 0xd9, 0x39, 0xef, 0x47, 0x76, 0xde,
|
||||
0xfb, 0xf1, 0xf7, 0xf2, 0xc0, 0x04, 0x49, 0xcd, 0xec, 0xda, 0x8c, 0xeb, 0x30, 0x3b, 0xe7, 0x3a,
|
||||
0x7c, 0x0c, 0x4c, 0x43, 0x50, 0x1e, 0xcd, 0x5c, 0xe4, 0xd1, 0x6c, 0xc6, 0xb8, 0xd2, 0xa1, 0xf9,
|
||||
0x18, 0x96, 0xa5, 0x40, 0x1b, 0xf9, 0x0a, 0xd1, 0xe4, 0x46, 0xfb, 0xc3, 0x48, 0xb2, 0x55, 0x3e,
|
||||
0x43, 0x34, 0xbf, 0x29, 0xb7, 0x61, 0x60, 0x87, 0xd2, 0x52, 0x85, 0x6e, 0xc3, 0x9e, 0x3d, 0x67,
|
||||
0xfa, 0x5e, 0x78, 0x25, 0x15, 0x14, 0xe7, 0xa8, 0x40, 0x33, 0x9c, 0x94, 0x92, 0x86, 0x13, 0x03,
|
||||
0x6a, 0xca, 0x39, 0x48, 0x6f, 0x22, 0x48, 0x7a, 0xab, 0x48, 0x0f, 0x21, 0xbe, 0x8b, 0xb8, 0x0f,
|
||||
0x4d, 0x65, 0xdd, 0x88, 0x4c, 0x33, 0xe4, 0xef, 0x97, 0xc6, 0xb1, 0x4d, 0x65, 0xa0, 0x49, 0x18,
|
||||
0xc2, 0x2b, 0x33, 0x86, 0xf0, 0xf7, 0x60, 0x31, 0x10, 0x44, 0x64, 0x4d, 0x5d, 0xf9, 0x38, 0x87,
|
||||
0x0f, 0x51, 0x75, 0x2a, 0x99, 0x4d, 0x2c, 0x38, 0x8a, 0xe1, 0xf3, 0x66, 0x87, 0xda, 0xbc, 0xd9,
|
||||
0x81, 0x3d, 0x8d, 0xfd, 0x68, 0xc1, 0x99, 0x33, 0xc6, 0x8b, 0x3b, 0x7e, 0xc8, 0x22, 0x17, 0xb8,
|
||||
0x77, 0xe6, 0x8c, 0x4d, 0xe5, 0xb4, 0x15, 0x1f, 0xc6, 0x7f, 0xcd, 0x40, 0x53, 0xd0, 0x41, 0x82,
|
||||
0xce, 0x7f, 0x05, 0xf0, 0x44, 0xbe, 0x26, 0x99, 0x57, 0x04, 0xae, 0xa2, 0xf2, 0xef, 0x00, 0x92,
|
||||
0xad, 0x25, 0xf4, 0x44, 0x49, 0xe4, 0xad, 0x24, 0x91, 0xc7, 0x8c, 0x6c, 0xe7, 0x06, 0x29, 0x00,
|
||||
0x02, 0x92, 0xe6, 0xbf, 0xcc, 0xa7, 0xf8, 0x2f, 0xb5, 0xa3, 0xb0, 0x03, 0xf0, 0x9c, 0x5f, 0xed,
|
||||
0x7a, 0x03, 0xd4, 0xd0, 0x6e, 0x03, 0x08, 0x82, 0x3c, 0xb1, 0xc7, 0x8e, 0xb4, 0xae, 0x14, 0xcc,
|
||||
0xf2, 0x0b, 0x7e, 0xb5, 0x8d, 0x00, 0xb1, 0x1b, 0xa2, 0x38, 0x3e, 0x0f, 0x05, 0xb3, 0xf4, 0x82,
|
||||
0x5f, 0xd1, 0x61, 0xb0, 0xa0, 0xf6, 0x9c, 0x5f, 0x6d, 0x71, 0x12, 0xd7, 0x3c, 0x5f, 0x50, 0x82,
|
||||
0x6f, 0x5f, 0x08, 0xf9, 0x2c, 0xe1, 0x7b, 0xac, 0xf8, 0xf6, 0xc5, 0x73, 0x7e, 0xa5, 0xfc, 0xa0,
|
||||
0x45, 0x51, 0x3e, 0xf2, 0x06, 0xf2, 0x06, 0x52, 0xaf, 0x28, 0xe2, 0x41, 0x99, 0x0b, 0x2f, 0xf0,
|
||||
0x6f, 0xe3, 0x8f, 0x33, 0x50, 0x13, 0xe3, 0x47, 0x06, 0x27, 0xd6, 0x5d, 0x3d, 0xc6, 0xc9, 0xc4,
|
||||
0x8f, 0x71, 0x9e, 0x48, 0xfe, 0x40, 0xdc, 0x32, 0x7b, 0x3d, 0xb7, 0xc4, 0x05, 0x26, 0x56, 0xf9,
|
||||
0x3e, 0x94, 0xe9, 0x6c, 0x89, 0xc3, 0x9a, 0x4b, 0xec, 0x52, 0x62, 0x42, 0x66, 0x09, 0xd1, 0x9e,
|
||||
0x93, 0xef, 0x5f, 0x33, 0xb0, 0xd1, 0x12, 0x97, 0xfd, 0xc8, 0xac, 0x96, 0xb2, 0x0d, 0x85, 0x34,
|
||||
0x37, 0xf2, 0x11, 0x54, 0x34, 0x9a, 0x42, 0x6b, 0x5c, 0x34, 0x78, 0x22, 0xc0, 0x24, 0xd1, 0x24,
|
||||
0x66, 0xbf, 0x73, 0xc3, 0xac, 0x0d, 0x74, 0xc0, 0xc6, 0x02, 0xe4, 0x45, 0x25, 0xe3, 0x23, 0x58,
|
||||
0xd4, 0x9a, 0x25, 0x6d, 0x34, 0x6d, 0x4c, 0x99, 0xb4, 0x31, 0xfd, 0x8b, 0x0c, 0x2c, 0xcb, 0xda,
|
||||
0xf8, 0x70, 0xcb, 0x11, 0xd7, 0xf5, 0x5e, 0x70, 0xca, 0x7e, 0x05, 0x6a, 0xa2, 0x75, 0xcb, 0xe7,
|
||||
0xa7, 0x4e, 0x10, 0x72, 0xe5, 0xb9, 0x48, 0x39, 0x1c, 0x82, 0x6b, 0x0b, 0x54, 0x53, 0x62, 0xb2,
|
||||
0x8f, 0xa0, 0x82, 0x55, 0x49, 0x5f, 0x96, 0xdb, 0xd2, 0x9a, 0xaf, 0x48, 0x43, 0xdd, 0xb9, 0x61,
|
||||
0x42, 0x10, 0x7d, 0x6d, 0x94, 0xa1, 0x18, 0xfa, 0xce, 0xe9, 0x29, 0xf7, 0x8d, 0xd5, 0x68, 0x68,
|
||||
0xe2, 0xa4, 0xf1, 0x5e, 0xc8, 0x27, 0x42, 0x08, 0x32, 0xfe, 0x7b, 0x06, 0x2a, 0xf2, 0xec, 0xfc,
|
||||
0xdc, 0xee, 0x8a, 0x75, 0xed, 0xe5, 0x21, 0xa9, 0xc6, 0xf1, 0x43, 0xc3, 0x7b, 0xd0, 0x18, 0x0b,
|
||||
0x81, 0x48, 0x08, 0xec, 0x09, 0x5f, 0x45, 0x5d, 0x81, 0xa5, 0x3c, 0xf2, 0x10, 0x96, 0x50, 0x3c,
|
||||
0x09, 0xac, 0xd0, 0x19, 0x59, 0xaa, 0x50, 0xbe, 0xf2, 0x5b, 0xa4, 0xa2, 0xbe, 0x33, 0xda, 0x93,
|
||||
0x05, 0xe2, 0x96, 0x0e, 0x42, 0xfb, 0x94, 0x4b, 0xd1, 0x97, 0x3e, 0x8c, 0x16, 0xac, 0xce, 0xc8,
|
||||
0xea, 0x4a, 0xcf, 0xf8, 0x87, 0x35, 0x58, 0x9b, 0x2b, 0x92, 0xfa, 0x46, 0x64, 0xa3, 0x1f, 0x39,
|
||||
0xe3, 0x63, 0x2f, 0x32, 0x85, 0x65, 0x34, 0x1b, 0xfd, 0xae, 0x28, 0x51, 0xa6, 0x30, 0x0e, 0x2b,
|
||||
0x8a, 0x20, 0xd0, 0x96, 0x15, 0x89, 0xf3, 0x59, 0x14, 0x36, 0xdf, 0x4f, 0x32, 0xaa, 0xd9, 0xee,
|
||||
0x14, 0x5c, 0xbf, 0xfe, 0x96, 0x26, 0x73, 0xb0, 0x80, 0x9d, 0x40, 0x2b, 0xa2, 0x3b, 0x29, 0x1f,
|
||||
0x69, 0xba, 0x89, 0xe8, 0xe9, 0x1b, 0xaf, 0xe8, 0x29, 0x61, 0x24, 0x31, 0x57, 0x15, 0xb9, 0x52,
|
||||
0x63, 0x51, 0x3f, 0xe7, 0xf0, 0xa6, 0xea, 0x07, 0x65, 0x9d, 0xf9, 0xde, 0xf2, 0xaf, 0x35, 0x2f,
|
||||
0x34, 0xfe, 0x24, 0xbb, 0xbc, 0x25, 0x1b, 0x8e, 0x8a, 0xf4, 0x7e, 0xcf, 0x60, 0xf5, 0xc2, 0x76,
|
||||
0x42, 0x35, 0x3f, 0x4d, 0x2d, 0x2a, 0x60, 0x7f, 0x4f, 0x5e, 0xd1, 0xdf, 0xa7, 0x54, 0x39, 0x21,
|
||||
0xfd, 0x2d, 0x5f, 0xcc, 0x03, 0x83, 0xf5, 0xff, 0x9c, 0x85, 0x7a, 0xb2, 0x15, 0x71, 0xa8, 0x25,
|
||||
0x1f, 0x52, 0xf2, 0x84, 0x94, 0xc7, 0xa5, 0x89, 0x76, 0x9f, 0xe4, 0x88, 0x79, 0xe3, 0x71, 0x36,
|
||||
0xc5, 0x78, 0xac, 0xdb, 0x6c, 0x73, 0xaf, 0xf2, 0x6d, 0xe5, 0x5f, 0xcb, 0xb7, 0x55, 0x48, 0xf3,
|
||||
0x6d, 0x5d, 0xef, 0x10, 0x59, 0xf8, 0xb9, 0x1c, 0x22, 0xc5, 0xeb, 0x1d, 0x22, 0xeb, 0x7f, 0x95,
|
||||
0x01, 0x36, 0x4f, 0xa9, 0xec, 0x19, 0xd9, 0xc9, 0x5d, 0x3e, 0x92, 0x5c, 0xec, 0x9b, 0xaf, 0x47,
|
||||
0xed, 0x6a, 0x83, 0x54, 0x6d, 0xf6, 0x08, 0x96, 0xf4, 0x77, 0xc1, 0xba, 0xaa, 0x52, 0x33, 0x99,
|
||||
0x5e, 0x14, 0x2b, 0xb4, 0x9a, 0x63, 0x2f, 0xff, 0x4a, 0xc7, 0x5e, 0xe1, 0x95, 0x8e, 0xbd, 0x85,
|
||||
0xa4, 0x63, 0x6f, 0xfd, 0xef, 0x64, 0x60, 0x29, 0x85, 0xa8, 0xbe, 0xba, 0x39, 0x0b, 0x5a, 0x48,
|
||||
0xb0, 0x98, 0xac, 0xa4, 0x05, 0x8d, 0xbb, 0xac, 0xff, 0x04, 0x6a, 0x89, 0x43, 0xf4, 0xd5, 0x75,
|
||||
0x3f, 0xab, 0x68, 0x11, 0x29, 0xeb, 0x8a, 0xd6, 0xfa, 0x5f, 0x66, 0x81, 0xcd, 0x9f, 0xe3, 0x5f,
|
||||
0xe6, 0x10, 0xe6, 0x17, 0x29, 0x37, 0xbf, 0x48, 0xff, 0xff, 0xee, 0x95, 0xf7, 0x60, 0x51, 0xc6,
|
||||
0x32, 0x68, 0x4e, 0x11, 0x22, 0x94, 0x66, 0x54, 0xa0, 0x46, 0xf1, 0x9d, 0x59, 0x9f, 0x6a, 0x29,
|
||||
0xf1, 0x7c, 0x5b, 0xbb, 0x58, 0x93, 0xae, 0x55, 0x63, 0x1d, 0x5a, 0x72, 0x69, 0xe6, 0x4d, 0x75,
|
||||
0xbf, 0x93, 0x8f, 0xb4, 0x64, 0x2c, 0x94, 0x42, 0xf1, 0xb7, 0xa0, 0xaa, 0x5f, 0x36, 0x72, 0x1f,
|
||||
0x66, 0xbc, 0x61, 0x42, 0x1c, 0xf6, 0xb4, 0xd3, 0xba, 0x09, 0xe4, 0xe3, 0x18, 0x46, 0xd5, 0x48,
|
||||
0x82, 0x78, 0x89, 0x51, 0x1c, 0x85, 0xa3, 0xc4, 0xe6, 0xff, 0x35, 0xa8, 0x27, 0xed, 0x56, 0x52,
|
||||
0xd4, 0x4b, 0x93, 0x0e, 0x45, 0xed, 0x84, 0x21, 0x8b, 0x7d, 0x1f, 0x9a, 0xb3, 0x76, 0x2f, 0xf9,
|
||||
0xb6, 0xf4, 0x9a, 0xfa, 0x0d, 0x27, 0x69, 0x0a, 0x63, 0x3b, 0xb0, 0x9c, 0x76, 0xdd, 0xe2, 0xae,
|
||||
0x5c, 0xaf, 0x16, 0xb0, 0xf9, 0x2b, 0x95, 0x7d, 0x57, 0x9a, 0x37, 0x0b, 0x69, 0x4e, 0x22, 0x6d,
|
||||
0xb1, 0x1f, 0xd2, 0x7f, 0x9a, 0xa1, 0xf3, 0x1c, 0x20, 0x86, 0xb1, 0x26, 0x54, 0x0f, 0x0e, 0x3b,
|
||||
0xfb, 0xd6, 0xe6, 0x4e, 0x7b, 0x7f, 0xbf, 0xb3, 0xdb, 0xbc, 0xc1, 0x18, 0xd4, 0xd1, 0xbb, 0xb3,
|
||||
0x15, 0xc1, 0x32, 0x02, 0x26, 0xcd, 0xcc, 0x0a, 0x96, 0x65, 0xcb, 0xd0, 0xec, 0xee, 0xcf, 0x40,
|
||||
0x73, 0xac, 0x05, 0xcb, 0x87, 0x1d, 0x72, 0x08, 0x25, 0xda, 0xcd, 0x0b, 0x11, 0x4e, 0x4e, 0x57,
|
||||
0x88, 0x70, 0x14, 0x09, 0x23, 0xa9, 0x4f, 0x49, 0x36, 0xbf, 0x9b, 0x81, 0x95, 0x99, 0x82, 0xf8,
|
||||
0x7d, 0x33, 0xc9, 0x35, 0x49, 0x89, 0xa6, 0x8a, 0x40, 0x45, 0xc3, 0xef, 0xc1, 0x62, 0xa4, 0xea,
|
||||
0xcd, 0xf0, 0xa5, 0x66, 0x54, 0xa0, 0x90, 0x1f, 0xc1, 0x92, 0xa6, 0x31, 0xce, 0x9c, 0x50, 0xa6,
|
||||
0x15, 0xc9, 0x0a, 0xc6, 0x5a, 0xf4, 0x8e, 0x74, 0x66, 0xd4, 0x43, 0x0a, 0xaf, 0xd1, 0x0b, 0x62,
|
||||
0xeb, 0x6f, 0x72, 0xbc, 0xea, 0x53, 0xa8, 0xf2, 0x09, 0x42, 0x48, 0x8e, 0x56, 0xdf, 0x70, 0xd5,
|
||||
0xfd, 0xef, 0x2f, 0x00, 0xfb, 0x78, 0xca, 0xfd, 0x2b, 0x7c, 0xbf, 0x1c, 0xbc, 0xea, 0x41, 0x8f,
|
||||
0x52, 0x8b, 0xb2, 0xaf, 0x15, 0xa3, 0x90, 0x16, 0x23, 0x90, 0x7f, 0x75, 0x8c, 0x40, 0xe1, 0x55,
|
||||
0x31, 0x02, 0x6f, 0x43, 0xcd, 0x39, 0x75, 0x3d, 0xc1, 0x80, 0x84, 0x6c, 0x12, 0xb4, 0x16, 0xee,
|
||||
0xe6, 0xee, 0x57, 0xcd, 0xaa, 0x04, 0x0a, 0xc9, 0x24, 0x60, 0x1f, 0xc5, 0x48, 0x7c, 0x78, 0x8a,
|
||||
0xf1, 0x2c, 0x3a, 0xeb, 0xe9, 0x0c, 0x4f, 0xb9, 0xd4, 0x02, 0xd1, 0x2e, 0xa2, 0x2a, 0x0b, 0x78,
|
||||
0xc0, 0xde, 0x81, 0x7a, 0xe0, 0x4d, 0x85, 0xa8, 0xa7, 0x96, 0x81, 0xec, 0xc3, 0x55, 0x82, 0x1e,
|
||||
0x2a, 0x67, 0xc0, 0xd2, 0x34, 0xe0, 0xd6, 0xd8, 0x09, 0x02, 0x71, 0x41, 0x0f, 0x3c, 0x37, 0xf4,
|
||||
0xbd, 0x91, 0x34, 0xf9, 0x2e, 0x4e, 0x03, 0xbe, 0x47, 0x25, 0x9b, 0x54, 0xc0, 0xbe, 0x1d, 0x0f,
|
||||
0x69, 0x62, 0x3b, 0x7e, 0xd0, 0x02, 0x1c, 0x92, 0x9a, 0x29, 0x4a, 0x54, 0xb6, 0xe3, 0x47, 0x63,
|
||||
0x11, 0x1f, 0xc1, 0x4c, 0xec, 0x42, 0x65, 0x36, 0x76, 0xe1, 0x47, 0xe9, 0xb1, 0x0b, 0x35, 0x6c,
|
||||
0xfa, 0xb1, 0x6c, 0x7a, 0x7e, 0x8b, 0xbf, 0x54, 0x08, 0xc3, 0x7c, 0x48, 0x46, 0xfd, 0xcb, 0x84,
|
||||
0x64, 0x34, 0xd2, 0x42, 0x32, 0xde, 0x87, 0x0a, 0x3e, 0x96, 0xb7, 0xce, 0x1c, 0x37, 0x54, 0x26,
|
||||
0xec, 0xa6, 0xfe, 0x9a, 0x7e, 0x47, 0x28, 0xd3, 0xe0, 0xab, 0x3f, 0x83, 0xf9, 0xe8, 0x88, 0xc5,
|
||||
0x5f, 0x62, 0x74, 0x84, 0x7c, 0xd4, 0xff, 0x10, 0x4a, 0x6a, 0x9f, 0x18, 0x83, 0xfc, 0x89, 0xef,
|
||||
0x8d, 0x95, 0x69, 0x4f, 0xfc, 0xcd, 0xea, 0x90, 0x0d, 0x3d, 0x59, 0x39, 0x1b, 0x7a, 0xc6, 0x6f,
|
||||
0x40, 0x45, 0x23, 0x35, 0xf6, 0x16, 0x19, 0x11, 0x84, 0xb4, 0x2c, 0xb5, 0x64, 0x5a, 0xc5, 0xb2,
|
||||
0x84, 0x76, 0x87, 0x82, 0xdf, 0x0c, 0x1d, 0x9f, 0x63, 0x1c, 0x93, 0xe5, 0xf3, 0x73, 0xee, 0x07,
|
||||
0xca, 0xd4, 0xda, 0x8c, 0x0a, 0x4c, 0x82, 0x1b, 0x7f, 0x13, 0x96, 0x12, 0x7b, 0x2b, 0x59, 0xc4,
|
||||
0x3b, 0xb0, 0x80, 0xeb, 0xa6, 0x5c, 0x61, 0xc9, 0x28, 0x05, 0x59, 0x86, 0x01, 0xaa, 0x64, 0x25,
|
||||
0xb6, 0x26, 0xbe, 0x77, 0x8c, 0x9d, 0x64, 0xcc, 0x8a, 0x84, 0x1d, 0xfa, 0xde, 0xb1, 0xf1, 0x67,
|
||||
0x39, 0xc8, 0xed, 0x78, 0x13, 0xfd, 0xf5, 0x47, 0x66, 0xee, 0xf5, 0x87, 0x54, 0x01, 0xac, 0x48,
|
||||
0xc4, 0x97, 0x52, 0x1b, 0xda, 0x47, 0x95, 0x98, 0x7f, 0x1f, 0xea, 0x82, 0x4f, 0x84, 0x9e, 0xd0,
|
||||
0xa1, 0x2e, 0x6c, 0x9f, 0x62, 0x16, 0x72, 0x74, 0xf8, 0xec, 0x71, 0xd8, 0xf7, 0xb6, 0x09, 0xce,
|
||||
0x96, 0x21, 0x17, 0x09, 0xb0, 0x58, 0x2c, 0x3e, 0x85, 0x72, 0x8d, 0xaf, 0xf7, 0xae, 0xa4, 0xaf,
|
||||
0x47, 0x7e, 0xb1, 0x6f, 0xc2, 0x52, 0xb2, 0x5d, 0x62, 0x45, 0x52, 0x22, 0xd1, 0x1b, 0x46, 0x9e,
|
||||
0x74, 0x13, 0x04, 0x1f, 0x21, 0x1c, 0xe9, 0x32, 0x3e, 0xe1, 0x1c, 0x8b, 0x34, 0xa6, 0x57, 0x4a,
|
||||
0x30, 0xbd, 0x3b, 0x50, 0x09, 0x47, 0xe7, 0xd6, 0xc4, 0xbe, 0x1a, 0x79, 0xf6, 0x50, 0x9e, 0x6f,
|
||||
0x08, 0x47, 0xe7, 0x87, 0x04, 0x61, 0x8f, 0x00, 0xc6, 0x93, 0x89, 0x3c, 0x7b, 0x68, 0x6e, 0x8c,
|
||||
0x49, 0x79, 0xef, 0xf0, 0x90, 0x48, 0xce, 0x2c, 0x8f, 0x27, 0x13, 0xfa, 0x93, 0x6d, 0x41, 0x3d,
|
||||
0x35, 0xd6, 0xe8, 0xb6, 0x7a, 0x6c, 0xe6, 0x4d, 0x1e, 0xa6, 0x1c, 0xce, 0xda, 0x40, 0x87, 0xad,
|
||||
0x7f, 0x1f, 0xd8, 0x2f, 0x18, 0xf1, 0xd3, 0x87, 0x72, 0x34, 0x3e, 0x3d, 0x60, 0x06, 0x9f, 0x8f,
|
||||
0x56, 0x12, 0x01, 0x33, 0xed, 0xe1, 0xd0, 0x17, 0x7c, 0x91, 0x2e, 0xcc, 0x88, 0xe5, 0x83, 0x76,
|
||||
0x63, 0xb6, 0x89, 0xef, 0x1b, 0x7f, 0x91, 0x81, 0x02, 0x45, 0xef, 0xbc, 0x0b, 0x0d, 0xc2, 0x8f,
|
||||
0x5e, 0xd2, 0x48, 0x0f, 0x11, 0xdd, 0xbb, 0x7d, 0xf9, 0x88, 0x46, 0x1c, 0x0b, 0x2d, 0xf2, 0x30,
|
||||
0x1b, 0xed, 0xbc, 0x16, 0x7d, 0x78, 0x07, 0xca, 0x51, 0xd7, 0x1a, 0xe9, 0x94, 0x54, 0xcf, 0xec,
|
||||
0x4d, 0xc8, 0x9f, 0x79, 0x13, 0xa5, 0x8b, 0x43, 0xbc, 0x92, 0x26, 0xc2, 0xe3, 0xb1, 0x88, 0x3e,
|
||||
0x68, 0xf0, 0x52, 0x87, 0x8c, 0x3a, 0x41, 0x32, 0x98, 0x9f, 0xe3, 0x42, 0xca, 0x1c, 0x8f, 0xa0,
|
||||
0x21, 0xf8, 0x80, 0xe6, 0xa9, 0xbd, 0xfe, 0xd2, 0xfc, 0xba, 0x90, 0xf0, 0x06, 0xa3, 0xe9, 0x90,
|
||||
0xeb, 0x96, 0x10, 0x7c, 0xd6, 0x21, 0xe1, 0x4a, 0x3d, 0x30, 0x7e, 0x3f, 0x43, 0xfc, 0x45, 0xb4,
|
||||
0xcb, 0xee, 0x43, 0x5e, 0xdc, 0x6f, 0x33, 0x96, 0xba, 0xe8, 0x1d, 0xaf, 0xc0, 0x33, 0x11, 0x03,
|
||||
0xc3, 0x75, 0xa7, 0xe3, 0x64, 0xeb, 0x35, 0xb3, 0xe2, 0x4e, 0xc7, 0x91, 0x31, 0xe1, 0x6b, 0x6a,
|
||||
0x5a, 0x33, 0x8a, 0x38, 0xcd, 0x3e, 0x3a, 0xa6, 0x0f, 0xb5, 0xf7, 0x21, 0xf9, 0xc4, 0x8d, 0xa9,
|
||||
0xa4, 0xc0, 0xe1, 0x29, 0xd7, 0xde, 0x85, 0xfc, 0x61, 0x16, 0x6a, 0x89, 0x11, 0xe1, 0x03, 0x19,
|
||||
0x71, 0x01, 0x90, 0x15, 0x58, 0xee, 0x37, 0x08, 0x90, 0x14, 0xd4, 0xb5, 0x75, 0xca, 0x26, 0xd6,
|
||||
0x29, 0xf2, 0x49, 0xe7, 0x74, 0x9f, 0xf4, 0x63, 0x28, 0xc7, 0x11, 0xa7, 0xc9, 0x21, 0x89, 0xfe,
|
||||
0xd4, 0x6b, 0xe6, 0x18, 0x29, 0xf6, 0x62, 0x17, 0x74, 0x2f, 0xf6, 0xf7, 0x34, 0xa7, 0xe7, 0x02,
|
||||
0x36, 0x63, 0xa4, 0xad, 0xe8, 0x2f, 0xc5, 0xe5, 0x69, 0x7c, 0x04, 0x15, 0x6d, 0xf0, 0xba, 0x73,
|
||||
0x33, 0x93, 0x70, 0x6e, 0x46, 0x71, 0x07, 0xd9, 0x38, 0xee, 0xc0, 0xf8, 0xad, 0x2c, 0xd4, 0xc4,
|
||||
0xf9, 0x72, 0xdc, 0xd3, 0x43, 0x6f, 0xe4, 0x0c, 0xd0, 0x2a, 0x1c, 0x9d, 0x30, 0x29, 0x68, 0xa9,
|
||||
0x73, 0x26, 0x8f, 0x18, 0xc9, 0x59, 0x7a, 0x78, 0x15, 0x31, 0xe9, 0x28, 0xbc, 0xca, 0x80, 0x9a,
|
||||
0x60, 0x8c, 0xc7, 0x76, 0xc0, 0xb5, 0x78, 0x58, 0xb3, 0x72, 0xc2, 0xf9, 0x86, 0x1d, 0x10, 0x87,
|
||||
0xfc, 0x26, 0x2c, 0x09, 0x1c, 0x8c, 0x2c, 0x19, 0x3b, 0xa3, 0x91, 0x43, 0x98, 0x64, 0x6a, 0x68,
|
||||
0x9e, 0x70, 0x6e, 0xda, 0x21, 0xdf, 0x13, 0x05, 0x32, 0x7c, 0xb6, 0x34, 0x74, 0x02, 0xfb, 0x38,
|
||||
0x7e, 0xc6, 0x14, 0x7d, 0xa3, 0x2f, 0xc7, 0xbe, 0xd4, 0x7c, 0x39, 0x14, 0x62, 0x56, 0x19, 0xdb,
|
||||
0x97, 0x91, 0x2f, 0x67, 0x86, 0x92, 0x8a, 0xb3, 0x94, 0x64, 0xfc, 0xb7, 0x2c, 0x54, 0x34, 0xb2,
|
||||
0x7c, 0x9d, 0xdb, 0xf5, 0xf6, 0x9c, 0x15, 0xbf, 0xac, 0x1b, 0xec, 0xdf, 0x4e, 0x76, 0x89, 0x2e,
|
||||
0x5f, 0x0a, 0xd4, 0xd5, 0x08, 0xf8, 0x16, 0x94, 0xc5, 0xa9, 0x7b, 0x1f, 0x8d, 0x62, 0x32, 0xcc,
|
||||
0x1c, 0x01, 0x87, 0xd3, 0x63, 0x55, 0xf8, 0x04, 0x0b, 0x0b, 0x71, 0xe1, 0x13, 0x51, 0xf8, 0xb2,
|
||||
0xb7, 0x8b, 0xdf, 0x81, 0xaa, 0x6c, 0x15, 0xf7, 0x14, 0xa7, 0x1b, 0x9f, 0xfa, 0xc4, 0x7e, 0x9b,
|
||||
0x15, 0xea, 0x8e, 0x36, 0x5f, 0x56, 0x7c, 0xa2, 0x2a, 0x96, 0x5e, 0x55, 0xf1, 0x09, 0x7d, 0x18,
|
||||
0xdb, 0xd1, 0x73, 0x50, 0x7c, 0x6e, 0xa0, 0xf8, 0xd8, 0x23, 0x58, 0x52, 0xec, 0x6a, 0xea, 0xda,
|
||||
0xae, 0xeb, 0x4d, 0xdd, 0x01, 0x57, 0x01, 0x09, 0x4c, 0x16, 0x1d, 0xc5, 0x25, 0xc6, 0x30, 0x8a,
|
||||
0x58, 0xa3, 0x67, 0x0b, 0x0f, 0xa0, 0x40, 0x72, 0x39, 0x09, 0x1f, 0xe9, 0x8c, 0x8b, 0x50, 0xd8,
|
||||
0x7d, 0x28, 0x90, 0x78, 0x9e, 0xbd, 0x96, 0xd9, 0x10, 0x82, 0xf1, 0x10, 0x1a, 0x28, 0x62, 0x6a,
|
||||
0x1c, 0xf7, 0x65, 0x52, 0x89, 0xb1, 0x0c, 0x6c, 0x9f, 0x0e, 0x91, 0xfe, 0x9c, 0xe6, 0x7f, 0xe6,
|
||||
0xa0, 0xa2, 0x81, 0x05, 0x5b, 0xc4, 0x07, 0x18, 0xd6, 0xd0, 0xb1, 0xc7, 0x5c, 0xf9, 0x1e, 0x6a,
|
||||
0x66, 0x0d, 0xa1, 0x5b, 0x12, 0x28, 0x2e, 0x05, 0xfb, 0xfc, 0xd4, 0xf2, 0xa6, 0xa1, 0x35, 0xe4,
|
||||
0xa7, 0x3e, 0xe7, 0x52, 0x58, 0xaa, 0xda, 0xe7, 0xa7, 0x07, 0xd3, 0x70, 0x0b, 0x61, 0x02, 0x4b,
|
||||
0x10, 0xb5, 0x86, 0x25, 0xdf, 0x0c, 0x8c, 0xed, 0xcb, 0x18, 0x4b, 0x3e, 0x5c, 0xa1, 0x25, 0xca,
|
||||
0x47, 0x0f, 0x57, 0x48, 0x6d, 0x99, 0xe5, 0xe4, 0x85, 0x79, 0x4e, 0xfe, 0x6d, 0x58, 0x25, 0x4e,
|
||||
0x2e, 0x79, 0x84, 0x35, 0x43, 0x52, 0xcb, 0x58, 0x2a, 0x27, 0xa9, 0xc9, 0x5f, 0x4d, 0x31, 0x03,
|
||||
0x75, 0x3e, 0x02, 0xe7, 0xc7, 0x74, 0xa2, 0x32, 0xa6, 0x98, 0x99, 0x6c, 0xbc, 0xe7, 0xfc, 0x98,
|
||||
0x0b, 0x4c, 0x74, 0x8c, 0xea, 0x98, 0xf2, 0x89, 0xec, 0xd8, 0x71, 0x67, 0x31, 0xed, 0xcb, 0x24,
|
||||
0x66, 0x59, 0x62, 0xda, 0x97, 0x3a, 0xe6, 0x53, 0x58, 0x1b, 0xf3, 0xa1, 0x63, 0x27, 0x9b, 0xb5,
|
||||
0x62, 0x09, 0x62, 0x99, 0x8a, 0xb5, 0x3a, 0x3d, 0xd2, 0x20, 0xc5, 0x6a, 0xfc, 0xd8, 0x1b, 0x1f,
|
||||
0x3b, 0x74, 0x79, 0x92, 0xab, 0x36, 0x6f, 0xd6, 0xdd, 0xe9, 0xf8, 0x87, 0x08, 0x16, 0x55, 0x02,
|
||||
0xa3, 0x06, 0x95, 0x5e, 0xe8, 0x4d, 0xd4, 0x36, 0xd7, 0xa1, 0x4a, 0x9f, 0x32, 0xdc, 0xe4, 0x16,
|
||||
0xdc, 0x44, 0xda, 0xec, 0x7b, 0x13, 0x6f, 0xe4, 0x9d, 0x5e, 0x25, 0x0c, 0x4a, 0xff, 0x23, 0x03,
|
||||
0x4b, 0x89, 0x52, 0x79, 0xce, 0xbf, 0x4d, 0x07, 0x2b, 0x8a, 0x19, 0x20, 0x72, 0x5e, 0xd4, 0x2e,
|
||||
0x1f, 0x42, 0xa4, 0x53, 0xa5, 0xe2, 0x08, 0xda, 0x71, 0xac, 0xab, 0xaa, 0x48, 0xb4, 0xdd, 0x9a,
|
||||
0xa7, 0x6d, 0x59, 0x5f, 0x45, 0xc1, 0xaa, 0x26, 0xfe, 0xba, 0x7c, 0xc6, 0x3c, 0x94, 0x53, 0xce,
|
||||
0x25, 0x1f, 0x6a, 0xea, 0xc6, 0x27, 0x35, 0x82, 0xd8, 0x22, 0x15, 0x18, 0xff, 0x36, 0x03, 0x10,
|
||||
0x8f, 0x0e, 0x9f, 0x8a, 0x46, 0x17, 0x28, 0xa5, 0x91, 0xd1, 0x2e, 0xcb, 0xb7, 0xa0, 0x1a, 0xbd,
|
||||
0x18, 0x8b, 0xaf, 0xe4, 0x8a, 0x82, 0x89, 0x7b, 0xf9, 0x1e, 0x34, 0x4e, 0x47, 0xde, 0x31, 0x8a,
|
||||
0x4e, 0xf2, 0x02, 0xa5, 0xa0, 0x9b, 0x3a, 0x81, 0xd5, 0xb5, 0x18, 0x5f, 0xe0, 0xf9, 0xd4, 0x47,
|
||||
0x65, 0xfa, 0x75, 0x6c, 0xfc, 0x76, 0x36, 0x7a, 0x3a, 0x13, 0xaf, 0xc4, 0xcb, 0xf5, 0x8c, 0x9f,
|
||||
0xc7, 0x03, 0xfb, 0x32, 0xcf, 0xc3, 0x47, 0x50, 0xf7, 0x89, 0x3b, 0x2a, 0xd6, 0x99, 0x7f, 0x09,
|
||||
0xeb, 0xac, 0xf9, 0x89, 0x2b, 0xf7, 0xeb, 0xd0, 0xb4, 0x87, 0xe7, 0xdc, 0x0f, 0x1d, 0x34, 0xd6,
|
||||
0xa2, 0xa0, 0x26, 0x1f, 0xab, 0x68, 0x70, 0x94, 0x88, 0xee, 0x41, 0x43, 0x86, 0x40, 0x45, 0x98,
|
||||
0x32, 0xa9, 0x42, 0x0c, 0x16, 0x88, 0xc6, 0x7f, 0x50, 0x6f, 0x75, 0x92, 0xbb, 0xfb, 0xf2, 0x55,
|
||||
0xd1, 0x67, 0x98, 0x9d, 0xf7, 0xad, 0x48, 0x42, 0x92, 0x36, 0x60, 0xc9, 0x8f, 0x08, 0x28, 0x2d,
|
||||
0xc0, 0xc9, 0x65, 0xcd, 0xbf, 0xce, 0xb2, 0x1a, 0x7f, 0x9c, 0x81, 0xe2, 0x8e, 0x37, 0x11, 0x7a,
|
||||
0xb9, 0x90, 0xe7, 0xf0, 0x98, 0x44, 0xe1, 0x87, 0x0b, 0xe2, 0xb3, 0x3b, 0x7c, 0x79, 0xc8, 0x40,
|
||||
0xaa, 0xbc, 0x51, 0x4b, 0xca, 0x1b, 0xdf, 0x83, 0x5b, 0xe8, 0x8d, 0xf0, 0xbd, 0x89, 0xe7, 0x8b,
|
||||
0xa3, 0x6a, 0x8f, 0x48, 0xee, 0xf0, 0xdc, 0xf0, 0x4c, 0xf1, 0xce, 0x9b, 0x27, 0x9c, 0x1f, 0x6a,
|
||||
0x18, 0x7b, 0x11, 0x02, 0xc6, 0xd2, 0x8c, 0xc2, 0x73, 0x8b, 0x54, 0x45, 0x29, 0x18, 0x11, 0x47,
|
||||
0x6d, 0x88, 0x82, 0x0e, 0xc2, 0x51, 0x34, 0x32, 0xbe, 0x0b, 0xe5, 0xc8, 0xea, 0xc0, 0xde, 0x83,
|
||||
0xf2, 0x99, 0x37, 0x91, 0xa6, 0x89, 0x4c, 0x22, 0xac, 0x42, 0xce, 0xda, 0x2c, 0x9d, 0xd1, 0x1f,
|
||||
0x81, 0xf1, 0x67, 0x45, 0x28, 0x76, 0xdd, 0x73, 0xcf, 0x19, 0xe0, 0x6b, 0x9f, 0x31, 0x1f, 0x7b,
|
||||
0x2a, 0x0e, 0x53, 0xfc, 0x8d, 0x1e, 0xfd, 0x38, 0x35, 0x42, 0x4e, 0x7a, 0xf4, 0xa3, 0xa4, 0x08,
|
||||
0x2b, 0xb0, 0xe0, 0xeb, 0xb9, 0x0d, 0x0a, 0x3e, 0xbe, 0x3f, 0x8c, 0x94, 0xb6, 0x82, 0x16, 0xc7,
|
||||
0x2a, 0xda, 0xa2, 0x98, 0x7b, 0x5c, 0x32, 0x8a, 0x8b, 0x29, 0x23, 0x04, 0x17, 0xec, 0x0d, 0x28,
|
||||
0xca, 0x28, 0x06, 0x7a, 0x13, 0x4e, 0x0f, 0x06, 0x25, 0x08, 0xa9, 0xc1, 0xe7, 0xe4, 0x4d, 0x8a,
|
||||
0x24, 0x2a, 0xa1, 0xa7, 0x4b, 0xe0, 0x96, 0xa0, 0xb5, 0x3b, 0x50, 0x21, 0x7c, 0x42, 0x29, 0xc9,
|
||||
0xf7, 0x39, 0x08, 0x42, 0x84, 0x94, 0x14, 0x21, 0xe5, 0xd4, 0x14, 0x21, 0xf8, 0x9c, 0x2b, 0xe2,
|
||||
0xb2, 0x34, 0x45, 0xa0, 0xc4, 0x10, 0x1a, 0x5c, 0xe5, 0xc7, 0x91, 0xca, 0x3d, 0x85, 0x89, 0x29,
|
||||
0xe5, 0xfe, 0x6d, 0xa8, 0x9d, 0xd8, 0xa3, 0xd1, 0xb1, 0x3d, 0x78, 0x41, 0x3a, 0x69, 0x95, 0xcc,
|
||||
0x70, 0x0a, 0x88, 0x4a, 0xe9, 0x1d, 0xa8, 0x68, 0xbb, 0x8c, 0x8f, 0x6f, 0xf2, 0x26, 0xc4, 0xfb,
|
||||
0x3b, 0x6b, 0x6a, 0xaa, 0xbf, 0x86, 0xa9, 0x49, 0x7b, 0x84, 0xd4, 0x48, 0x3e, 0x42, 0xba, 0x85,
|
||||
0xdc, 0x54, 0x3e, 0x54, 0x69, 0x52, 0x16, 0x02, 0x7b, 0x38, 0xc4, 0x87, 0x2a, 0x94, 0xf2, 0x0b,
|
||||
0x17, 0x8f, 0xca, 0x17, 0x49, 0xa8, 0x25, 0x18, 0xa1, 0xdc, 0x26, 0x7b, 0xe9, 0xc4, 0x76, 0x86,
|
||||
0xf8, 0xe8, 0x93, 0xd4, 0xd8, 0xa2, 0x3d, 0x0e, 0x0f, 0x6d, 0x67, 0xc8, 0xee, 0x42, 0x55, 0x15,
|
||||
0xe3, 0xed, 0xb8, 0x44, 0xeb, 0x2f, 0x8b, 0xc5, 0x9d, 0x68, 0x40, 0x2d, 0xc2, 0x18, 0xc7, 0xb1,
|
||||
0x5e, 0x15, 0x89, 0x82, 0x74, 0xf0, 0x3e, 0x3a, 0xff, 0x43, 0x8e, 0x11, 0x5d, 0xf5, 0x27, 0xb7,
|
||||
0xe4, 0x5c, 0x25, 0x95, 0xaa, 0xff, 0xf1, 0xa5, 0x83, 0x49, 0x98, 0x42, 0x10, 0x23, 0x17, 0xcd,
|
||||
0x6a, 0x42, 0x10, 0x93, 0xa8, 0xe8, 0xa2, 0x21, 0x04, 0xf6, 0x5d, 0x4d, 0x91, 0x6a, 0x21, 0xf2,
|
||||
0x1b, 0x33, 0xed, 0x5f, 0xf7, 0xe6, 0xfd, 0x36, 0x80, 0x13, 0x88, 0x5b, 0x26, 0xe0, 0xee, 0x10,
|
||||
0x83, 0xb3, 0x4a, 0x66, 0xd9, 0x09, 0x9e, 0x13, 0xe0, 0xab, 0xd5, 0xb0, 0xda, 0x50, 0xd5, 0xa7,
|
||||
0xc9, 0x4a, 0x90, 0x3f, 0x38, 0xec, 0xec, 0x37, 0x6f, 0xb0, 0x0a, 0x14, 0x7b, 0x9d, 0x7e, 0x7f,
|
||||
0xb7, 0xb3, 0xd5, 0xcc, 0xb0, 0x2a, 0x94, 0xa2, 0x10, 0x93, 0xac, 0xf8, 0x6a, 0x6f, 0x6e, 0x76,
|
||||
0x0e, 0xfb, 0x9d, 0xad, 0x66, 0xee, 0x07, 0xf9, 0x52, 0xb6, 0x99, 0x33, 0xfe, 0x3c, 0x07, 0x15,
|
||||
0x6d, 0x15, 0x5e, 0xce, 0x8c, 0x6f, 0x03, 0xa0, 0x4a, 0x13, 0xbf, 0x63, 0xca, 0x9b, 0x65, 0x01,
|
||||
0xa1, 0xcd, 0xd7, 0x8d, 0xe5, 0x39, 0x4a, 0x6f, 0xa1, 0x8c, 0xe5, 0x6f, 0x43, 0x8d, 0x32, 0x45,
|
||||
0xe8, 0xee, 0xba, 0x82, 0x59, 0x25, 0xa0, 0x64, 0xd5, 0x18, 0xa3, 0x86, 0x48, 0x18, 0xbd, 0x20,
|
||||
0xe3, 0xc6, 0x09, 0x84, 0xf1, 0x0b, 0x18, 0x7c, 0x12, 0x78, 0xa3, 0x73, 0x4e, 0x18, 0x24, 0x11,
|
||||
0x56, 0x24, 0xac, 0x2f, 0x83, 0xe4, 0x24, 0x3f, 0xd4, 0x82, 0xa4, 0x0a, 0x66, 0x95, 0x80, 0xb2,
|
||||
0xa3, 0x6f, 0x2a, 0x02, 0x2a, 0x21, 0x01, 0xad, 0xcd, 0x53, 0x43, 0x82, 0x78, 0x76, 0xe7, 0xec,
|
||||
0x59, 0x65, 0x24, 0x8c, 0xaf, 0xcd, 0xd7, 0x7b, 0xb5, 0x5d, 0x8b, 0xbd, 0x07, 0x6c, 0x3c, 0x99,
|
||||
0x58, 0x29, 0x96, 0xa6, 0xbc, 0xd9, 0x18, 0x4f, 0x26, 0x7d, 0xcd, 0x10, 0xf3, 0x15, 0x18, 0xc1,
|
||||
0x3e, 0x07, 0xd6, 0x16, 0x07, 0x18, 0x87, 0x18, 0x99, 0x50, 0x63, 0xb6, 0x9c, 0xd1, 0xd9, 0x72,
|
||||
0x0a, 0xf7, 0xcb, 0xa6, 0x72, 0xbf, 0x97, 0xf1, 0x09, 0x63, 0x1b, 0x2a, 0x87, 0x5a, 0x1e, 0x9a,
|
||||
0xbb, 0xe2, 0x86, 0x50, 0x19, 0x68, 0xe8, 0xee, 0x20, 0xe3, 0x96, 0x2f, 0x13, 0xcf, 0x68, 0xa3,
|
||||
0xc9, 0x6a, 0xa3, 0x31, 0xfe, 0x4d, 0x86, 0x62, 0xfc, 0xa3, 0xc1, 0xc7, 0xa9, 0x6f, 0x94, 0x1f,
|
||||
0x28, 0x8e, 0x65, 0xac, 0x28, 0xff, 0x8f, 0x0c, 0x43, 0xc4, 0xa1, 0x59, 0xde, 0xc9, 0x49, 0xc0,
|
||||
0x55, 0x54, 0x4e, 0x05, 0x61, 0x07, 0x08, 0x52, 0xc2, 0xb7, 0x90, 0xf0, 0x1d, 0x6a, 0x3f, 0x90,
|
||||
0xd1, 0x39, 0x42, 0xf8, 0xde, 0xb3, 0x2f, 0x65, 0xaf, 0x81, 0x10, 0x41, 0xa4, 0xa1, 0x5a, 0xc5,
|
||||
0x22, 0x45, 0xdf, 0xc6, 0xbf, 0x94, 0xe1, 0x96, 0xb3, 0xeb, 0xfb, 0x00, 0x4a, 0x51, 0xab, 0xc9,
|
||||
0x1b, 0x56, 0x61, 0x46, 0xe5, 0xe2, 0x1e, 0x47, 0xad, 0x3c, 0x31, 0x62, 0x3a, 0x5c, 0xe8, 0x6c,
|
||||
0xe8, 0x6a, 0xa3, 0xfe, 0x06, 0xb0, 0x13, 0xc7, 0x9f, 0x45, 0xa6, 0xc3, 0xd6, 0xc4, 0x12, 0x0d,
|
||||
0xdb, 0x38, 0x82, 0x25, 0xc5, 0x25, 0x34, 0x8d, 0x20, 0xb9, 0x79, 0x99, 0x57, 0x30, 0xf9, 0xec,
|
||||
0x1c, 0x93, 0x37, 0x7e, 0x9a, 0x87, 0xa2, 0xca, 0xe9, 0x94, 0x96, 0x87, 0xa8, 0x9c, 0xcc, 0x43,
|
||||
0xd4, 0x4a, 0xe4, 0xac, 0xc0, 0xad, 0x97, 0xf7, 0xfd, 0xbd, 0xd9, 0x2b, 0x5b, 0x33, 0x9a, 0x27,
|
||||
0xae, 0xed, 0x55, 0xc8, 0x4f, 0xec, 0xf0, 0x0c, 0x0d, 0x64, 0x44, 0x3c, 0xf8, 0xad, 0x8c, 0xe9,
|
||||
0x85, 0xa4, 0x31, 0x3d, 0x2d, 0x67, 0x13, 0x89, 0xa4, 0x73, 0x39, 0x9b, 0x6e, 0x01, 0xc9, 0x17,
|
||||
0xda, 0x7b, 0x98, 0x12, 0x02, 0xc4, 0x5d, 0x94, 0x14, 0x47, 0x4a, 0xb3, 0xe2, 0xc8, 0x6b, 0x8b,
|
||||
0x0a, 0xdf, 0x86, 0x05, 0x8a, 0x77, 0x96, 0x31, 0x57, 0xea, 0x42, 0x91, 0x6b, 0xa8, 0xfe, 0xa7,
|
||||
0x47, 0xb0, 0xa6, 0xc4, 0xd5, 0x13, 0xa0, 0x54, 0x12, 0x09, 0x50, 0x74, 0x23, 0x7f, 0x35, 0x69,
|
||||
0xe4, 0xbf, 0x0f, 0xcd, 0x68, 0x41, 0xd1, 0x64, 0xe6, 0x06, 0x32, 0xa2, 0xa3, 0xae, 0xe0, 0x82,
|
||||
0x4b, 0xee, 0x07, 0xf1, 0x85, 0x58, 0x4f, 0x5c, 0x88, 0x82, 0x87, 0xb5, 0xc3, 0x90, 0x8f, 0x27,
|
||||
0xa1, 0xbc, 0x10, 0xf1, 0xcd, 0xb7, 0x3e, 0xc0, 0x64, 0x34, 0x62, 0x0d, 0xca, 0xdd, 0x7d, 0x6b,
|
||||
0x7b, 0xb7, 0xfb, 0x6c, 0xa7, 0xdf, 0xcc, 0x88, 0xcf, 0xde, 0xd1, 0xe6, 0x66, 0xa7, 0xb3, 0x85,
|
||||
0x37, 0x0e, 0xc0, 0xc2, 0x76, 0xbb, 0x2b, 0x6e, 0x9f, 0x9c, 0xf1, 0xbb, 0x59, 0xa8, 0x68, 0xcd,
|
||||
0xb3, 0xa7, 0xd1, 0xaa, 0x50, 0x8e, 0x8c, 0xdb, 0xf3, 0x43, 0x78, 0xa8, 0x58, 0xb1, 0xb6, 0x2c,
|
||||
0x51, 0x86, 0xaa, 0xec, 0xb5, 0x19, 0xaa, 0xd8, 0xbb, 0xd0, 0xb0, 0xa9, 0x85, 0x68, 0x15, 0xa4,
|
||||
0x39, 0x58, 0x82, 0xe5, 0x22, 0xe0, 0x2b, 0xb0, 0xf8, 0x3e, 0x11, 0x78, 0x79, 0xf5, 0xf0, 0x2a,
|
||||
0xba, 0x52, 0x70, 0xb1, 0x8a, 0x27, 0xb6, 0x33, 0x9a, 0xfa, 0x5c, 0xba, 0x6f, 0xa3, 0x9b, 0x99,
|
||||
0xa0, 0xa6, 0x2a, 0x36, 0x3e, 0x00, 0x88, 0xc7, 0x9c, 0x5c, 0x9c, 0x1b, 0xc9, 0xc5, 0xc9, 0x68,
|
||||
0x8b, 0x93, 0x35, 0xb6, 0x88, 0x8d, 0xc8, 0x85, 0x8e, 0x3c, 0xd5, 0xdf, 0x04, 0x65, 0x91, 0xb2,
|
||||
0xf0, 0x1d, 0xe6, 0x64, 0xc4, 0x43, 0x15, 0xb7, 0xb9, 0x28, 0x4b, 0xba, 0x51, 0x81, 0x0a, 0xa3,
|
||||
0x8e, 0x5b, 0x89, 0xb9, 0x91, 0x24, 0xc9, 0x59, 0x6e, 0x24, 0x51, 0xcd, 0xa8, 0xdc, 0x58, 0x87,
|
||||
0xd6, 0x16, 0x17, 0xad, 0xb5, 0x47, 0xa3, 0x99, 0xe1, 0x18, 0xb7, 0xe0, 0x66, 0x4a, 0x99, 0x34,
|
||||
0x42, 0x7c, 0x0c, 0x2b, 0x6d, 0x0a, 0xd1, 0xfc, 0xaa, 0x62, 0x31, 0x8c, 0x16, 0xac, 0xce, 0x36,
|
||||
0x29, 0x3b, 0xdb, 0x86, 0xc5, 0x2d, 0x7e, 0x3c, 0x3d, 0xdd, 0xe5, 0xe7, 0x71, 0x47, 0x0c, 0xf2,
|
||||
0xc1, 0x99, 0x77, 0x21, 0xd7, 0x07, 0xff, 0x16, 0x67, 0x78, 0x24, 0x70, 0xac, 0x60, 0xc2, 0x07,
|
||||
0xca, 0x22, 0x8a, 0x90, 0xde, 0x84, 0x0f, 0x8c, 0xa7, 0xc0, 0xf4, 0x76, 0xe4, 0x7a, 0x09, 0x2d,
|
||||
0x61, 0x7a, 0x6c, 0x05, 0x57, 0x41, 0xc8, 0xc7, 0x2a, 0x05, 0x0b, 0x04, 0xd3, 0xe3, 0x1e, 0x41,
|
||||
0x8c, 0x7b, 0x50, 0x3d, 0xb4, 0xaf, 0x4c, 0xfe, 0xb9, 0x8c, 0x32, 0x58, 0x83, 0xe2, 0xc4, 0xbe,
|
||||
0x12, 0x6c, 0x20, 0x72, 0x8e, 0x60, 0xb1, 0xf1, 0x07, 0x79, 0x58, 0x20, 0x4c, 0x76, 0x97, 0xb2,
|
||||
0x24, 0x3a, 0x2e, 0x1e, 0x43, 0xc5, 0x28, 0x35, 0xd0, 0x1c, 0x2f, 0xcd, 0xce, 0xf3, 0x52, 0x69,
|
||||
0x40, 0x53, 0xd9, 0x21, 0x94, 0x19, 0xdb, 0x9d, 0x8e, 0x55, 0x4a, 0x88, 0x64, 0x9c, 0x62, 0x3e,
|
||||
0xce, 0x82, 0x49, 0x41, 0x5c, 0x49, 0x47, 0x63, 0xac, 0x8b, 0xd0, 0xe8, 0xd4, 0x15, 0x21, 0xd9,
|
||||
0xa5, 0x0e, 0x4a, 0x55, 0x78, 0x8a, 0x2a, 0x7e, 0x25, 0xa9, 0xf0, 0xcc, 0x29, 0x36, 0xa5, 0x57,
|
||||
0x2b, 0x36, 0x64, 0x59, 0x7b, 0x89, 0x62, 0x03, 0xaf, 0xa1, 0xd8, 0xbc, 0x86, 0x93, 0xef, 0x26,
|
||||
0x94, 0xf0, 0xde, 0xd7, 0xb8, 0xa7, 0xb8, 0xef, 0x05, 0xf7, 0xfc, 0x8e, 0x26, 0xfa, 0xd3, 0x0b,
|
||||
0x83, 0x5b, 0xf1, 0x31, 0x31, 0xf9, 0xe7, 0xbf, 0x1c, 0xe7, 0xc9, 0x67, 0x50, 0x94, 0x50, 0x41,
|
||||
0xd0, 0xae, 0x3d, 0x56, 0x09, 0x76, 0xf0, 0x6f, 0xb1, 0x6c, 0x98, 0x15, 0xe4, 0xf3, 0xa9, 0xe3,
|
||||
0xf3, 0xa1, 0x4a, 0xc1, 0xe0, 0xe0, 0x19, 0x15, 0x10, 0x31, 0x41, 0xa1, 0x86, 0xb8, 0xde, 0x85,
|
||||
0x2b, 0x03, 0xb0, 0x8b, 0x4e, 0xf0, 0x5c, 0x7c, 0x1a, 0x0c, 0x9a, 0x98, 0x62, 0x6b, 0xe2, 0xf9,
|
||||
0xea, 0x72, 0x32, 0x7e, 0x9a, 0x81, 0xa6, 0x3c, 0x5d, 0x51, 0x99, 0xae, 0x05, 0x14, 0xae, 0x73,
|
||||
0x88, 0xbf, 0x3c, 0xa1, 0x82, 0x01, 0x35, 0x34, 0x7e, 0x44, 0x37, 0x15, 0x19, 0x6f, 0x2a, 0x02,
|
||||
0xb8, 0x2d, 0x6f, 0xab, 0x37, 0xa1, 0xa2, 0x9e, 0x63, 0x8e, 0x9d, 0x91, 0x4a, 0x78, 0x4b, 0xef,
|
||||
0x31, 0xf7, 0x9c, 0x91, 0xba, 0xe8, 0x7c, 0x5b, 0xc6, 0x53, 0x65, 0xf0, 0xa2, 0x33, 0xed, 0x90,
|
||||
0x1b, 0xff, 0x25, 0x03, 0x8b, 0xda, 0x54, 0xe4, 0xb9, 0xfd, 0x10, 0xaa, 0x51, 0x6e, 0x3b, 0x1e,
|
||||
0x49, 0x5e, 0x6b, 0x49, 0x46, 0x13, 0x57, 0xab, 0x0c, 0x22, 0x48, 0x20, 0x06, 0x33, 0xb4, 0xaf,
|
||||
0x70, 0xbc, 0xc1, 0x74, 0xac, 0x94, 0x9b, 0xa1, 0x7d, 0xb5, 0xcd, 0x79, 0x6f, 0x3a, 0x16, 0xaa,
|
||||
0xeb, 0x05, 0xe7, 0x2f, 0x22, 0x04, 0x92, 0xb9, 0x40, 0xc0, 0x24, 0x86, 0x01, 0xb5, 0xb1, 0xe7,
|
||||
0x86, 0x67, 0x11, 0x8a, 0x94, 0x3a, 0x11, 0x48, 0x38, 0xc6, 0x9f, 0x66, 0x61, 0x89, 0x4c, 0x6c,
|
||||
0xd2, 0xb4, 0x29, 0x59, 0x57, 0x0b, 0x16, 0xc8, 0xda, 0x48, 0xcc, 0x6b, 0xe7, 0x86, 0x29, 0xbf,
|
||||
0xd9, 0xb7, 0x5f, 0xd3, 0x2c, 0xa8, 0x42, 0xb6, 0xae, 0x59, 0xfe, 0xdc, 0xfc, 0xf2, 0x5f, 0xbf,
|
||||
0xbc, 0x69, 0x1e, 0xb7, 0x42, 0x9a, 0xc7, 0xed, 0x75, 0xfc, 0x5c, 0x73, 0x71, 0x4d, 0x45, 0x89,
|
||||
0xa3, 0xc5, 0x35, 0x3d, 0x85, 0xb5, 0x04, 0x0e, 0x72, 0x6b, 0xe7, 0xc4, 0xe1, 0x2a, 0xbe, 0x7d,
|
||||
0x59, 0xc3, 0xee, 0xa9, 0xb2, 0x8d, 0x22, 0x14, 0x82, 0x81, 0x37, 0xe1, 0xc6, 0x2a, 0x2c, 0x27,
|
||||
0x57, 0x55, 0x5e, 0x13, 0xbf, 0x97, 0x81, 0x96, 0x7c, 0x1f, 0xe1, 0xb8, 0xa7, 0x3b, 0x4e, 0x10,
|
||||
0x7a, 0x7e, 0x94, 0x03, 0xee, 0x36, 0x40, 0x10, 0xda, 0xbe, 0xd4, 0x36, 0x65, 0x44, 0x37, 0x42,
|
||||
0x50, 0x93, 0xbc, 0x09, 0x25, 0xee, 0x0e, 0xa9, 0x90, 0xa8, 0xa1, 0xc8, 0xdd, 0xa1, 0xd2, 0x43,
|
||||
0xe7, 0xe4, 0xef, 0x5a, 0x52, 0xbd, 0x90, 0x01, 0x96, 0x62, 0x75, 0xf8, 0x39, 0x5e, 0xbc, 0xf9,
|
||||
0x28, 0xc0, 0x72, 0xcf, 0xbe, 0xc4, 0xd7, 0x86, 0x81, 0xf1, 0xcf, 0xb2, 0xd0, 0x88, 0xc7, 0x47,
|
||||
0xd1, 0xd9, 0x2f, 0x8f, 0x33, 0xbf, 0x2b, 0xc9, 0xc1, 0x11, 0xf2, 0xbb, 0x66, 0x78, 0x2c, 0xd1,
|
||||
0xe1, 0xec, 0xba, 0xcc, 0x80, 0x8a, 0xc2, 0xf0, 0xa6, 0xa1, 0x96, 0x8a, 0xa9, 0x4c, 0x28, 0x07,
|
||||
0xd3, 0x50, 0x28, 0x5c, 0x42, 0xf3, 0x74, 0x5c, 0xa9, 0xf2, 0x14, 0xec, 0x71, 0xd8, 0xc5, 0x0c,
|
||||
0xcf, 0x02, 0x2c, 0xaa, 0xd1, 0x46, 0x0a, 0x2c, 0x81, 0xdf, 0x24, 0x39, 0x9b, 0x76, 0x0e, 0x65,
|
||||
0x6c, 0x5d, 0x08, 0xa5, 0x64, 0x97, 0x91, 0x10, 0xfa, 0x26, 0x54, 0xa8, 0xf1, 0x38, 0x8c, 0x2d,
|
||||
0x6f, 0x96, 0xb1, 0x07, 0x2c, 0x97, 0x46, 0x20, 0x6f, 0x9a, 0x50, 0x7d, 0x81, 0xba, 0xc2, 0xe7,
|
||||
0x07, 0xff, 0x28, 0x03, 0x37, 0x53, 0xb6, 0x4d, 0x9e, 0xf2, 0x4d, 0x58, 0x3c, 0x89, 0x0a, 0xd5,
|
||||
0xea, 0xd2, 0x51, 0x5f, 0x55, 0x6c, 0x35, 0xb9, 0xa6, 0x66, 0xf3, 0x24, 0x09, 0x88, 0x95, 0x2e,
|
||||
0xda, 0xc1, 0x44, 0xa4, 0x22, 0x2a, 0x5d, 0xb4, 0x8d, 0xa4, 0xef, 0x1c, 0xc2, 0x7a, 0xe7, 0x52,
|
||||
0x70, 0x8c, 0x4d, 0x3d, 0x45, 0xb9, 0x22, 0xa3, 0xa4, 0x81, 0x39, 0xf3, 0x5a, 0x06, 0xe6, 0x21,
|
||||
0x05, 0x64, 0x45, 0x6d, 0xfd, 0x3c, 0x8d, 0xe0, 0x05, 0x2a, 0xea, 0x50, 0x8a, 0x75, 0x15, 0x2d,
|
||||
0x39, 0x88, 0x52, 0xab, 0x1b, 0x01, 0x34, 0xf6, 0xa6, 0xa3, 0xd0, 0x89, 0xb3, 0xad, 0xb3, 0x6f,
|
||||
0xcb, 0x3a, 0xd8, 0x8f, 0x5a, 0xb5, 0xd4, 0x8e, 0x20, 0xea, 0x08, 0x17, 0x6b, 0x2c, 0x1a, 0xb2,
|
||||
0xe6, 0xfb, 0x6b, 0x8c, 0x93, 0x3d, 0x18, 0x37, 0x61, 0x2d, 0xfe, 0xa2, 0x65, 0x53, 0x57, 0xcd,
|
||||
0xbf, 0xce, 0xd0, 0xd3, 0xe6, 0x64, 0xe6, 0x77, 0xd6, 0x81, 0xa5, 0xc0, 0x71, 0x4f, 0x47, 0x5c,
|
||||
0x6f, 0x3e, 0x90, 0x8b, 0xb0, 0x92, 0x1c, 0x9b, 0xcc, 0x0e, 0x6f, 0x2e, 0x52, 0x8d, 0xb8, 0xb5,
|
||||
0x80, 0x6d, 0x5c, 0x37, 0xc8, 0x98, 0x2c, 0x66, 0x56, 0x63, 0x7e, 0xf0, 0x5d, 0xa8, 0x27, 0x3b,
|
||||
0x62, 0xdf, 0x91, 0xc1, 0x88, 0xf1, 0xa8, 0x72, 0x33, 0x71, 0x65, 0x31, 0x41, 0x54, 0xe2, 0xb5,
|
||||
0x0f, 0x8c, 0x7f, 0x92, 0x81, 0x96, 0xc9, 0x05, 0xe5, 0x6a, 0xa3, 0x54, 0x34, 0xf3, 0xe1, 0x5c,
|
||||
0xab, 0xd7, 0xcf, 0x55, 0xc5, 0x38, 0xaa, 0x11, 0x7d, 0xe3, 0xda, 0xcd, 0xd8, 0xb9, 0x31, 0x37,
|
||||
0xa3, 0x8d, 0x12, 0x2c, 0x10, 0x8a, 0xb1, 0x06, 0x2b, 0x72, 0x3c, 0x6a, 0x2c, 0xb1, 0xf7, 0x30,
|
||||
0xd1, 0x63, 0xc2, 0x7b, 0xb8, 0x0e, 0x2d, 0x4a, 0xe5, 0xa7, 0x4f, 0x42, 0x56, 0xdc, 0x02, 0xb6,
|
||||
0x67, 0x0f, 0x6c, 0xdf, 0xf3, 0xdc, 0x43, 0xee, 0xcb, 0x87, 0xa2, 0x28, 0x61, 0xa2, 0x73, 0x4d,
|
||||
0x89, 0xc2, 0xf4, 0xa5, 0x12, 0xd0, 0x79, 0xae, 0x7a, 0x17, 0x43, 0x5f, 0x86, 0x09, 0x4b, 0x1b,
|
||||
0xf6, 0x0b, 0xae, 0x5a, 0x52, 0x4b, 0xf4, 0x11, 0x54, 0x26, 0x51, 0xa3, 0x6a, 0xdd, 0x55, 0xc4,
|
||||
0xf2, 0x7c, 0xb7, 0xa6, 0x8e, 0x6d, 0x3c, 0x81, 0xe5, 0x64, 0x9b, 0x92, 0x75, 0xac, 0x43, 0x69,
|
||||
0x2c, 0x61, 0x72, 0x74, 0xd1, 0xb7, 0xf1, 0x3b, 0x25, 0x28, 0x4a, 0x7d, 0x8e, 0x3d, 0x84, 0xfc,
|
||||
0x40, 0xbd, 0x4d, 0x8a, 0x13, 0x61, 0xc8, 0x52, 0xf5, 0xff, 0x26, 0xbe, 0x50, 0x12, 0x78, 0xec,
|
||||
0x23, 0xa8, 0x27, 0xbd, 0xa2, 0x33, 0xe1, 0x90, 0x49, 0x77, 0x66, 0x6d, 0x30, 0xe3, 0xff, 0x2a,
|
||||
0xc7, 0x97, 0x23, 0xc9, 0x0c, 0xa5, 0x33, 0xed, 0xf6, 0xf4, 0x5c, 0x21, 0x6f, 0x07, 0x67, 0xb6,
|
||||
0xf5, 0xe4, 0xe9, 0x07, 0x32, 0x1e, 0xb2, 0x82, 0xc0, 0xde, 0x99, 0xfd, 0xe4, 0xe9, 0x07, 0xb3,
|
||||
0x92, 0x34, 0x85, 0xc4, 0xe9, 0x92, 0xf4, 0x32, 0x14, 0x28, 0xd3, 0x1a, 0x3d, 0x32, 0xa1, 0x0f,
|
||||
0xf6, 0x18, 0x96, 0xa5, 0xda, 0x6a, 0xc9, 0xe7, 0xc0, 0xc4, 0x05, 0x4b, 0x14, 0x83, 0x23, 0xcb,
|
||||
0x7a, 0x58, 0x44, 0xb6, 0xa1, 0x55, 0x58, 0x38, 0x8b, 0xd3, 0xe6, 0xd5, 0x4c, 0xf9, 0x65, 0xfc,
|
||||
0x69, 0x01, 0x2a, 0xda, 0xa2, 0xb0, 0x2a, 0x94, 0xcc, 0x4e, 0xaf, 0x63, 0x7e, 0xd2, 0xd9, 0x6a,
|
||||
0xde, 0x60, 0xf7, 0xe1, 0x9d, 0xee, 0xfe, 0xe6, 0x81, 0x69, 0x76, 0x36, 0xfb, 0xd6, 0x81, 0x69,
|
||||
0xa9, 0x74, 0x2c, 0x87, 0xed, 0xcf, 0xf6, 0x3a, 0xfb, 0x7d, 0x6b, 0xab, 0xd3, 0x6f, 0x77, 0x77,
|
||||
0x7b, 0xcd, 0x0c, 0x7b, 0x03, 0x5a, 0x31, 0xa6, 0x2a, 0x6e, 0xef, 0x1d, 0x1c, 0xed, 0xf7, 0x9b,
|
||||
0x59, 0x76, 0x07, 0x6e, 0x6d, 0x77, 0xf7, 0xdb, 0xbb, 0x56, 0x8c, 0xb3, 0xb9, 0xdb, 0xff, 0xc4,
|
||||
0xea, 0xfc, 0xda, 0x61, 0xd7, 0xfc, 0xac, 0x99, 0x4b, 0x43, 0x10, 0xca, 0xb8, 0x6a, 0x21, 0xcf,
|
||||
0x6e, 0xc2, 0x0a, 0x21, 0x50, 0x15, 0xab, 0x7f, 0x70, 0x60, 0xf5, 0x0e, 0x0e, 0xf6, 0x9b, 0x05,
|
||||
0xb6, 0x08, 0xb5, 0xee, 0xfe, 0x27, 0xed, 0xdd, 0xee, 0x96, 0x65, 0x76, 0xda, 0xbb, 0x7b, 0xcd,
|
||||
0x05, 0xb6, 0x04, 0x8d, 0x59, 0xbc, 0xa2, 0x68, 0x42, 0xe1, 0x1d, 0xec, 0x77, 0x0f, 0xf6, 0xad,
|
||||
0x4f, 0x3a, 0x66, 0xaf, 0x7b, 0xb0, 0xdf, 0x2c, 0xb1, 0x55, 0x60, 0xc9, 0xa2, 0x9d, 0xbd, 0xf6,
|
||||
0x66, 0xb3, 0xcc, 0x56, 0x60, 0x31, 0x09, 0x7f, 0xde, 0xf9, 0xac, 0x09, 0xac, 0x05, 0xcb, 0x34,
|
||||
0x30, 0x6b, 0xa3, 0xb3, 0x7b, 0xf0, 0xa9, 0xb5, 0xd7, 0xdd, 0xef, 0xee, 0x1d, 0xed, 0x35, 0x2b,
|
||||
0x98, 0x20, 0xaa, 0xd3, 0xb1, 0xba, 0xfb, 0xbd, 0xa3, 0xed, 0xed, 0xee, 0x66, 0xb7, 0xb3, 0xdf,
|
||||
0x6f, 0x56, 0xa9, 0xe7, 0xb4, 0x89, 0xd7, 0x44, 0x05, 0x19, 0x33, 0x60, 0x6d, 0x75, 0x7b, 0xed,
|
||||
0x8d, 0xdd, 0xce, 0x56, 0xb3, 0xce, 0x6e, 0xc3, 0xcd, 0x7e, 0x67, 0xef, 0xf0, 0xc0, 0x6c, 0x9b,
|
||||
0x9f, 0xa9, 0x98, 0x02, 0x6b, 0xbb, 0xdd, 0xdd, 0x3d, 0x32, 0x3b, 0xcd, 0x06, 0x7b, 0x0b, 0x6e,
|
||||
0x9b, 0x9d, 0x8f, 0x8f, 0xba, 0x66, 0x67, 0xcb, 0xda, 0x3f, 0xd8, 0xea, 0x58, 0xdb, 0x9d, 0x76,
|
||||
0xff, 0xc8, 0xec, 0x58, 0x7b, 0xdd, 0x5e, 0xaf, 0xbb, 0xff, 0xac, 0xd9, 0x64, 0xef, 0xc0, 0xdd,
|
||||
0x08, 0x25, 0x6a, 0x60, 0x06, 0x6b, 0x51, 0xcc, 0x4f, 0x6d, 0xe9, 0x7e, 0xe7, 0xd7, 0xfa, 0xd6,
|
||||
0x61, 0xa7, 0x63, 0x36, 0x19, 0x5b, 0x87, 0xd5, 0xb8, 0x7b, 0xea, 0x40, 0xf6, 0xbd, 0x24, 0xca,
|
||||
0x0e, 0x3b, 0xe6, 0x5e, 0x7b, 0x5f, 0x6c, 0x70, 0xa2, 0x6c, 0x59, 0x0c, 0x3b, 0x2e, 0x9b, 0x1d,
|
||||
0xf6, 0x0a, 0x63, 0x50, 0xd7, 0x76, 0x65, 0xbb, 0x6d, 0x36, 0x57, 0x59, 0x03, 0x2a, 0x7b, 0x87,
|
||||
0x87, 0x56, 0xbf, 0xbb, 0xd7, 0x39, 0x38, 0xea, 0x37, 0xd7, 0xd8, 0x0a, 0x34, 0xbb, 0xfb, 0xfd,
|
||||
0x8e, 0x29, 0xf6, 0x5a, 0x55, 0xfd, 0x3f, 0x45, 0xb6, 0x0c, 0x0d, 0x35, 0x52, 0x05, 0xfd, 0x59,
|
||||
0x91, 0xad, 0x01, 0x3b, 0xda, 0x37, 0x3b, 0xed, 0x2d, 0xb1, 0x70, 0x51, 0xc1, 0xff, 0x2d, 0x4a,
|
||||
0x0f, 0xc9, 0x4f, 0x73, 0xd1, 0x65, 0x1d, 0x3f, 0x39, 0x48, 0x26, 0x51, 0xad, 0x6a, 0xc9, 0x4f,
|
||||
0x5f, 0x95, 0xde, 0x5c, 0x53, 0xad, 0x72, 0x73, 0xaa, 0xd5, 0x9c, 0xee, 0x5e, 0xd3, 0x65, 0xbf,
|
||||
0xb7, 0xa1, 0x36, 0xa6, 0x84, 0xaa, 0x32, 0x71, 0x22, 0xc8, 0xf7, 0x37, 0x04, 0xa4, 0xac, 0x89,
|
||||
0x73, 0xf9, 0xbd, 0x0b, 0xf3, 0xf9, 0xbd, 0xd3, 0xe4, 0xfb, 0x85, 0x34, 0xf9, 0xfe, 0x01, 0x2c,
|
||||
0x12, 0x6b, 0x72, 0x5c, 0x67, 0xac, 0xb4, 0x66, 0x92, 0x02, 0x1b, 0xc8, 0xa2, 0x08, 0xae, 0xd4,
|
||||
0x09, 0xa5, 0x72, 0x48, 0x16, 0x52, 0x94, 0xda, 0x46, 0x42, 0xd3, 0x20, 0xce, 0x11, 0x69, 0x1a,
|
||||
0x51, 0x0f, 0xf6, 0x65, 0xdc, 0x43, 0x45, 0xeb, 0x81, 0xe0, 0xd8, 0xc3, 0x03, 0x58, 0xe4, 0x97,
|
||||
0xa1, 0x6f, 0x5b, 0xde, 0xc4, 0xfe, 0x7c, 0x8a, 0x2e, 0x5c, 0x1b, 0x75, 0xf8, 0xaa, 0xd9, 0xc0,
|
||||
0x82, 0x03, 0x84, 0x6f, 0xd9, 0xa1, 0xfd, 0xe0, 0x0b, 0xa8, 0x68, 0xc9, 0x76, 0xd9, 0x1a, 0x2c,
|
||||
0x7d, 0xda, 0xed, 0xef, 0x77, 0x7a, 0x3d, 0xeb, 0xf0, 0x68, 0xe3, 0x79, 0xe7, 0x33, 0x6b, 0xa7,
|
||||
0xdd, 0xdb, 0x69, 0xde, 0x10, 0x87, 0x76, 0xbf, 0xd3, 0xeb, 0x77, 0xb6, 0x12, 0xf0, 0x0c, 0x7b,
|
||||
0x13, 0xd6, 0x8f, 0xf6, 0x8f, 0x7a, 0x9d, 0x2d, 0x2b, 0xad, 0x5e, 0x56, 0x50, 0xa9, 0x2c, 0x4f,
|
||||
0xa9, 0x9e, 0x7b, 0xf0, 0x7d, 0xa8, 0x27, 0x33, 0x40, 0x32, 0x80, 0x85, 0xdd, 0xce, 0xb3, 0xf6,
|
||||
0xe6, 0x67, 0x94, 0x42, 0xae, 0xd7, 0x6f, 0xf7, 0xbb, 0x9b, 0x96, 0x4c, 0x19, 0x27, 0x38, 0x42,
|
||||
0x86, 0x55, 0xa0, 0xd8, 0xde, 0xdf, 0xdc, 0x39, 0x30, 0x7b, 0xcd, 0xec, 0x83, 0x8f, 0xa0, 0x39,
|
||||
0xeb, 0x8f, 0x4a, 0x38, 0xf0, 0x5e, 0xe6, 0xe9, 0x7b, 0xf0, 0xef, 0x73, 0x00, 0x71, 0xc0, 0x80,
|
||||
0x60, 0x35, 0x5b, 0xed, 0x7e, 0x7b, 0xf7, 0x40, 0x4c, 0xc3, 0x3c, 0xe8, 0x0b, 0x0e, 0x62, 0x76,
|
||||
0x3e, 0x6e, 0xde, 0x48, 0x2d, 0x39, 0x38, 0xec, 0x37, 0x33, 0x62, 0xc5, 0xba, 0xfb, 0xdd, 0x7e,
|
||||
0xb7, 0xbd, 0x6b, 0x99, 0x07, 0x47, 0xdd, 0xfd, 0x67, 0x94, 0x1b, 0x0b, 0xb9, 0xec, 0xd1, 0xe1,
|
||||
0xb6, 0x79, 0xb0, 0xdf, 0xb7, 0x7a, 0x3b, 0x47, 0xfd, 0x2d, 0xcc, 0xac, 0xb5, 0x69, 0x76, 0x0f,
|
||||
0xa9, 0xcd, 0xfc, 0xcb, 0x10, 0x44, 0xd3, 0x05, 0xb1, 0xe6, 0xcf, 0x0e, 0x7a, 0xbd, 0xee, 0xa1,
|
||||
0xf5, 0xf1, 0x51, 0xc7, 0xec, 0x76, 0x7a, 0x58, 0x71, 0x21, 0x05, 0x2e, 0xf0, 0x8b, 0x82, 0x37,
|
||||
0xf7, 0x77, 0x3f, 0x91, 0xcc, 0x53, 0xa0, 0x96, 0x92, 0x20, 0x81, 0x55, 0x16, 0x3c, 0x45, 0x70,
|
||||
0x9f, 0x94, 0x96, 0xe1, 0x9a, 0x32, 0x51, 0xaf, 0x22, 0xf8, 0xea, 0xdc, 0x66, 0x60, 0xb5, 0x6a,
|
||||
0x7a, 0x91, 0xa8, 0x85, 0x2c, 0x37, 0xba, 0xa0, 0xb6, 0xb6, 0x4c, 0xac, 0x50, 0x9f, 0x83, 0x0a,
|
||||
0xdc, 0x86, 0xd8, 0x28, 0xc1, 0x9e, 0x04, 0x4a, 0x53, 0x7d, 0x88, 0x92, 0xc5, 0x27, 0xbf, 0x9d,
|
||||
0x83, 0x3a, 0x05, 0x6f, 0xd1, 0x6f, 0x1d, 0x71, 0x9f, 0xed, 0x41, 0x51, 0xfe, 0x68, 0x16, 0x5b,
|
||||
0x89, 0xd2, 0x16, 0xe9, 0x3f, 0xd3, 0xb5, 0xbe, 0x3a, 0x0b, 0x96, 0xe2, 0xd8, 0xd2, 0xdf, 0xfe,
|
||||
0x93, 0xbf, 0xfc, 0xa7, 0xd9, 0x1a, 0xab, 0x3c, 0x3a, 0x7f, 0xff, 0xd1, 0x29, 0x77, 0x03, 0xd1,
|
||||
0xc6, 0xdf, 0x00, 0x88, 0x7f, 0x0a, 0x8a, 0xb5, 0x22, 0x27, 0xd4, 0xcc, 0xef, 0x64, 0xad, 0xdf,
|
||||
0x4c, 0x29, 0x91, 0xed, 0xde, 0xc4, 0x76, 0x97, 0x8c, 0xba, 0x68, 0xd7, 0x71, 0x9d, 0x90, 0x7e,
|
||||
0x16, 0xea, 0xc3, 0xcc, 0x03, 0x36, 0x84, 0xaa, 0xfe, 0x23, 0x4d, 0x4c, 0x49, 0x4a, 0x29, 0x3f,
|
||||
0x33, 0xb5, 0x7e, 0x2b, 0xb5, 0x4c, 0xc9, 0xa0, 0xd8, 0xc7, 0x8a, 0xd1, 0x14, 0x7d, 0x4c, 0x11,
|
||||
0x23, 0xee, 0x65, 0x44, 0x52, 0x79, 0xfc, 0x5b, 0x4c, 0xec, 0x0d, 0x4d, 0xae, 0x9a, 0xfb, 0x25,
|
||||
0xa8, 0xf5, 0xdb, 0xd7, 0x94, 0xca, 0xbe, 0x6e, 0x63, 0x5f, 0x6b, 0x06, 0x13, 0x7d, 0x0d, 0x10,
|
||||
0x47, 0xfd, 0x12, 0xd4, 0x87, 0x99, 0x07, 0x4f, 0xfe, 0xe2, 0x3e, 0x94, 0xa3, 0xc7, 0x9c, 0xec,
|
||||
0x37, 0xa1, 0x96, 0x88, 0xae, 0x63, 0x6a, 0x1a, 0x69, 0xc1, 0x78, 0xeb, 0x6f, 0xa4, 0x17, 0xca,
|
||||
0x8e, 0xdf, 0xc4, 0x8e, 0x5b, 0x6c, 0x55, 0x74, 0x2c, 0xa3, 0xd7, 0x1e, 0x61, 0x0c, 0x2a, 0x25,
|
||||
0x81, 0x7a, 0xa1, 0x69, 0x1f, 0xd4, 0xd9, 0x1b, 0xb3, 0x1a, 0x41, 0xa2, 0xb7, 0xdb, 0xd7, 0x94,
|
||||
0xca, 0xee, 0xde, 0xc0, 0xee, 0x56, 0xd9, 0xb2, 0xde, 0x9d, 0x7a, 0x7a, 0xc9, 0x38, 0x26, 0x5e,
|
||||
0xd3, 0x7f, 0xaa, 0x88, 0xdd, 0x8e, 0xd3, 0x64, 0xa5, 0xfc, 0x84, 0x51, 0x44, 0x22, 0xf3, 0xbf,
|
||||
0x63, 0x64, 0xb4, 0xb0, 0x2b, 0xc6, 0x70, 0xfb, 0xf4, 0x5f, 0x2a, 0x62, 0xc7, 0x50, 0xd1, 0xb2,
|
||||
0xfb, 0xb3, 0x9b, 0xd7, 0xfe, 0x12, 0xc1, 0xfa, 0x7a, 0x5a, 0x51, 0xda, 0x54, 0xf4, 0xf6, 0x1f,
|
||||
0x9d, 0x70, 0xce, 0x7e, 0x1d, 0xca, 0x51, 0xce, 0x78, 0xb6, 0xa6, 0xe5, 0xf0, 0xd7, 0x73, 0xdc,
|
||||
0xaf, 0xb7, 0xe6, 0x0b, 0xd2, 0x88, 0x4f, 0x6f, 0x5d, 0x10, 0xdf, 0xa7, 0x50, 0xd1, 0xf2, 0xc2,
|
||||
0x47, 0x13, 0x98, 0xcf, 0x3d, 0x1f, 0x4d, 0x20, 0x25, 0x8d, 0xbc, 0xb1, 0x88, 0x5d, 0x54, 0x58,
|
||||
0x19, 0xe9, 0x3b, 0xbc, 0xf4, 0x02, 0xb6, 0x0b, 0x2b, 0x52, 0xd3, 0x3a, 0xe6, 0x5f, 0x66, 0x1b,
|
||||
0x52, 0x7e, 0x1d, 0xea, 0x71, 0x86, 0x7d, 0x04, 0x25, 0x95, 0xfe, 0x9f, 0xad, 0xa6, 0xff, 0x8c,
|
||||
0xc1, 0xfa, 0xda, 0x1c, 0x5c, 0xaa, 0x45, 0x9f, 0x01, 0xc4, 0x49, 0xe8, 0x23, 0x26, 0x31, 0x97,
|
||||
0xd4, 0x3e, 0xa2, 0x80, 0xf9, 0x8c, 0xf5, 0xc6, 0x2a, 0x4e, 0xb0, 0xc9, 0x90, 0x49, 0xb8, 0xfc,
|
||||
0x42, 0x65, 0xc7, 0xfc, 0x11, 0x54, 0xb4, 0x3c, 0xf4, 0xd1, 0xf2, 0xcd, 0xe7, 0xb0, 0x8f, 0x96,
|
||||
0x2f, 0x25, 0x6d, 0xbd, 0xb1, 0x8e, 0xad, 0x2f, 0x1b, 0x0d, 0xd1, 0xba, 0x10, 0xb5, 0xa4, 0xc8,
|
||||
0x23, 0x36, 0xe8, 0x0c, 0x6a, 0x89, 0x64, 0xf3, 0xd1, 0x09, 0x4d, 0x4b, 0x65, 0x1f, 0x9d, 0xd0,
|
||||
0xd4, 0xfc, 0xf4, 0x8a, 0xce, 0x8c, 0x45, 0xd1, 0xcf, 0x39, 0xa2, 0x68, 0x3d, 0xfd, 0x10, 0x2a,
|
||||
0x5a, 0xe2, 0xf8, 0x68, 0x2e, 0xf3, 0x39, 0xea, 0xa3, 0xb9, 0xa4, 0xe5, 0x99, 0x5f, 0xc6, 0x3e,
|
||||
0xea, 0x06, 0x92, 0x02, 0xe6, 0xf7, 0x13, 0x6d, 0xff, 0x26, 0xd4, 0x93, 0xb9, 0xe4, 0xa3, 0xb3,
|
||||
0x9f, 0x9a, 0x94, 0x3e, 0x3a, 0xfb, 0xd7, 0x24, 0xa0, 0x97, 0x24, 0xfd, 0x60, 0x29, 0xea, 0xe4,
|
||||
0xd1, 0x4f, 0x64, 0x58, 0xca, 0x17, 0xec, 0x63, 0xc1, 0xe0, 0x64, 0x7a, 0x49, 0xb6, 0xa6, 0x51,
|
||||
0xad, 0x9e, 0xa7, 0x32, 0x3a, 0x2f, 0x73, 0x99, 0x28, 0x93, 0xc4, 0x8c, 0x8d, 0xb3, 0x67, 0xb0,
|
||||
0x14, 0x11, 0x73, 0x94, 0x2f, 0x32, 0x88, 0xe6, 0x90, 0x9a, 0x95, 0x72, 0xbd, 0x39, 0x5b, 0xfa,
|
||||
0x38, 0x43, 0xd7, 0x1f, 0x66, 0xe9, 0xd3, 0xae, 0x3f, 0x3d, 0x65, 0xa4, 0x76, 0xfd, 0x25, 0x92,
|
||||
0xf9, 0xcd, 0x5e, 0x7f, 0xa1, 0x23, 0xda, 0x70, 0xa1, 0x31, 0x9b, 0xbd, 0xf1, 0xf6, 0x75, 0xb9,
|
||||
0x0b, 0xa8, 0xf9, 0x37, 0x5f, 0x9e, 0xda, 0x20, 0xc9, 0x8a, 0x14, 0x37, 0x7d, 0x24, 0x1f, 0x9f,
|
||||
0xb0, 0xdf, 0x80, 0xaa, 0x9e, 0xc8, 0x9a, 0xe9, 0x3c, 0x61, 0xb6, 0xa7, 0x5b, 0xa9, 0x65, 0x49,
|
||||
0x2a, 0x61, 0x55, 0xbd, 0x1b, 0xf6, 0x09, 0xac, 0x46, 0xcb, 0xac, 0xc7, 0xad, 0x07, 0xec, 0x4e,
|
||||
0x4a, 0x34, 0x7b, 0x62, 0xb1, 0x6f, 0x5e, 0x1b, 0xee, 0xfe, 0x38, 0x23, 0xa8, 0x2f, 0x99, 0x51,
|
||||
0x37, 0xbe, 0x79, 0xd2, 0x12, 0x09, 0xc7, 0x37, 0x4f, 0x6a, 0x1a, 0x5e, 0x45, 0x7d, 0x6c, 0x29,
|
||||
0xb1, 0x46, 0xf4, 0x2c, 0x97, 0xfd, 0x10, 0x1a, 0x5a, 0x50, 0x7e, 0xef, 0xca, 0x1d, 0x44, 0x27,
|
||||
0x69, 0x3e, 0x25, 0xdc, 0x7a, 0x9a, 0x6d, 0xd2, 0x58, 0xc3, 0xf6, 0x17, 0x8d, 0xc4, 0xe2, 0x88,
|
||||
0x53, 0xb4, 0x09, 0x15, 0x3d, 0xe0, 0xff, 0x25, 0xed, 0xae, 0x69, 0x45, 0x7a, 0xf6, 0xb1, 0xc7,
|
||||
0x19, 0xb6, 0x0b, 0xcd, 0xd9, 0x64, 0x49, 0x11, 0x4f, 0x49, 0x4b, 0xf0, 0xb4, 0x3e, 0x53, 0x98,
|
||||
0x48, 0xb1, 0xc4, 0x0e, 0x29, 0xb0, 0x23, 0xfa, 0x29, 0x25, 0xcf, 0x9f, 0xbd, 0xd5, 0x93, 0x3f,
|
||||
0xb1, 0x14, 0xb5, 0x96, 0xf6, 0xe3, 0x5a, 0xf7, 0x33, 0x8f, 0x33, 0xec, 0x77, 0x33, 0x50, 0x4d,
|
||||
0x24, 0x28, 0x49, 0x3c, 0x9d, 0x9f, 0x99, 0x67, 0x4b, 0x2f, 0xd3, 0x27, 0x6a, 0x98, 0xb8, 0x88,
|
||||
0xbb, 0x0f, 0x7e, 0x90, 0xd8, 0xa4, 0x9f, 0x24, 0x5c, 0x7b, 0x0f, 0x67, 0x7f, 0x6b, 0xe9, 0x8b,
|
||||
0x59, 0x04, 0x3d, 0xd3, 0xdf, 0x17, 0x8f, 0x33, 0xec, 0x3f, 0x66, 0xa0, 0x9e, 0xf4, 0xd9, 0x47,
|
||||
0xd3, 0x4d, 0x7d, 0x1d, 0x10, 0x91, 0xd2, 0x35, 0x8e, 0xfe, 0x1f, 0xe2, 0x28, 0xfb, 0x0f, 0xcc,
|
||||
0xc4, 0x28, 0x65, 0x2e, 0xe8, 0x5f, 0x6c, 0xb4, 0xec, 0x43, 0xfa, 0x69, 0x43, 0xf5, 0x94, 0x89,
|
||||
0xcd, 0xff, 0x14, 0x5e, 0x44, 0x7e, 0xfa, 0x0f, 0xc7, 0xe1, 0x26, 0xfc, 0x88, 0x7e, 0x53, 0x48,
|
||||
0xbd, 0x8c, 0x11, 0x54, 0xfc, 0xba, 0xf5, 0x8d, 0x77, 0x70, 0x4e, 0x6f, 0x1a, 0x37, 0x13, 0x73,
|
||||
0x9a, 0x15, 0x3c, 0xda, 0x34, 0x3a, 0xf9, 0xbb, 0x6f, 0xf1, 0xcd, 0x39, 0xf7, 0x5b, 0x70, 0xd7,
|
||||
0x0f, 0x72, 0x4c, 0x83, 0x94, 0xe8, 0x89, 0xa3, 0xf6, 0x9a, 0xcd, 0x18, 0x0f, 0x70, 0xac, 0xef,
|
||||
0x18, 0x77, 0xae, 0x1d, 0xeb, 0x23, 0xf4, 0xbf, 0x8b, 0x11, 0x1f, 0x02, 0xc4, 0x4f, 0x0d, 0xd9,
|
||||
0xcc, 0x83, 0xb7, 0x88, 0x01, 0xcd, 0xbf, 0x46, 0x4c, 0x9e, 0x67, 0xf5, 0x2e, 0x4e, 0xb4, 0xf8,
|
||||
0xeb, 0xc4, 0x4e, 0xa3, 0xa7, 0x78, 0xba, 0xf4, 0x95, 0x7c, 0x15, 0x98, 0x90, 0xbe, 0x66, 0xdb,
|
||||
0x4f, 0x30, 0xd3, 0xe8, 0xdd, 0xdd, 0x11, 0xd4, 0x76, 0x3d, 0xef, 0xc5, 0x74, 0x12, 0x3d, 0x6f,
|
||||
0x4f, 0x3e, 0x8a, 0xd9, 0xb1, 0x83, 0xb3, 0xf5, 0x99, 0x59, 0x18, 0x77, 0xb1, 0xa9, 0x75, 0xd6,
|
||||
0xd2, 0x9a, 0x7a, 0xf4, 0x93, 0xf8, 0x7d, 0xe3, 0x17, 0xcc, 0x86, 0xc5, 0x88, 0x47, 0xc7, 0x6f,
|
||||
0x08, 0x93, 0xcd, 0x24, 0x38, 0xf3, 0x6c, 0x17, 0x09, 0x35, 0x41, 0x8d, 0xf6, 0x51, 0xa0, 0xda,
|
||||
0x7c, 0x9c, 0x61, 0x87, 0x50, 0xdd, 0xe2, 0x03, 0x0c, 0xd4, 0xc7, 0xa7, 0x25, 0x4b, 0x89, 0x67,
|
||||
0x0a, 0xf4, 0x26, 0x65, 0xbd, 0x96, 0x00, 0x26, 0xef, 0xad, 0x89, 0x7d, 0xe5, 0xf3, 0xcf, 0x1f,
|
||||
0xfd, 0x44, 0x3e, 0x5a, 0xf9, 0x42, 0xdd, 0x5b, 0xea, 0x51, 0x4f, 0xe2, 0xde, 0x9a, 0x79, 0x05,
|
||||
0x94, 0xb8, 0xb7, 0xe6, 0x5e, 0x01, 0x25, 0x96, 0x5a, 0x3d, 0x2a, 0x62, 0x23, 0x58, 0x9c, 0x7b,
|
||||
0x38, 0x14, 0x5d, 0x59, 0xd7, 0x3d, 0x37, 0x5a, 0xbf, 0x7b, 0x3d, 0x42, 0xb2, 0xb7, 0x07, 0xc9,
|
||||
0xde, 0x7a, 0x50, 0xa3, 0xe4, 0x83, 0xc7, 0x9c, 0x42, 0xf6, 0x66, 0xf2, 0xdd, 0xe8, 0xf1, 0x80,
|
||||
0xb3, 0x17, 0x0c, 0x96, 0x25, 0x25, 0x1c, 0x8c, 0x95, 0x63, 0xbf, 0x0e, 0x95, 0x67, 0x3c, 0x54,
|
||||
0x31, 0x7a, 0x91, 0x8c, 0x3d, 0x13, 0xb4, 0xb7, 0x9e, 0x12, 0xe2, 0x97, 0xa4, 0x19, 0x6c, 0xed,
|
||||
0x11, 0x1f, 0x9e, 0x72, 0x62, 0x4e, 0x96, 0x33, 0xfc, 0x82, 0xfd, 0x1a, 0x36, 0x1e, 0x85, 0x46,
|
||||
0xaf, 0x6a, 0x41, 0x58, 0x7a, 0xe3, 0x8d, 0x19, 0x78, 0x5a, 0xcb, 0xae, 0x37, 0xe4, 0x9a, 0xac,
|
||||
0xe7, 0x42, 0x45, 0x4b, 0xa1, 0x10, 0x1d, 0xa0, 0xf9, 0x94, 0x19, 0xd1, 0x01, 0x4a, 0xc9, 0xb8,
|
||||
0x60, 0xdc, 0xc7, 0x7e, 0x0c, 0x76, 0x37, 0xee, 0x87, 0xb2, 0x2c, 0xc4, 0x3d, 0x3d, 0xfa, 0x89,
|
||||
0x3d, 0x0e, 0xbf, 0x60, 0x9f, 0x62, 0x8a, 0x6f, 0x3d, 0x06, 0x31, 0x56, 0x1a, 0x66, 0xc3, 0x15,
|
||||
0xa3, 0xc5, 0xd2, 0x8a, 0x92, 0x8a, 0x04, 0x75, 0x85, 0x92, 0xdc, 0x53, 0x80, 0x5e, 0xe8, 0x4d,
|
||||
0xb6, 0x6c, 0x3e, 0xf6, 0xdc, 0x98, 0xd7, 0xc6, 0x51, 0x71, 0x31, 0xff, 0xd2, 0x42, 0xe3, 0xd8,
|
||||
0xa7, 0x9a, 0x96, 0x95, 0x08, 0xe3, 0x54, 0xc4, 0x75, 0x6d, 0xe0, 0x5c, 0xb4, 0x20, 0x29, 0xc1,
|
||||
0x73, 0x8f, 0x33, 0xac, 0x0d, 0x10, 0xbf, 0x1c, 0x8b, 0x74, 0xa6, 0xb9, 0x47, 0x69, 0x11, 0xdb,
|
||||
0x4b, 0x79, 0x66, 0x76, 0x08, 0xe5, 0xf8, 0xc9, 0xcd, 0x5a, 0x9c, 0x11, 0x26, 0xf1, 0x40, 0x27,
|
||||
0xba, 0xc1, 0xe7, 0x9e, 0xbb, 0x18, 0x4d, 0x5c, 0x2a, 0x60, 0x25, 0xb1, 0x54, 0x27, 0x9c, 0x07,
|
||||
0xcc, 0x81, 0x25, 0x1a, 0x60, 0x24, 0x2e, 0x61, 0x34, 0x57, 0x94, 0xc9, 0x7d, 0xfe, 0xe5, 0x49,
|
||||
0x74, 0x9a, 0x53, 0xdf, 0x4f, 0x24, 0x4c, 0x3f, 0x82, 0x5a, 0x29, 0x92, 0x4c, 0xb0, 0xe6, 0x31,
|
||||
0x2c, 0xce, 0xb9, 0xe8, 0xa3, 0x23, 0x7d, 0xdd, 0x9b, 0x8b, 0xe8, 0x48, 0x5f, 0xeb, 0xdd, 0x37,
|
||||
0x56, 0xb0, 0xcb, 0x86, 0x01, 0xa8, 0xea, 0x5d, 0x38, 0xe1, 0xe0, 0x4c, 0x74, 0xf7, 0xef, 0x32,
|
||||
0xb0, 0x94, 0xe2, 0x84, 0x67, 0x6f, 0x29, 0xab, 0xc1, 0xb5, 0x0e, 0xfa, 0xf5, 0x54, 0x67, 0xad,
|
||||
0xd1, 0xc3, 0x7e, 0xf6, 0xd8, 0xf3, 0xc4, 0xc5, 0x46, 0xbe, 0x52, 0x79, 0x32, 0x5f, 0x2a, 0x54,
|
||||
0xa4, 0x4a, 0x14, 0x9f, 0xc3, 0x1a, 0x0d, 0xa4, 0x3d, 0x1a, 0xcd, 0x38, 0x92, 0xdf, 0x9c, 0xfb,
|
||||
0xe9, 0xf3, 0x84, 0x73, 0x7c, 0xfd, 0xfa, 0x9f, 0x46, 0xbf, 0x46, 0x9c, 0xa6, 0xa1, 0xb2, 0x29,
|
||||
0x34, 0x67, 0x1d, 0xb4, 0xec, 0xfa, 0xb6, 0xd6, 0xef, 0x24, 0xf4, 0xdf, 0x14, 0xa7, 0xee, 0xd7,
|
||||
0xb0, 0xb3, 0x3b, 0xc6, 0x7a, 0xda, 0xba, 0x90, 0x4a, 0x2c, 0xf6, 0xe3, 0x6f, 0x45, 0xde, 0xe4,
|
||||
0x99, 0x79, 0xaa, 0x0e, 0xae, 0xf3, 0x7d, 0x47, 0x1a, 0x78, 0xba, 0x33, 0xfa, 0x5d, 0xec, 0xfe,
|
||||
0xae, 0x71, 0x2b, 0xad, 0x7b, 0x9f, 0xaa, 0x90, 0x2e, 0xbe, 0x36, 0x7b, 0xae, 0xd5, 0x08, 0xee,
|
||||
0xa6, 0xed, 0xf7, 0xb5, 0xba, 0xd0, 0xcc, 0x5a, 0xdf, 0x40, 0xd9, 0xae, 0xaa, 0x7b, 0x8f, 0xa3,
|
||||
0xe3, 0x93, 0xe2, 0xa6, 0x8e, 0x8e, 0x4f, 0x9a, 0xbb, 0x39, 0x29, 0xd7, 0x28, 0x47, 0xf3, 0x87,
|
||||
0x99, 0x07, 0x1b, 0xf7, 0x7e, 0xf8, 0xb5, 0x53, 0x27, 0x3c, 0x9b, 0x1e, 0x3f, 0x1c, 0x78, 0xe3,
|
||||
0x47, 0x23, 0x65, 0x6d, 0x94, 0x21, 0xcf, 0x8f, 0x46, 0xee, 0xf0, 0x11, 0x36, 0x7b, 0xbc, 0x30,
|
||||
0xf1, 0xbd, 0xd0, 0xfb, 0xd6, 0xff, 0x0b, 0x00, 0x00, 0xff, 0xff, 0x0d, 0x5f, 0xbc, 0x91, 0xdd,
|
||||
0x81, 0x00, 0x00,
|
||||
// 11345 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0xbd, 0x5b, 0x8f, 0x24, 0x47,
|
||||
0x76, 0x18, 0x3c, 0x75, 0xeb, 0xaa, 0x3a, 0x75, 0xed, 0xe8, 0x5b, 0x4d, 0x0f, 0x87, 0x33, 0x4c,
|
||||
0x72, 0xc9, 0xd9, 0xe1, 0x6e, 0xcf, 0x70, 0x76, 0xc9, 0x5d, 0x91, 0x9f, 0x56, 0x5b, 0xdd, 0x5d,
|
||||
0x3d, 0x5d, 0x3b, 0x7d, 0x63, 0x56, 0x35, 0x29, 0xae, 0x3e, 0x39, 0x37, 0xbb, 0x2a, 0xba, 0x3b,
|
||||
0x35, 0x55, 0x99, 0xc5, 0xcc, 0xac, 0xbe, 0xec, 0x82, 0x7e, 0x30, 0x6c, 0xc1, 0x30, 0x6c, 0x03,
|
||||
0x82, 0x2d, 0x03, 0x96, 0x2d, 0xd8, 0xb0, 0x61, 0x18, 0x86, 0x01, 0x41, 0xc6, 0xca, 0x80, 0x1f,
|
||||
0xfc, 0xae, 0x17, 0x1b, 0x82, 0x21, 0xf9, 0xc5, 0x10, 0x04, 0xc8, 0x97, 0xf5, 0x9b, 0xa1, 0x9f,
|
||||
0x60, 0xc4, 0x39, 0x11, 0x99, 0x91, 0x55, 0xd9, 0x33, 0xc3, 0x5d, 0x7a, 0x5f, 0x66, 0x3a, 0x4f,
|
||||
0x9c, 0xb8, 0x9f, 0x38, 0x71, 0xae, 0x51, 0x50, 0xf6, 0x27, 0x83, 0x8d, 0x89, 0xef, 0x85, 0x1e,
|
||||
0x2b, 0x8c, 0x5c, 0x7f, 0x32, 0x58, 0x7f, 0xed, 0xcc, 0xf3, 0xce, 0x46, 0xfc, 0x91, 0x3d, 0x71,
|
||||
0x1e, 0xd9, 0xae, 0xeb, 0x85, 0x76, 0xe8, 0x78, 0x6e, 0x40, 0x48, 0xc6, 0x8f, 0xa0, 0xfe, 0x94,
|
||||
0xbb, 0x3d, 0xce, 0x87, 0x26, 0xff, 0x7c, 0xca, 0x83, 0x90, 0xbd, 0x0b, 0x8b, 0x36, 0xff, 0x31,
|
||||
0xe7, 0x43, 0x6b, 0x62, 0x07, 0xc1, 0xe4, 0xdc, 0xb7, 0x03, 0xde, 0xca, 0xdc, 0xcf, 0x3c, 0xa8,
|
||||
0x9a, 0x4d, 0x2a, 0x38, 0x8a, 0xe0, 0xec, 0x0d, 0xa8, 0x06, 0x02, 0x95, 0xbb, 0xa1, 0xef, 0x4d,
|
||||
0xae, 0x5b, 0x59, 0xc4, 0xab, 0x08, 0x58, 0x87, 0x40, 0xc6, 0x08, 0x1a, 0x51, 0x0f, 0xc1, 0xc4,
|
||||
0x73, 0x03, 0xce, 0x1e, 0xc3, 0xf2, 0xc0, 0x99, 0x9c, 0x73, 0xdf, 0xc2, 0xca, 0x63, 0x97, 0x8f,
|
||||
0x3d, 0xd7, 0x19, 0xb4, 0x32, 0xf7, 0x73, 0x0f, 0xca, 0x26, 0xa3, 0x32, 0x51, 0x63, 0x5f, 0x96,
|
||||
0xb0, 0x77, 0xa0, 0xc1, 0x5d, 0x82, 0xf3, 0x21, 0xd6, 0x92, 0x5d, 0xd5, 0x63, 0xb0, 0xa8, 0x60,
|
||||
0xfc, 0xed, 0x2c, 0x2c, 0x76, 0x5d, 0x27, 0xfc, 0xd4, 0x1e, 0x8d, 0x78, 0xa8, 0xe6, 0xf4, 0x0e,
|
||||
0x34, 0x2e, 0x11, 0x80, 0x73, 0xba, 0xf4, 0xfc, 0xa1, 0x9c, 0x51, 0x9d, 0xc0, 0x47, 0x12, 0x7a,
|
||||
0xe3, 0xc8, 0xb2, 0x37, 0x8e, 0x2c, 0x75, 0xb9, 0x72, 0x37, 0x2c, 0xd7, 0x3b, 0xd0, 0xf0, 0xf9,
|
||||
0xc0, 0xbb, 0xe0, 0xfe, 0xb5, 0x75, 0xe9, 0xb8, 0x43, 0xef, 0xb2, 0x95, 0xbf, 0x9f, 0x79, 0x50,
|
||||
0x30, 0xeb, 0x0a, 0xfc, 0x29, 0x42, 0xd9, 0x26, 0x34, 0x06, 0xe7, 0xb6, 0xeb, 0xf2, 0x91, 0x75,
|
||||
0x62, 0x0f, 0x9e, 0x4f, 0x27, 0x41, 0xab, 0x70, 0x3f, 0xf3, 0xa0, 0xf2, 0xe4, 0xf6, 0x06, 0xee,
|
||||
0xea, 0xc6, 0xd6, 0xb9, 0xed, 0x6e, 0x62, 0x49, 0xcf, 0xb5, 0x27, 0xc1, 0xb9, 0x17, 0x9a, 0x75,
|
||||
0x59, 0x83, 0xc0, 0x81, 0xb1, 0x0c, 0x4c, 0x5f, 0x09, 0x5a, 0x7b, 0xe3, 0xdf, 0x66, 0x60, 0xe9,
|
||||
0xd8, 0x1d, 0x79, 0x83, 0xe7, 0x3f, 0xe7, 0x12, 0xa5, 0xcc, 0x21, 0xfb, 0xaa, 0x73, 0xc8, 0x7d,
|
||||
0xd9, 0x39, 0xac, 0xc2, 0x72, 0x72, 0xb0, 0x72, 0x16, 0x1c, 0x56, 0x44, 0xed, 0x33, 0xae, 0x86,
|
||||
0xa5, 0xa6, 0xf1, 0x75, 0x68, 0x0e, 0xa6, 0xbe, 0xcf, 0xdd, 0xb9, 0x79, 0x34, 0x24, 0x3c, 0x9a,
|
||||
0xc8, 0x1b, 0x50, 0x75, 0xf9, 0x65, 0x8c, 0x26, 0x69, 0xd7, 0xe5, 0x97, 0x0a, 0xc5, 0x68, 0xc1,
|
||||
0xea, 0x6c, 0x37, 0x72, 0x00, 0x3f, 0xcb, 0x40, 0xfe, 0x38, 0xbc, 0xf2, 0xd8, 0xfb, 0x50, 0xb5,
|
||||
0x87, 0x43, 0x9f, 0x07, 0x81, 0x15, 0x5e, 0x4f, 0xe8, 0xa4, 0xd4, 0x9f, 0x30, 0x39, 0xc5, 0x36,
|
||||
0x15, 0xf5, 0xaf, 0x27, 0xdc, 0xac, 0xd8, 0xf1, 0x07, 0x6b, 0x41, 0x51, 0x7e, 0x62, 0xbf, 0x65,
|
||||
0x53, 0x7d, 0xb2, 0xbb, 0x00, 0xf6, 0xd8, 0x9b, 0xba, 0xa1, 0x15, 0xd8, 0x21, 0xae, 0x58, 0xce,
|
||||
0x2c, 0x13, 0xa4, 0x67, 0x87, 0xec, 0x0e, 0x94, 0x27, 0xcf, 0xad, 0x60, 0xe0, 0x3b, 0x93, 0x10,
|
||||
0x89, 0xa7, 0x6c, 0x96, 0x26, 0xcf, 0x7b, 0xf8, 0xcd, 0xde, 0x85, 0x92, 0x37, 0x0d, 0x27, 0x9e,
|
||||
0xe3, 0x86, 0x92, 0x5e, 0x1a, 0x72, 0x20, 0x87, 0xd3, 0xf0, 0x48, 0x80, 0xcd, 0x08, 0x81, 0xbd,
|
||||
0x05, 0xb5, 0x81, 0xe7, 0x9e, 0x3a, 0xfe, 0x98, 0x38, 0x42, 0x6b, 0x01, 0xfb, 0x4a, 0x02, 0x8d,
|
||||
0x3f, 0xcc, 0x42, 0xa5, 0xef, 0xdb, 0x6e, 0x60, 0x0f, 0x04, 0x80, 0xad, 0x41, 0x31, 0xbc, 0xb2,
|
||||
0xce, 0xed, 0xe0, 0x1c, 0xa7, 0x5a, 0x36, 0x17, 0xc2, 0xab, 0x5d, 0x3b, 0x38, 0x67, 0xab, 0xb0,
|
||||
0x40, 0xa3, 0xc4, 0x09, 0xe5, 0x4c, 0xf9, 0x25, 0x0e, 0x88, 0x3b, 0x1d, 0x5b, 0xc9, 0xae, 0x72,
|
||||
0x48, 0x31, 0x4d, 0x77, 0x3a, 0xde, 0xd2, 0xe1, 0x62, 0xf2, 0x27, 0x62, 0xbb, 0xa9, 0x03, 0x9a,
|
||||
0x5e, 0x19, 0x21, 0xd8, 0xc7, 0x1b, 0x50, 0x95, 0xc5, 0xdc, 0x39, 0x3b, 0xa7, 0x39, 0x16, 0xcc,
|
||||
0x0a, 0x21, 0x20, 0x48, 0xb4, 0x10, 0x3a, 0x63, 0x6e, 0x05, 0xa1, 0x3d, 0x9e, 0xc8, 0x29, 0x95,
|
||||
0x05, 0xa4, 0x27, 0x00, 0x58, 0xec, 0x85, 0xf6, 0xc8, 0x3a, 0xe5, 0x3c, 0x68, 0x15, 0x65, 0xb1,
|
||||
0x80, 0xec, 0x70, 0x1e, 0xb0, 0xaf, 0x41, 0x7d, 0xc8, 0x83, 0xd0, 0x92, 0x9b, 0xc1, 0x83, 0x56,
|
||||
0x09, 0x4f, 0x7e, 0x4d, 0x40, 0xdb, 0x0a, 0xc8, 0x5e, 0x03, 0xf0, 0xed, 0x4b, 0x4b, 0x2c, 0x04,
|
||||
0xbf, 0x6a, 0x95, 0x69, 0x17, 0x7c, 0xfb, 0xb2, 0x7f, 0xb5, 0xcb, 0xaf, 0x04, 0xd5, 0x3c, 0xe5,
|
||||
0xa1, 0xb6, 0x68, 0x81, 0xa4, 0x4e, 0x63, 0x0f, 0x98, 0x06, 0xde, 0xe6, 0xa1, 0xed, 0x8c, 0x02,
|
||||
0xf6, 0x01, 0x54, 0x43, 0x0d, 0x19, 0xd9, 0x60, 0x25, 0x22, 0x21, 0xad, 0x82, 0x99, 0xc0, 0x33,
|
||||
0xce, 0xa1, 0xb4, 0xc3, 0xf9, 0x9e, 0x33, 0x76, 0x42, 0xb6, 0x0a, 0x85, 0x53, 0xe7, 0x8a, 0x13,
|
||||
0xb1, 0xe7, 0x76, 0x6f, 0x99, 0xf4, 0xc9, 0xee, 0x01, 0xe0, 0x1f, 0xd6, 0x38, 0xa2, 0xa6, 0xdd,
|
||||
0x5b, 0x66, 0x19, 0x61, 0xfb, 0x81, 0x1d, 0xb2, 0x75, 0x28, 0x4e, 0xb8, 0x3f, 0xe0, 0x6a, 0xdf,
|
||||
0x76, 0x6f, 0x99, 0x0a, 0xb0, 0x59, 0x84, 0xc2, 0x48, 0xb4, 0x6e, 0xfc, 0x71, 0x01, 0x2a, 0x3d,
|
||||
0xee, 0x46, 0xa7, 0x8c, 0x41, 0x5e, 0x2c, 0x88, 0x3c, 0x59, 0xf8, 0x37, 0x7b, 0x13, 0x2a, 0xb8,
|
||||
0x74, 0x41, 0xe8, 0x3b, 0xee, 0x19, 0x51, 0xf5, 0x66, 0xb6, 0x95, 0x31, 0x41, 0x80, 0x7b, 0x08,
|
||||
0x65, 0x4d, 0xc8, 0xd9, 0x63, 0x45, 0xd5, 0xe2, 0x4f, 0x76, 0x1b, 0x4a, 0xf6, 0x38, 0xa4, 0xe1,
|
||||
0x55, 0x11, 0x5c, 0xb4, 0xc7, 0x21, 0x0e, 0xed, 0x0d, 0xa8, 0x4e, 0xec, 0xeb, 0xb1, 0x38, 0xcb,
|
||||
0x11, 0x39, 0x54, 0xcd, 0x8a, 0x84, 0x21, 0x41, 0x3c, 0x81, 0x25, 0x1d, 0x45, 0x75, 0x5e, 0x88,
|
||||
0x3a, 0x5f, 0xd4, 0xb0, 0xe5, 0x18, 0xde, 0x81, 0x86, 0xaa, 0xe3, 0xd3, 0x7c, 0x90, 0x4c, 0xca,
|
||||
0x66, 0x5d, 0x82, 0xd5, 0x2c, 0x1f, 0x40, 0xf3, 0xd4, 0x71, 0xed, 0x91, 0x35, 0x18, 0x85, 0x17,
|
||||
0xd6, 0x90, 0x8f, 0x42, 0x1b, 0x29, 0xa6, 0x60, 0xd6, 0x11, 0xbe, 0x35, 0x0a, 0x2f, 0xb6, 0x05,
|
||||
0x94, 0x7d, 0x03, 0xca, 0xa7, 0x9c, 0x5b, 0xb8, 0x58, 0xad, 0x52, 0xe2, 0xe0, 0xa9, 0x1d, 0x32,
|
||||
0x4b, 0xa7, 0x6a, 0xaf, 0xbe, 0x01, 0x4d, 0x6f, 0x1a, 0x9e, 0x79, 0x8e, 0x7b, 0x66, 0x09, 0x7e,
|
||||
0x67, 0x39, 0x43, 0xa4, 0xa1, 0xfc, 0x66, 0xf6, 0x71, 0xc6, 0xac, 0xab, 0x32, 0xc1, 0x79, 0xba,
|
||||
0x43, 0xf6, 0x36, 0x34, 0x46, 0x76, 0x10, 0x5a, 0xe7, 0xde, 0xc4, 0x9a, 0x4c, 0x4f, 0x9e, 0xf3,
|
||||
0xeb, 0x56, 0x0d, 0x17, 0xa2, 0x26, 0xc0, 0xbb, 0xde, 0xe4, 0x08, 0x81, 0x82, 0xb2, 0x71, 0x9c,
|
||||
0x34, 0x08, 0xb8, 0x9f, 0x79, 0x50, 0x33, 0xcb, 0x02, 0x42, 0x9d, 0x7e, 0x06, 0x4b, 0xb8, 0x3d,
|
||||
0x83, 0x69, 0x10, 0x7a, 0x63, 0x4b, 0xf0, 0x6a, 0x7f, 0x18, 0xb4, 0x2a, 0x48, 0x6b, 0x5f, 0x97,
|
||||
0x83, 0xd5, 0xf6, 0x78, 0x63, 0x9b, 0x07, 0xe1, 0x16, 0x22, 0x9b, 0x84, 0x2b, 0x2e, 0xf4, 0x6b,
|
||||
0x73, 0x71, 0x38, 0x0b, 0x67, 0xdf, 0x00, 0x66, 0x8f, 0x46, 0xde, 0xa5, 0x15, 0xf0, 0xd1, 0xa9,
|
||||
0x25, 0x17, 0xb1, 0x55, 0xbf, 0x9f, 0x79, 0x50, 0x32, 0x9b, 0x58, 0xd2, 0xe3, 0xa3, 0xd3, 0x23,
|
||||
0x82, 0xb3, 0x0f, 0x00, 0x0f, 0x93, 0x75, 0xca, 0xed, 0x70, 0xea, 0xf3, 0xa0, 0xd5, 0xb8, 0x9f,
|
||||
0x7b, 0x50, 0x7f, 0xb2, 0x18, 0xad, 0x17, 0x82, 0x37, 0x9d, 0xd0, 0xac, 0x0a, 0x3c, 0xf9, 0x1d,
|
||||
0xac, 0x6f, 0xc3, 0x6a, 0xfa, 0x90, 0x04, 0x51, 0x89, 0x55, 0x11, 0xc4, 0x98, 0x37, 0xc5, 0x9f,
|
||||
0x6c, 0x19, 0x0a, 0x17, 0xf6, 0x68, 0xca, 0x25, 0x4f, 0xa7, 0x8f, 0x0f, 0xb3, 0xdf, 0xcd, 0x18,
|
||||
0x7f, 0x94, 0x81, 0x2a, 0xcd, 0x52, 0xca, 0x22, 0x6f, 0x42, 0x4d, 0x51, 0x03, 0xf7, 0x7d, 0xcf,
|
||||
0x97, 0x5c, 0x4d, 0x51, 0x5e, 0x47, 0xc0, 0xc4, 0xad, 0xa2, 0x90, 0x26, 0x3e, 0x77, 0xc6, 0xf6,
|
||||
0x99, 0x6a, 0x5a, 0x91, 0xd2, 0x91, 0x04, 0xb3, 0xf7, 0xe2, 0xf6, 0x7c, 0x6f, 0x1a, 0x72, 0x79,
|
||||
0xe7, 0x55, 0xe5, 0xf4, 0x4c, 0x01, 0x8b, 0x5a, 0xc7, 0xaf, 0x57, 0xa0, 0x73, 0xe3, 0x77, 0x33,
|
||||
0xc0, 0xc4, 0xb0, 0xfb, 0x1e, 0x35, 0x20, 0x29, 0x74, 0xb6, 0x66, 0xe6, 0x95, 0x4f, 0x48, 0xf6,
|
||||
0x45, 0x27, 0xc4, 0x80, 0x02, 0x8d, 0x3d, 0x9f, 0x32, 0x76, 0x2a, 0xfa, 0x41, 0xbe, 0x94, 0x6b,
|
||||
0xe6, 0x8d, 0xff, 0x96, 0x83, 0xe5, 0x2d, 0xba, 0xb2, 0xdb, 0x83, 0x01, 0x9f, 0x44, 0x67, 0xe7,
|
||||
0x1e, 0x54, 0x5c, 0x6f, 0xc8, 0x15, 0xc5, 0xd2, 0xc0, 0x40, 0x80, 0x34, 0x72, 0x3d, 0xb7, 0x1d,
|
||||
0x97, 0x06, 0x4e, 0x8b, 0x59, 0x46, 0x08, 0x0e, 0xfb, 0x6d, 0x68, 0x4c, 0xb8, 0x3b, 0xd4, 0x8f,
|
||||
0x08, 0x09, 0x55, 0x35, 0x09, 0x96, 0xa7, 0xe3, 0x1e, 0x54, 0x4e, 0xa7, 0x84, 0x27, 0x18, 0x4b,
|
||||
0x1e, 0x69, 0x00, 0x24, 0xa8, 0x4d, 0xfc, 0x65, 0x32, 0x0d, 0xce, 0xb1, 0xb4, 0x80, 0xa5, 0x45,
|
||||
0xf1, 0x2d, 0x8a, 0xee, 0x02, 0x0c, 0xa7, 0x41, 0x28, 0x4f, 0xcc, 0x02, 0x16, 0x96, 0x05, 0x84,
|
||||
0x4e, 0xcc, 0x37, 0x61, 0x69, 0x6c, 0x5f, 0x59, 0x48, 0x3b, 0x96, 0xe3, 0x5a, 0xa7, 0x23, 0xbc,
|
||||
0x73, 0x8a, 0x88, 0xd7, 0x1c, 0xdb, 0x57, 0x9f, 0x88, 0x92, 0xae, 0xbb, 0x83, 0x70, 0xc1, 0x56,
|
||||
0x94, 0xb8, 0xe3, 0xf3, 0x80, 0xfb, 0x17, 0x1c, 0x39, 0x41, 0x3e, 0x92, 0x69, 0x4c, 0x82, 0x8a,
|
||||
0x11, 0x8d, 0xc5, 0xbc, 0xc3, 0xd1, 0x80, 0x8e, 0xbd, 0x59, 0x1c, 0x3b, 0xee, 0x6e, 0x38, 0x1a,
|
||||
0x88, 0x7b, 0x45, 0xf0, 0x91, 0x09, 0xf7, 0xad, 0xe7, 0x97, 0x78, 0x86, 0xf3, 0xc8, 0x37, 0x8e,
|
||||
0xb8, 0xff, 0xec, 0x52, 0x5c, 0xfd, 0x83, 0x00, 0x19, 0x91, 0x7d, 0xdd, 0xaa, 0xe0, 0x01, 0x2f,
|
||||
0x0d, 0x02, 0xc1, 0x82, 0xec, 0x6b, 0x71, 0x08, 0xc5, 0x68, 0x6d, 0xdc, 0x05, 0x3e, 0xc4, 0xe6,
|
||||
0x03, 0xe4, 0xa8, 0x35, 0x1c, 0x6c, 0x5b, 0x16, 0x88, 0x7e, 0x02, 0x41, 0xf5, 0x6a, 0xb0, 0xa7,
|
||||
0x23, 0xfb, 0x2c, 0x40, 0x96, 0x52, 0x33, 0xab, 0x12, 0xb8, 0x23, 0x60, 0xc6, 0xa7, 0x24, 0x64,
|
||||
0x69, 0x7b, 0x2b, 0xcf, 0x8c, 0xb8, 0xea, 0x11, 0x82, 0xfb, 0x5a, 0x32, 0xe5, 0x57, 0xda, 0xa6,
|
||||
0x65, 0x53, 0x36, 0xcd, 0xf8, 0xfd, 0x0c, 0x54, 0x65, 0xcb, 0x28, 0x94, 0xb0, 0x0d, 0x60, 0x6a,
|
||||
0x17, 0xc3, 0x2b, 0x67, 0x68, 0x9d, 0x5c, 0x87, 0x3c, 0x20, 0xa2, 0xd9, 0xbd, 0x65, 0x36, 0x65,
|
||||
0x59, 0xff, 0xca, 0x19, 0x6e, 0x8a, 0x12, 0xf6, 0x10, 0x9a, 0x09, 0xfc, 0x20, 0xf4, 0x89, 0xa2,
|
||||
0x77, 0x6f, 0x99, 0x75, 0x0d, 0xbb, 0x17, 0xfa, 0xe2, 0x8c, 0x08, 0x91, 0x67, 0x1a, 0x5a, 0x8e,
|
||||
0x3b, 0xe4, 0x57, 0x48, 0x46, 0x35, 0xb3, 0x42, 0xb0, 0xae, 0x00, 0x6d, 0xd6, 0xa1, 0xaa, 0x37,
|
||||
0x67, 0x9c, 0x41, 0x49, 0xc9, 0x4b, 0x28, 0x30, 0xcc, 0x0c, 0xc9, 0x2c, 0x87, 0xd1, 0x48, 0x6e,
|
||||
0x43, 0x29, 0x39, 0x02, 0xb3, 0x18, 0xbe, 0x72, 0xc7, 0xc6, 0xf7, 0xa0, 0xb9, 0x27, 0x88, 0xc7,
|
||||
0x15, 0xc4, 0x2a, 0xe5, 0xbf, 0x55, 0x58, 0xd0, 0x0e, 0x4d, 0xd9, 0x94, 0x5f, 0xe2, 0xce, 0x3d,
|
||||
0xf7, 0x82, 0x50, 0xf6, 0x82, 0x7f, 0x1b, 0x7f, 0x9c, 0x01, 0xd6, 0x09, 0x42, 0x67, 0x6c, 0x87,
|
||||
0x7c, 0x87, 0x47, 0x6c, 0xe1, 0x10, 0xaa, 0xa2, 0xb5, 0xbe, 0xd7, 0x26, 0x81, 0x8c, 0x04, 0x8a,
|
||||
0x77, 0xe5, 0x31, 0x9e, 0xaf, 0xb0, 0xa1, 0x63, 0x13, 0x9b, 0x4f, 0x34, 0x20, 0x4e, 0x59, 0x68,
|
||||
0xfb, 0x67, 0x3c, 0x44, 0x31, 0x4e, 0xca, 0xfb, 0x40, 0x20, 0x21, 0xc0, 0xad, 0xff, 0x1a, 0x2c,
|
||||
0xce, 0xb5, 0xa1, 0xf3, 0xe5, 0x72, 0x0a, 0x5f, 0xce, 0xe9, 0x7c, 0xd9, 0x82, 0xa5, 0xc4, 0xb8,
|
||||
0x24, 0xa5, 0xad, 0x41, 0x51, 0x1c, 0x08, 0x21, 0x1c, 0x64, 0x48, 0xaa, 0x3c, 0xe5, 0x5c, 0x88,
|
||||
0xc1, 0x8f, 0x60, 0xf9, 0x94, 0x73, 0xdf, 0x0e, 0xb1, 0x10, 0x4f, 0x8c, 0xd8, 0x21, 0xd9, 0xf0,
|
||||
0xa2, 0x2c, 0xeb, 0xd9, 0xe1, 0x11, 0xf7, 0xc5, 0x4e, 0x19, 0xff, 0x23, 0x03, 0x0d, 0xc1, 0x41,
|
||||
0xf7, 0x6d, 0xf7, 0x5a, 0xad, 0xd3, 0x5e, 0xea, 0x3a, 0x3d, 0xd0, 0x2e, 0x43, 0x0d, 0xfb, 0xcb,
|
||||
0x2e, 0x52, 0x6e, 0x76, 0x91, 0xd8, 0x7d, 0xa8, 0x26, 0xc6, 0x5a, 0xc0, 0xb1, 0x42, 0x10, 0x0d,
|
||||
0xf2, 0x17, 0x5f, 0xc6, 0xb7, 0xa1, 0x19, 0x0f, 0x5b, 0xae, 0x21, 0x83, 0xbc, 0x20, 0x49, 0xd9,
|
||||
0x00, 0xfe, 0x6d, 0xfc, 0xd3, 0x0c, 0x21, 0x6e, 0x79, 0x4e, 0x24, 0x9d, 0x0a, 0x44, 0x21, 0xf7,
|
||||
0x2a, 0x44, 0xf1, 0xf7, 0x8d, 0x52, 0xfd, 0x2f, 0x3e, 0x59, 0x71, 0x74, 0x02, 0xee, 0x0e, 0x2d,
|
||||
0x7b, 0x34, 0x42, 0xe6, 0x5b, 0x32, 0x8b, 0xe2, 0xbb, 0x3d, 0x1a, 0x19, 0xef, 0xc0, 0xa2, 0x36,
|
||||
0xba, 0x17, 0xcc, 0xe3, 0x00, 0xd8, 0x9e, 0x13, 0x84, 0xc7, 0x6e, 0x30, 0xd1, 0x04, 0xb7, 0x3b,
|
||||
0x50, 0x16, 0x1c, 0x56, 0x8c, 0x8c, 0x8e, 0x6c, 0xc1, 0x14, 0x2c, 0x57, 0x8c, 0x2b, 0xc0, 0x42,
|
||||
0xfb, 0x4a, 0x16, 0x66, 0x65, 0xa1, 0x7d, 0x85, 0x85, 0xc6, 0x77, 0x61, 0x29, 0xd1, 0x9e, 0xec,
|
||||
0xfa, 0x0d, 0x28, 0x4c, 0xc3, 0x2b, 0x4f, 0x89, 0xe6, 0x15, 0x49, 0x21, 0x42, 0x01, 0x34, 0xa9,
|
||||
0xc4, 0xf8, 0x08, 0x16, 0x0f, 0xf8, 0xa5, 0x3c, 0xc4, 0x6a, 0x20, 0x6f, 0x43, 0xfe, 0x25, 0x4a,
|
||||
0x21, 0x96, 0x1b, 0x1b, 0xc0, 0xf4, 0xca, 0xb2, 0x57, 0x4d, 0x47, 0xcc, 0x24, 0x74, 0x44, 0xe3,
|
||||
0x6d, 0x60, 0x3d, 0xe7, 0xcc, 0xdd, 0xe7, 0x41, 0x60, 0x9f, 0x45, 0xc7, 0xbe, 0x09, 0xb9, 0x71,
|
||||
0x70, 0x26, 0x79, 0x94, 0xf8, 0xd3, 0xf8, 0x16, 0x2c, 0x25, 0xf0, 0x64, 0xc3, 0xaf, 0x41, 0x39,
|
||||
0x70, 0xce, 0x5c, 0x14, 0xac, 0x64, 0xd3, 0x31, 0xc0, 0xd8, 0x81, 0xe5, 0x4f, 0xb8, 0xef, 0x9c,
|
||||
0x5e, 0xbf, 0xac, 0xf9, 0x64, 0x3b, 0xd9, 0xd9, 0x76, 0x3a, 0xb0, 0x32, 0xd3, 0x8e, 0xec, 0x9e,
|
||||
0xc8, 0x57, 0xee, 0x64, 0xc9, 0xa4, 0x0f, 0x8d, 0xef, 0x65, 0x75, 0xbe, 0x67, 0x1c, 0x03, 0xdb,
|
||||
0xf2, 0x5c, 0x97, 0x0f, 0xc2, 0x23, 0xce, 0xfd, 0xd8, 0x4a, 0x15, 0xd3, 0x6a, 0xe5, 0xc9, 0x9a,
|
||||
0x5c, 0xd9, 0x59, 0x66, 0x2a, 0x89, 0x98, 0x41, 0x7e, 0xc2, 0xfd, 0x31, 0x36, 0x5c, 0x32, 0xf1,
|
||||
0x6f, 0x63, 0x05, 0x96, 0x12, 0xcd, 0x4a, 0xbd, 0xfe, 0x31, 0xac, 0x6c, 0x3b, 0xc1, 0x60, 0xbe,
|
||||
0xc3, 0x35, 0x28, 0x4e, 0xa6, 0x27, 0x56, 0x92, 0x2f, 0x3f, 0xe3, 0xd7, 0x42, 0xdb, 0x9b, 0xad,
|
||||
0x21, 0xdb, 0xfa, 0x9b, 0x19, 0xc8, 0xef, 0xf6, 0xf7, 0xb6, 0xd8, 0x3a, 0x94, 0x1c, 0x77, 0xe0,
|
||||
0x8d, 0x85, 0xe0, 0x45, 0x73, 0x8e, 0xbe, 0x6f, 0x3c, 0x60, 0x77, 0xa0, 0x8c, 0xf2, 0x9a, 0x50,
|
||||
0x6d, 0xa5, 0xe8, 0x53, 0x12, 0x80, 0x3d, 0x6f, 0xf0, 0x5c, 0xe8, 0xd4, 0xfc, 0x6a, 0xe2, 0xf8,
|
||||
0xa8, 0x35, 0x2b, 0x65, 0x38, 0x4f, 0x77, 0x7d, 0x5c, 0x40, 0x1a, 0xb1, 0xf1, 0x57, 0x45, 0x28,
|
||||
0xca, 0xdb, 0x96, 0x6e, 0xee, 0xd0, 0xb9, 0xe0, 0xf1, 0xcd, 0x2d, 0xbe, 0x84, 0x3c, 0xe0, 0xf3,
|
||||
0xb1, 0x17, 0x46, 0x02, 0x1b, 0xed, 0x41, 0x95, 0x80, 0x52, 0x64, 0xd3, 0x84, 0x06, 0x32, 0x31,
|
||||
0xe4, 0x08, 0x69, 0xa0, 0x5f, 0xe5, 0x77, 0xa0, 0xa8, 0xee, 0xfe, 0x7c, 0xa4, 0xd3, 0x2c, 0x0c,
|
||||
0x48, 0x5a, 0x5b, 0x87, 0xd2, 0xc0, 0x9e, 0xd8, 0x03, 0x27, 0xbc, 0x96, 0x0c, 0x21, 0xfa, 0x16,
|
||||
0xad, 0x8f, 0xbc, 0x81, 0x3d, 0xb2, 0x4e, 0xec, 0x91, 0xed, 0x0e, 0xb8, 0xd4, 0xdd, 0xab, 0x08,
|
||||
0xdc, 0x24, 0x98, 0xd0, 0xcf, 0xe5, 0x38, 0x15, 0x16, 0xa9, 0xf0, 0x72, 0xf4, 0x0a, 0x4d, 0x08,
|
||||
0x97, 0xde, 0x78, 0xec, 0x08, 0x2d, 0x83, 0xc4, 0xb0, 0x9c, 0x59, 0x26, 0xc8, 0x0e, 0xc7, 0xd9,
|
||||
0xca, 0xe2, 0x4b, 0x5a, 0xba, 0x32, 0x75, 0x45, 0xc0, 0x4f, 0xc9, 0x90, 0x30, 0x2f, 0x8b, 0xe5,
|
||||
0x34, 0x59, 0xec, 0x5d, 0x58, 0x9c, 0xba, 0x01, 0x0f, 0xc3, 0x11, 0x1f, 0x46, 0x63, 0xa9, 0x20,
|
||||
0x52, 0x33, 0x2a, 0x50, 0xc3, 0xd9, 0x80, 0x25, 0x32, 0x3a, 0x04, 0x76, 0xe8, 0x05, 0xe7, 0x4e,
|
||||
0x60, 0x05, 0x42, 0x43, 0x22, 0x75, 0x77, 0x11, 0x8b, 0x7a, 0xb2, 0xa4, 0x47, 0x2a, 0xd2, 0xda,
|
||||
0x0c, 0xbe, 0xcf, 0x07, 0xdc, 0xb9, 0xe0, 0x43, 0x94, 0xd3, 0x72, 0xe6, 0x4a, 0xa2, 0x8e, 0x29,
|
||||
0x0b, 0x51, 0xe8, 0x9e, 0x8e, 0xad, 0xe9, 0x64, 0x68, 0x0b, 0x61, 0xa5, 0x4e, 0xc2, 0xb0, 0x3b,
|
||||
0x1d, 0x1f, 0x13, 0x84, 0x3d, 0x06, 0x25, 0x89, 0x49, 0xf9, 0xb0, 0x91, 0xe0, 0x67, 0x82, 0x58,
|
||||
0xcd, 0xaa, 0xc4, 0x20, 0x41, 0x31, 0x21, 0x73, 0x36, 0x67, 0x64, 0xce, 0x16, 0x14, 0x27, 0xbe,
|
||||
0x73, 0x61, 0x87, 0xbc, 0xb5, 0x48, 0x0c, 0x5c, 0x7e, 0x0a, 0xce, 0xe0, 0xb8, 0x4e, 0xe8, 0xd8,
|
||||
0xa1, 0xe7, 0xb7, 0x18, 0x96, 0xc5, 0x00, 0xf6, 0x10, 0x16, 0x91, 0x46, 0x82, 0xd0, 0x0e, 0xa7,
|
||||
0x81, 0x94, 0x40, 0x97, 0x90, 0x98, 0x50, 0x86, 0xee, 0x21, 0x1c, 0x85, 0x50, 0xf6, 0x2d, 0x58,
|
||||
0x25, 0xb2, 0xc0, 0x1a, 0x52, 0xb2, 0x46, 0x81, 0x60, 0x19, 0x97, 0x62, 0x09, 0x4b, 0x05, 0x7d,
|
||||
0x4b, 0xf9, 0x5a, 0x48, 0x07, 0xef, 0xc3, 0x9a, 0x24, 0x93, 0xb9, 0x5a, 0x2b, 0x58, 0x6b, 0x99,
|
||||
0x8a, 0x67, 0xaa, 0x6d, 0xc0, 0xa2, 0x18, 0x92, 0x33, 0xb0, 0x64, 0x6d, 0x71, 0x12, 0x56, 0xc5,
|
||||
0xe8, 0x51, 0x53, 0x6a, 0x50, 0xa1, 0x89, 0x65, 0xcf, 0xf8, 0x35, 0xfb, 0x1e, 0x34, 0x88, 0x64,
|
||||
0x50, 0xbd, 0x42, 0x4e, 0xbf, 0x8e, 0x9c, 0x7e, 0x45, 0x59, 0x38, 0xa3, 0x52, 0x64, 0xf6, 0xf5,
|
||||
0x41, 0xe2, 0x5b, 0x1c, 0x87, 0x91, 0x73, 0xca, 0x43, 0x67, 0xcc, 0x5b, 0x6b, 0x44, 0x60, 0xea,
|
||||
0x5b, 0x9c, 0xd4, 0xe9, 0x04, 0x4b, 0x5a, 0xc4, 0x17, 0xe8, 0x0b, 0x69, 0x77, 0xe4, 0x05, 0x5c,
|
||||
0x99, 0xa8, 0x5a, 0xb7, 0xe5, 0x21, 0x14, 0x40, 0xc9, 0xf6, 0x8c, 0x9f, 0x66, 0xe8, 0x1e, 0x93,
|
||||
0xc7, 0x3e, 0xd0, 0xb4, 0x32, 0x3a, 0xf0, 0x96, 0xe7, 0x8e, 0xae, 0x25, 0x0f, 0x00, 0x02, 0x1d,
|
||||
0xba, 0x23, 0x3c, 0x84, 0x8e, 0xab, 0xa3, 0x10, 0xcb, 0xac, 0x2a, 0x20, 0x22, 0xdd, 0x83, 0xca,
|
||||
0x64, 0x7a, 0x32, 0x72, 0x06, 0x84, 0x92, 0xa3, 0x56, 0x08, 0x84, 0x08, 0x42, 0x2d, 0x25, 0x42,
|
||||
0x20, 0x8c, 0x3c, 0x62, 0x54, 0x24, 0x0c, 0x51, 0x90, 0x25, 0x73, 0x1f, 0xb9, 0x40, 0xd5, 0xc4,
|
||||
0xbf, 0x8d, 0x4d, 0x58, 0x4e, 0x0e, 0x5a, 0xde, 0x17, 0x0f, 0xa1, 0x24, 0x59, 0x8c, 0xb2, 0x57,
|
||||
0xd4, 0x35, 0x0b, 0xb2, 0xd0, 0xac, 0xa2, 0x72, 0xe3, 0xb7, 0x17, 0x60, 0x49, 0x42, 0xb7, 0xc4,
|
||||
0x8a, 0xf4, 0xa6, 0xe3, 0xb1, 0xed, 0xa7, 0xf0, 0xae, 0xcc, 0x8b, 0x79, 0x57, 0x76, 0x8e, 0x77,
|
||||
0x25, 0x15, 0x56, 0x62, 0x7d, 0x49, 0x85, 0x55, 0x6c, 0x01, 0xe9, 0x10, 0xba, 0xf9, 0xb2, 0x26,
|
||||
0xc1, 0x7d, 0x32, 0x93, 0xce, 0x71, 0xda, 0x42, 0x0a, 0xa7, 0xd5, 0xf9, 0xe4, 0xc2, 0x0c, 0x9f,
|
||||
0x7c, 0x03, 0x68, 0xaf, 0x15, 0xdb, 0x2f, 0x92, 0x5a, 0x81, 0x30, 0x69, 0x03, 0x7d, 0x07, 0x1a,
|
||||
0xb3, 0xac, 0x89, 0x78, 0x60, 0x3d, 0x85, 0x31, 0x39, 0x63, 0x8e, 0x97, 0x8c, 0x86, 0x5c, 0x96,
|
||||
0x8c, 0xc9, 0x19, 0xf3, 0x3d, 0x2c, 0x51, 0xf8, 0x1d, 0x00, 0xea, 0x1b, 0x69, 0x1d, 0x90, 0xd6,
|
||||
0xdf, 0x4e, 0xee, 0x85, 0xbe, 0xea, 0x1b, 0xe2, 0x63, 0xea, 0x73, 0x24, 0xfe, 0x32, 0xd6, 0x44,
|
||||
0xba, 0x7f, 0x06, 0x75, 0x6f, 0xc2, 0x5d, 0x2b, 0x66, 0x11, 0x15, 0x6c, 0xea, 0xad, 0x17, 0x34,
|
||||
0xd5, 0x55, 0xb8, 0x66, 0x4d, 0xd4, 0x8d, 0x3e, 0xd9, 0x3e, 0x2d, 0x3c, 0xd7, 0x5a, 0xab, 0x7e,
|
||||
0x89, 0xd6, 0xea, 0x58, 0x39, 0xfa, 0x36, 0xfe, 0x4e, 0x06, 0x2a, 0xda, 0xb0, 0xd9, 0x0a, 0x2c,
|
||||
0x6e, 0x1d, 0x1e, 0x1e, 0x75, 0xcc, 0x76, 0xbf, 0xfb, 0x49, 0xc7, 0xda, 0xda, 0x3b, 0xec, 0x75,
|
||||
0x9a, 0xb7, 0x04, 0x78, 0xef, 0x70, 0xab, 0xbd, 0x67, 0xed, 0x1c, 0x9a, 0x5b, 0x0a, 0x9c, 0x61,
|
||||
0xab, 0xc0, 0xcc, 0xce, 0xfe, 0x61, 0xbf, 0x93, 0x80, 0x67, 0x59, 0x13, 0xaa, 0x9b, 0x66, 0xa7,
|
||||
0xbd, 0xb5, 0x2b, 0x21, 0x39, 0xb6, 0x0c, 0xcd, 0x9d, 0xe3, 0x83, 0xed, 0xee, 0xc1, 0x53, 0x6b,
|
||||
0xab, 0x7d, 0xb0, 0xd5, 0xd9, 0xeb, 0x6c, 0x37, 0xf3, 0xac, 0x06, 0xe5, 0xf6, 0x66, 0xfb, 0x60,
|
||||
0xfb, 0xf0, 0xa0, 0xb3, 0xdd, 0x2c, 0x18, 0xbf, 0x02, 0xe5, 0x78, 0xa2, 0x15, 0x28, 0x1e, 0x1f,
|
||||
0x3c, 0x3b, 0x38, 0xfc, 0xf4, 0xa0, 0x79, 0x8b, 0x95, 0xa1, 0x80, 0xfd, 0x37, 0x33, 0x0c, 0x60,
|
||||
0x81, 0xfa, 0x6c, 0x66, 0x59, 0x09, 0xf2, 0x9b, 0x87, 0xfd, 0xdd, 0x66, 0xce, 0xf8, 0x8b, 0x0c,
|
||||
0xac, 0xe0, 0x94, 0x87, 0xb3, 0x4c, 0xe0, 0x3e, 0x54, 0x06, 0x9e, 0x37, 0x11, 0x0a, 0x52, 0x2c,
|
||||
0x08, 0xe8, 0x20, 0x71, 0xc0, 0x89, 0xe7, 0x9e, 0x7a, 0xfe, 0x80, 0x4b, 0x1e, 0x00, 0x08, 0xda,
|
||||
0x11, 0x10, 0x41, 0x83, 0x92, 0x88, 0x09, 0x83, 0x58, 0x40, 0x85, 0x60, 0x84, 0xb2, 0x0a, 0x0b,
|
||||
0x27, 0x3e, 0xb7, 0x07, 0xe7, 0xf2, 0xf4, 0xcb, 0x2f, 0xf6, 0xf5, 0x58, 0x75, 0x1f, 0x08, 0x9a,
|
||||
0x1a, 0xf1, 0x21, 0x1e, 0x81, 0x92, 0xd9, 0x90, 0xf0, 0x2d, 0x09, 0x16, 0x97, 0x88, 0x7d, 0x62,
|
||||
0xbb, 0x43, 0xcf, 0xe5, 0x43, 0xa9, 0x21, 0xc4, 0x00, 0xe3, 0x08, 0x56, 0x67, 0xe7, 0x27, 0xf9,
|
||||
0xc5, 0x07, 0x1a, 0xbf, 0x20, 0x81, 0x7d, 0xfd, 0x66, 0x52, 0xd0, 0x78, 0xc7, 0xdf, 0xcb, 0x43,
|
||||
0x5e, 0x08, 0x70, 0x37, 0xca, 0x7a, 0xba, 0x44, 0x9e, 0x9b, 0xf3, 0xda, 0xa0, 0x85, 0x80, 0x6e,
|
||||
0x76, 0x32, 0x43, 0x95, 0x11, 0x82, 0x37, 0x7a, 0x54, 0xec, 0xf3, 0xc1, 0x85, 0xb4, 0x43, 0x51,
|
||||
0xb1, 0xc9, 0x07, 0x17, 0xa8, 0x0a, 0xd9, 0x21, 0xd5, 0xa5, 0xf3, 0x5e, 0x0c, 0xec, 0x10, 0x6b,
|
||||
0xca, 0x22, 0xac, 0x57, 0x8c, 0x8a, 0xb0, 0x56, 0x0b, 0x8a, 0x8e, 0x7b, 0xe2, 0x4d, 0xdd, 0x21,
|
||||
0x1e, 0xef, 0x92, 0xa9, 0x3e, 0xd1, 0x49, 0x84, 0x9c, 0x48, 0xdc, 0x1f, 0x74, 0x9a, 0x4b, 0x02,
|
||||
0xd0, 0x17, 0x37, 0xc8, 0x7b, 0x50, 0x0e, 0xae, 0xdd, 0x81, 0x7e, 0x86, 0x97, 0xe5, 0xfa, 0x88,
|
||||
0xd9, 0x6f, 0xf4, 0xae, 0xdd, 0x01, 0x9e, 0xd8, 0x52, 0x20, 0xff, 0x62, 0xef, 0x43, 0x29, 0x32,
|
||||
0xd7, 0x12, 0x07, 0xbe, 0xad, 0xd7, 0x50, 0x36, 0x5a, 0xd2, 0x8a, 0x23, 0x54, 0xf6, 0x08, 0x16,
|
||||
0xd0, 0xa6, 0x1a, 0xb4, 0xaa, 0x58, 0x49, 0x89, 0xe9, 0x62, 0x18, 0xe8, 0x9f, 0xe1, 0x43, 0xb4,
|
||||
0xaf, 0x9a, 0x12, 0x6d, 0xfd, 0x19, 0xd4, 0x12, 0x6d, 0xe9, 0xba, 0x6f, 0x8d, 0x74, 0xdf, 0xb7,
|
||||
0x74, 0xdd, 0x37, 0xbe, 0x09, 0x64, 0x35, 0x5d, 0x17, 0xfe, 0x35, 0x28, 0xa9, 0xa9, 0x88, 0xf3,
|
||||
0x27, 0xcf, 0x8e, 0xd5, 0xfb, 0xec, 0x60, 0xab, 0x79, 0x8b, 0x35, 0xa0, 0xd2, 0xde, 0xc2, 0x23,
|
||||
0x8d, 0x80, 0x8c, 0x40, 0x39, 0x6a, 0xf7, 0x7a, 0x11, 0x24, 0x6b, 0xec, 0x40, 0x73, 0x76, 0xa4,
|
||||
0x82, 0x26, 0x43, 0x05, 0x93, 0x16, 0xe7, 0x18, 0x20, 0x34, 0x1b, 0x32, 0x22, 0x93, 0xf8, 0x4c,
|
||||
0x1f, 0xc6, 0xfb, 0xd0, 0x14, 0xf7, 0x9a, 0x58, 0xaa, 0x40, 0xb3, 0xdc, 0x8e, 0x84, 0x48, 0xa6,
|
||||
0x5b, 0x9d, 0x4b, 0x66, 0x85, 0x60, 0xd8, 0x95, 0xf1, 0x01, 0x2c, 0x6a, 0xd5, 0x62, 0x4d, 0x54,
|
||||
0xdc, 0x95, 0xb3, 0x9a, 0x28, 0xea, 0x1d, 0x54, 0x62, 0xac, 0xc1, 0x8a, 0xf8, 0xec, 0x5c, 0x70,
|
||||
0x37, 0xec, 0x4d, 0x4f, 0xc8, 0x55, 0xe8, 0x78, 0xae, 0xd0, 0x47, 0xca, 0x51, 0xc9, 0xcd, 0x44,
|
||||
0xbe, 0x21, 0x95, 0xd6, 0x2c, 0x92, 0xc6, 0xba, 0xd6, 0x03, 0x56, 0xdc, 0xc0, 0x7f, 0x13, 0xca,
|
||||
0x6b, 0x39, 0x02, 0x89, 0x65, 0x3d, 0xea, 0x74, 0x4c, 0xeb, 0xf0, 0x60, 0xaf, 0x7b, 0x20, 0x18,
|
||||
0xa5, 0x58, 0x56, 0x04, 0xec, 0xec, 0x20, 0x24, 0x63, 0x34, 0xa1, 0xfe, 0x94, 0x87, 0x5d, 0xf7,
|
||||
0xd4, 0x53, 0x6e, 0xb1, 0x9f, 0x15, 0xa0, 0x11, 0x81, 0x62, 0xe5, 0xf7, 0x82, 0xfb, 0x81, 0xe3,
|
||||
0xb9, 0x28, 0xc7, 0x96, 0x4d, 0xf5, 0x29, 0x6e, 0x37, 0x67, 0xc8, 0xdd, 0xd0, 0x09, 0xaf, 0xad,
|
||||
0x84, 0xa5, 0xac, 0xae, 0xc0, 0xf2, 0x16, 0x5d, 0x86, 0x82, 0x3d, 0x72, 0x6c, 0xe5, 0x61, 0xa5,
|
||||
0x0f, 0x01, 0x1d, 0x78, 0x23, 0xcf, 0x47, 0x91, 0xb5, 0x6c, 0xd2, 0x07, 0x7b, 0x0c, 0xcb, 0x42,
|
||||
0x74, 0xd6, 0xcd, 0x97, 0xc8, 0x3f, 0xc8, 0x68, 0xc7, 0xdc, 0xe9, 0xf8, 0x28, 0x36, 0x61, 0x8a,
|
||||
0x12, 0x71, 0x77, 0x8a, 0x1a, 0x52, 0x58, 0x8a, 0x2a, 0x90, 0x16, 0xb6, 0xe8, 0x4e, 0xc7, 0x6d,
|
||||
0x2c, 0x89, 0xf0, 0x9f, 0xc0, 0x8a, 0xc0, 0x8f, 0xc4, 0xab, 0xa8, 0x46, 0x03, 0x6b, 0x88, 0xc6,
|
||||
0xba, 0xb2, 0x2c, 0xaa, 0x73, 0x07, 0xca, 0x34, 0x2a, 0xb1, 0xe3, 0x05, 0x92, 0xbe, 0x71, 0x28,
|
||||
0xdc, 0x0f, 0xe6, 0x9c, 0xa1, 0x0b, 0x24, 0x08, 0xcc, 0x38, 0x43, 0x35, 0x77, 0x6a, 0x69, 0xd6,
|
||||
0x9d, 0xfa, 0x04, 0x56, 0x4e, 0x04, 0x09, 0x9e, 0x73, 0x7b, 0xc8, 0x7d, 0x2b, 0x26, 0x6c, 0xd2,
|
||||
0x32, 0x96, 0x44, 0xe1, 0x2e, 0x96, 0x45, 0xe7, 0x40, 0xc8, 0x39, 0x82, 0x2d, 0xf0, 0xa1, 0x15,
|
||||
0x7a, 0x16, 0x8a, 0x3f, 0xc8, 0x60, 0x4a, 0x66, 0x8d, 0xc0, 0x7d, 0x6f, 0x4b, 0x00, 0x93, 0x78,
|
||||
0x67, 0xbe, 0x3d, 0x39, 0x97, 0x7a, 0x40, 0x84, 0xf7, 0x54, 0x00, 0xd9, 0x6b, 0x50, 0x14, 0x24,
|
||||
0xef, 0x72, 0xf2, 0x59, 0x91, 0xa4, 0xad, 0x40, 0xec, 0x2d, 0x58, 0xc0, 0x3e, 0x82, 0x56, 0x13,
|
||||
0xe9, 0xbd, 0x1a, 0x33, 0x72, 0xc7, 0x35, 0x65, 0x99, 0x10, 0x26, 0xa7, 0xbe, 0x43, 0x5c, 0xa6,
|
||||
0x6c, 0xe2, 0xdf, 0xec, 0xfb, 0x1a, 0xcb, 0x5a, 0xc2, 0xba, 0x4a, 0x1e, 0x98, 0xa1, 0xb4, 0x9b,
|
||||
0xb8, 0xd7, 0x57, 0xca, 0x8c, 0x7e, 0x90, 0x2f, 0x55, 0x9a, 0x55, 0xe3, 0x3b, 0x50, 0xa0, 0xd5,
|
||||
0x11, 0x44, 0x88, 0x6b, 0x97, 0x91, 0x44, 0x88, 0xd0, 0x16, 0x14, 0x5d, 0x1e, 0x5e, 0x7a, 0xfe,
|
||||
0x73, 0x65, 0x4b, 0x96, 0x9f, 0xc6, 0x8f, 0xd1, 0x08, 0x12, 0x39, 0xca, 0x49, 0x9f, 0x13, 0xe4,
|
||||
0x41, 0xdb, 0x1b, 0x9c, 0xdb, 0xd2, 0x2e, 0x53, 0x42, 0x40, 0xef, 0xdc, 0x9e, 0x23, 0x8f, 0xec,
|
||||
0xbc, 0xaf, 0xfc, 0x2d, 0xa8, 0x2b, 0xd7, 0x7c, 0x60, 0x8d, 0xf8, 0x69, 0x28, 0xc9, 0xbd, 0x2a,
|
||||
0xfd, 0xf2, 0xc1, 0x1e, 0x3f, 0x0d, 0x8d, 0x7d, 0x58, 0x94, 0x04, 0x79, 0x38, 0xe1, 0xaa, 0xeb,
|
||||
0xef, 0xa6, 0xc9, 0xd3, 0x95, 0x27, 0x4b, 0xc9, 0x8b, 0x96, 0x42, 0x0e, 0x12, 0x42, 0xb6, 0xf1,
|
||||
0x31, 0x30, 0xfd, 0x1a, 0x96, 0xed, 0x49, 0xa9, 0x56, 0x99, 0xe0, 0x95, 0x27, 0x2b, 0x92, 0x9d,
|
||||
0x9d, 0xa1, 0x58, 0x9d, 0x60, 0x3a, 0x18, 0xa8, 0x90, 0x89, 0x92, 0xa9, 0x3e, 0x8d, 0x3f, 0xcd,
|
||||
0xc0, 0x12, 0x36, 0xa6, 0xf4, 0x01, 0xc9, 0x64, 0x7f, 0xee, 0x41, 0x8a, 0xfd, 0xd1, 0x65, 0x1f,
|
||||
0xfa, 0xf8, 0xf2, 0x46, 0xcf, 0xfc, 0x9c, 0xd1, 0xf3, 0xeb, 0xd0, 0x1c, 0xf2, 0x91, 0x83, 0xd1,
|
||||
0x33, 0x4a, 0x94, 0x20, 0x0d, 0xa0, 0xa1, 0xe0, 0x4a, 0x89, 0xfb, 0x47, 0x19, 0x58, 0x24, 0x49,
|
||||
0x05, 0xd5, 0x61, 0xb9, 0x50, 0x1f, 0x29, 0xfd, 0x4f, 0xb2, 0x2a, 0x39, 0xa7, 0xf8, 0x06, 0x47,
|
||||
0x28, 0x21, 0xef, 0xde, 0x92, 0x7a, 0xa1, 0x84, 0xb2, 0x0f, 0x51, 0x87, 0x71, 0x2d, 0x04, 0xa6,
|
||||
0x44, 0xe3, 0x24, 0x37, 0x65, 0xf7, 0x16, 0x2a, 0x38, 0x2e, 0x82, 0x36, 0x4b, 0x42, 0x21, 0x15,
|
||||
0x60, 0x63, 0x07, 0x6a, 0x89, 0x6e, 0x12, 0x96, 0xd9, 0x2a, 0x59, 0x66, 0xe7, 0xbc, 0x1f, 0xd9,
|
||||
0x79, 0xef, 0xc7, 0xdf, 0xca, 0x03, 0x13, 0x24, 0x35, 0xb3, 0x6b, 0x33, 0xae, 0xc3, 0xec, 0x9c,
|
||||
0xeb, 0xf0, 0x31, 0x30, 0x0d, 0x41, 0x79, 0x34, 0x73, 0x91, 0x47, 0xb3, 0x19, 0xe3, 0x4a, 0x87,
|
||||
0xe6, 0x63, 0x58, 0x96, 0x02, 0x6d, 0xe4, 0x2b, 0x44, 0x93, 0x1b, 0xed, 0x0f, 0x23, 0xc9, 0x56,
|
||||
0xf9, 0x0c, 0xd1, 0xfc, 0xa6, 0xdc, 0x86, 0x81, 0x1d, 0x4a, 0x4b, 0x15, 0xba, 0x0d, 0x7b, 0xf6,
|
||||
0x9c, 0xe9, 0x7b, 0xe1, 0xa5, 0x54, 0x50, 0x9c, 0xa3, 0x02, 0xcd, 0x70, 0x52, 0x4a, 0x1a, 0x4e,
|
||||
0x0c, 0xa8, 0x29, 0xe7, 0x20, 0xc5, 0x44, 0x90, 0xf4, 0x56, 0x91, 0x1e, 0x42, 0x8c, 0x8b, 0x78,
|
||||
0x00, 0x4d, 0x65, 0xdd, 0x88, 0x4c, 0x33, 0xe4, 0xef, 0x97, 0xc6, 0xb1, 0x2d, 0x65, 0xa0, 0x49,
|
||||
0x18, 0xc2, 0x2b, 0x33, 0x86, 0xf0, 0x77, 0x61, 0x31, 0x10, 0x44, 0x64, 0x4d, 0x5d, 0x19, 0x9c,
|
||||
0xc3, 0x87, 0xa8, 0x3a, 0x95, 0xcc, 0x26, 0x16, 0x1c, 0xc7, 0xf0, 0x79, 0xb3, 0x43, 0x6d, 0xde,
|
||||
0xec, 0xc0, 0xde, 0x8f, 0xfd, 0x68, 0xc1, 0xb9, 0x33, 0xc6, 0x8b, 0x3b, 0x0e, 0x64, 0x91, 0x0b,
|
||||
0xdc, 0x3b, 0x77, 0xc6, 0xa6, 0x72, 0xda, 0x8a, 0x0f, 0xe3, 0x3f, 0x64, 0xa0, 0x29, 0xe8, 0x20,
|
||||
0x41, 0xe7, 0xbf, 0x02, 0x78, 0x22, 0x5f, 0x91, 0xcc, 0x2b, 0x02, 0x57, 0x51, 0xf9, 0x77, 0x00,
|
||||
0xc9, 0xd6, 0x12, 0x7a, 0xa2, 0x24, 0xf2, 0x56, 0x92, 0xc8, 0x63, 0x46, 0xb6, 0x7b, 0x8b, 0x14,
|
||||
0x00, 0x01, 0x49, 0xf3, 0x5f, 0xe6, 0x53, 0xfc, 0x97, 0xda, 0x51, 0xd8, 0x05, 0x78, 0xc6, 0xaf,
|
||||
0xf7, 0xbc, 0x01, 0x6a, 0x68, 0x77, 0x01, 0x04, 0x41, 0x9e, 0xda, 0x63, 0x47, 0x5a, 0x57, 0x0a,
|
||||
0x66, 0xf9, 0x39, 0xbf, 0xde, 0x41, 0x80, 0xd8, 0x0d, 0x51, 0x1c, 0x9f, 0x87, 0x82, 0x59, 0x7a,
|
||||
0xce, 0xaf, 0xe9, 0x30, 0x58, 0x50, 0x7b, 0xc6, 0xaf, 0xb7, 0x39, 0x89, 0x6b, 0x9e, 0x2f, 0x28,
|
||||
0xc1, 0xb7, 0x2f, 0x85, 0x7c, 0x96, 0xf0, 0x3d, 0x56, 0x7c, 0xfb, 0xf2, 0x19, 0xbf, 0x56, 0x7e,
|
||||
0xd0, 0xa2, 0x28, 0x1f, 0x79, 0x03, 0x79, 0x03, 0xa9, 0x28, 0x8a, 0x78, 0x50, 0xe6, 0xc2, 0x73,
|
||||
0xfc, 0xdb, 0xf8, 0x93, 0x0c, 0xd4, 0xc4, 0xf8, 0x91, 0xc1, 0x89, 0x75, 0x57, 0xc1, 0x38, 0x99,
|
||||
0x38, 0x18, 0xe7, 0x89, 0xe4, 0x0f, 0xc4, 0x2d, 0xb3, 0x37, 0x73, 0x4b, 0x5c, 0x60, 0x62, 0x95,
|
||||
0xef, 0x41, 0x99, 0xce, 0x96, 0x38, 0xac, 0xb9, 0xc4, 0x2e, 0x25, 0x26, 0x64, 0x96, 0x10, 0xed,
|
||||
0x19, 0xf9, 0xfe, 0x35, 0x03, 0x1b, 0x2d, 0x71, 0xd9, 0x8f, 0xcc, 0x6a, 0x29, 0xdb, 0x50, 0x48,
|
||||
0x73, 0x23, 0x1f, 0x43, 0x45, 0xa3, 0x29, 0xb4, 0xc6, 0x45, 0x83, 0x27, 0x02, 0x4c, 0x12, 0x4d,
|
||||
0x62, 0xf6, 0xbb, 0xb7, 0xcc, 0xda, 0x40, 0x07, 0x6c, 0x2e, 0x40, 0x5e, 0x54, 0x32, 0x3e, 0x82,
|
||||
0x45, 0xad, 0x59, 0xd2, 0x46, 0xd3, 0xc6, 0x94, 0x49, 0x1b, 0xd3, 0x3f, 0xce, 0xc0, 0xb2, 0xac,
|
||||
0x8d, 0x81, 0x5b, 0x8e, 0xb8, 0xae, 0xf7, 0x83, 0x33, 0xf6, 0x2b, 0x50, 0x13, 0xad, 0x5b, 0x3e,
|
||||
0x3f, 0x73, 0x82, 0x90, 0x2b, 0xcf, 0x45, 0xca, 0xe1, 0x10, 0x5c, 0x5b, 0xa0, 0x9a, 0x12, 0x93,
|
||||
0x7d, 0x04, 0x15, 0xac, 0x4a, 0xfa, 0xb2, 0xdc, 0x96, 0xd6, 0x7c, 0x45, 0x1a, 0xea, 0xee, 0x2d,
|
||||
0x13, 0x82, 0xe8, 0x6b, 0xb3, 0x0c, 0xc5, 0xd0, 0x77, 0xce, 0xce, 0xb8, 0x6f, 0xac, 0x46, 0x43,
|
||||
0x13, 0x27, 0x8d, 0xf7, 0x42, 0x3e, 0x11, 0x42, 0x90, 0xf1, 0x9f, 0x32, 0x50, 0x91, 0x67, 0xe7,
|
||||
0xe7, 0x76, 0x57, 0xac, 0x6b, 0x91, 0x87, 0xa4, 0x1a, 0xc7, 0x81, 0x86, 0xef, 0x40, 0x63, 0x2c,
|
||||
0x04, 0x22, 0x21, 0xb0, 0x27, 0x7c, 0x15, 0x75, 0x05, 0x96, 0xf2, 0xc8, 0x06, 0x2c, 0xa1, 0x78,
|
||||
0x12, 0x58, 0xa1, 0x33, 0xb2, 0x54, 0xa1, 0x8c, 0xf2, 0x5b, 0xa4, 0xa2, 0xbe, 0x33, 0xda, 0x97,
|
||||
0x05, 0xe2, 0x96, 0x0e, 0x42, 0xfb, 0x8c, 0x4b, 0xd1, 0x97, 0x3e, 0x8c, 0x16, 0xac, 0xce, 0xc8,
|
||||
0xea, 0x4a, 0xcf, 0xf8, 0xef, 0x0d, 0x58, 0x9b, 0x2b, 0x92, 0xfa, 0x46, 0x64, 0xa3, 0x1f, 0x39,
|
||||
0xe3, 0x13, 0x2f, 0x32, 0x85, 0x65, 0x34, 0x1b, 0xfd, 0x9e, 0x28, 0x51, 0xa6, 0x30, 0x0e, 0x2b,
|
||||
0x8a, 0x20, 0xd0, 0x96, 0x15, 0x89, 0xf3, 0x59, 0x14, 0x36, 0xdf, 0x4b, 0x32, 0xaa, 0xd9, 0xee,
|
||||
0x14, 0x5c, 0xbf, 0xfe, 0x96, 0x26, 0x73, 0xb0, 0x80, 0x9d, 0x42, 0x2b, 0xa2, 0x3b, 0x29, 0x1f,
|
||||
0x69, 0xba, 0x89, 0xe8, 0xe9, 0x1b, 0x2f, 0xe9, 0x29, 0x61, 0x24, 0x31, 0x57, 0x15, 0xb9, 0x52,
|
||||
0x63, 0x51, 0x3f, 0x17, 0xf0, 0xba, 0xea, 0x07, 0x65, 0x9d, 0xf9, 0xde, 0xf2, 0xaf, 0x34, 0x2f,
|
||||
0x34, 0xfe, 0x24, 0xbb, 0xbc, 0x23, 0x1b, 0x8e, 0x8a, 0xf4, 0x7e, 0xcf, 0x61, 0xf5, 0xd2, 0x76,
|
||||
0x42, 0x35, 0x3f, 0x4d, 0x2d, 0x2a, 0x60, 0x7f, 0x4f, 0x5e, 0xd2, 0xdf, 0xa7, 0x54, 0x39, 0x21,
|
||||
0xfd, 0x2d, 0x5f, 0xce, 0x03, 0x83, 0xf5, 0x7f, 0x97, 0x85, 0x7a, 0xb2, 0x15, 0x71, 0xa8, 0x25,
|
||||
0x1f, 0x52, 0xf2, 0x84, 0x94, 0xc7, 0xa5, 0x89, 0xf6, 0x80, 0xe4, 0x88, 0x79, 0xe3, 0x71, 0x36,
|
||||
0xc5, 0x78, 0xac, 0xdb, 0x6c, 0x73, 0x2f, 0xf3, 0x6d, 0xe5, 0x5f, 0xc9, 0xb7, 0x55, 0x48, 0xf3,
|
||||
0x6d, 0xdd, 0xec, 0x10, 0x59, 0xf8, 0xb9, 0x1c, 0x22, 0xc5, 0x9b, 0x1d, 0x22, 0xeb, 0x7f, 0x95,
|
||||
0x01, 0x36, 0x4f, 0xa9, 0xec, 0x29, 0xd9, 0xc9, 0x5d, 0x3e, 0x92, 0x5c, 0xec, 0x9b, 0xaf, 0x46,
|
||||
0xed, 0x6a, 0x83, 0x54, 0x6d, 0xf6, 0x08, 0x96, 0xf4, 0xb8, 0x60, 0x5d, 0x55, 0xa9, 0x99, 0x4c,
|
||||
0x2f, 0x8a, 0x15, 0x5a, 0xcd, 0xb1, 0x97, 0x7f, 0xa9, 0x63, 0xaf, 0xf0, 0x52, 0xc7, 0xde, 0x42,
|
||||
0xd2, 0xb1, 0xb7, 0xfe, 0x5f, 0x32, 0xb0, 0x94, 0x42, 0x54, 0x5f, 0xdd, 0x9c, 0x05, 0x2d, 0x24,
|
||||
0x58, 0x4c, 0x56, 0xd2, 0x82, 0xce, 0x5d, 0xf6, 0xa0, 0x12, 0xfb, 0x8a, 0x54, 0xdc, 0xfc, 0xc3,
|
||||
0x97, 0x9d, 0xf4, 0xb8, 0x86, 0xa9, 0x57, 0x5f, 0xff, 0x02, 0x2a, 0x5a, 0x99, 0x58, 0x44, 0xa2,
|
||||
0x20, 0x2d, 0x9c, 0x82, 0xee, 0x70, 0xd4, 0xb3, 0xee, 0x81, 0x34, 0xe4, 0x52, 0x39, 0xd1, 0xba,
|
||||
0xbc, 0xb0, 0x11, 0x61, 0x03, 0x96, 0x94, 0x0b, 0x83, 0xc7, 0x51, 0x53, 0x92, 0xed, 0x2f, 0x4a,
|
||||
0x47, 0x06, 0x8f, 0x82, 0xb0, 0xd6, 0x7f, 0x02, 0xb5, 0x04, 0x47, 0xf8, 0xea, 0xd6, 0x72, 0x56,
|
||||
0x6b, 0xa4, 0xb1, 0xea, 0x5a, 0xe3, 0xfa, 0xff, 0xc9, 0x01, 0x9b, 0x67, 0x4a, 0xbf, 0xcc, 0x21,
|
||||
0xcc, 0xef, 0x78, 0x2e, 0x65, 0xc7, 0xff, 0x9f, 0x5d, 0x92, 0xef, 0xc2, 0xa2, 0x4c, 0xcc, 0xd0,
|
||||
0x3c, 0x3c, 0x44, 0xf5, 0xcd, 0xa8, 0x40, 0x8d, 0xe2, 0x3b, 0xb3, 0x0e, 0xe2, 0x52, 0x22, 0x16,
|
||||
0x5d, 0x93, 0x12, 0x66, 0xfc, 0xc4, 0xc7, 0xb0, 0x60, 0xbb, 0x83, 0x73, 0xcf, 0x47, 0x85, 0xa5,
|
||||
0xfe, 0xe4, 0x57, 0xbf, 0xf4, 0x3d, 0xb1, 0xd1, 0xc6, 0xfa, 0x28, 0x9a, 0x98, 0xb2, 0x31, 0xe3,
|
||||
0x3d, 0xa8, 0x68, 0x60, 0xf4, 0x7a, 0x74, 0xf7, 0x37, 0x0f, 0x9b, 0xb7, 0x58, 0x0d, 0xca, 0x66,
|
||||
0x67, 0xeb, 0xf0, 0x93, 0x8e, 0xd9, 0xd9, 0x6e, 0x66, 0x58, 0x09, 0xf2, 0x7b, 0x87, 0xbd, 0x7e,
|
||||
0x33, 0x6b, 0xac, 0x43, 0x4b, 0xb6, 0x38, 0x6f, 0x01, 0xfd, 0xdd, 0x7c, 0x64, 0x7c, 0xc0, 0x42,
|
||||
0xa9, 0x6b, 0x7c, 0x0b, 0xaa, 0xfa, 0x1d, 0x2e, 0x29, 0x62, 0xc6, 0xc9, 0x28, 0xb4, 0x0c, 0x4f,
|
||||
0x63, 0x82, 0x5b, 0x40, 0xae, 0xa3, 0x61, 0x54, 0x8d, 0x04, 0xb3, 0x17, 0xf8, 0x1a, 0x50, 0xe6,
|
||||
0x4c, 0x90, 0xe1, 0xff, 0x07, 0xf5, 0xa4, 0x39, 0x50, 0x1e, 0xf5, 0x34, 0xa1, 0x5b, 0xd4, 0x4e,
|
||||
0xd8, 0x07, 0xd9, 0xf7, 0xa1, 0x39, 0x6b, 0x4e, 0x94, 0x21, 0xbb, 0x37, 0xd4, 0x6f, 0x38, 0x49,
|
||||
0x0b, 0x23, 0xdb, 0x85, 0xe5, 0x34, 0x29, 0x06, 0xe9, 0xe3, 0x66, 0x6d, 0x8b, 0xcd, 0x4b, 0x2a,
|
||||
0xec, 0xbb, 0xd2, 0x6a, 0x5c, 0x48, 0xf3, 0xbd, 0x69, 0x8b, 0xbd, 0x41, 0xff, 0x69, 0xf6, 0xe3,
|
||||
0x0b, 0x80, 0x18, 0xc6, 0x9a, 0x50, 0x3d, 0x3c, 0xea, 0x1c, 0x58, 0x5b, 0xbb, 0xed, 0x83, 0x83,
|
||||
0xce, 0x5e, 0xf3, 0x16, 0x63, 0x50, 0x47, 0xa7, 0xd9, 0x76, 0x04, 0xcb, 0x08, 0x98, 0xb4, 0xde,
|
||||
0x2b, 0x58, 0x96, 0x2d, 0x43, 0xb3, 0x7b, 0x30, 0x03, 0xcd, 0xb1, 0x16, 0x2c, 0x1f, 0x75, 0xc8,
|
||||
0xcf, 0x96, 0x68, 0x37, 0x2f, 0x24, 0x63, 0x39, 0x5d, 0x21, 0x19, 0x53, 0x82, 0x91, 0x3c, 0x07,
|
||||
0x4a, 0x60, 0xfc, 0xbd, 0x0c, 0xac, 0xcc, 0x14, 0xc4, 0x61, 0xe3, 0x24, 0x2e, 0x26, 0x05, 0xc5,
|
||||
0x2a, 0x02, 0xd5, 0x69, 0x7a, 0x17, 0x16, 0x23, 0x0d, 0x7a, 0x86, 0xdd, 0x37, 0xa3, 0x02, 0x85,
|
||||
0xfc, 0x08, 0x96, 0x34, 0x45, 0x7c, 0x86, 0x57, 0x30, 0xad, 0x48, 0x56, 0x30, 0xd6, 0xa2, 0xf0,
|
||||
0xdc, 0x99, 0x51, 0x0f, 0x29, 0x6b, 0x49, 0x2f, 0x88, 0x8d, 0xea, 0xc9, 0xf1, 0xaa, 0x4f, 0xf6,
|
||||
0x78, 0x86, 0x10, 0x92, 0xa3, 0xd5, 0x37, 0x5c, 0x75, 0xff, 0x07, 0x0b, 0xc0, 0x3e, 0x9e, 0x72,
|
||||
0xff, 0x1a, 0xc3, 0xc2, 0x83, 0x97, 0xc5, 0x49, 0x29, 0x6d, 0x33, 0xfb, 0x4a, 0xa9, 0x1f, 0x69,
|
||||
0xa9, 0x17, 0xf9, 0x97, 0xa7, 0x5e, 0x14, 0x5e, 0x96, 0x7a, 0xf1, 0x26, 0xd4, 0x9c, 0x33, 0xd7,
|
||||
0x13, 0xac, 0x50, 0x88, 0x7c, 0x41, 0x6b, 0xe1, 0x7e, 0xee, 0x41, 0xd5, 0xac, 0x4a, 0xa0, 0x10,
|
||||
0xf8, 0x02, 0xf6, 0x51, 0x8c, 0xc4, 0x87, 0x67, 0x98, 0x26, 0xa4, 0x33, 0xc1, 0xce, 0xf0, 0x8c,
|
||||
0x4b, 0xe5, 0x1a, 0xcd, 0x4d, 0xaa, 0xb2, 0x80, 0x07, 0xec, 0x2d, 0xa8, 0x07, 0xde, 0x54, 0x48,
|
||||
0xd0, 0x6a, 0x19, 0xc8, 0xec, 0x5e, 0x25, 0xe8, 0x91, 0xf2, 0xb1, 0x2c, 0x4d, 0x03, 0x6e, 0x8d,
|
||||
0x9d, 0x20, 0x10, 0x72, 0xcf, 0xc0, 0x73, 0x43, 0xdf, 0x1b, 0x49, 0x4b, 0xfa, 0xe2, 0x34, 0xe0,
|
||||
0xfb, 0x54, 0xb2, 0x45, 0x05, 0xec, 0xdb, 0xf1, 0x90, 0x26, 0xb6, 0xe3, 0x07, 0x2d, 0xc0, 0x21,
|
||||
0xa9, 0x99, 0xa2, 0xa0, 0x6a, 0x3b, 0x7e, 0x34, 0x16, 0xf1, 0x11, 0xcc, 0xa4, 0x84, 0x54, 0x66,
|
||||
0x53, 0x42, 0x7e, 0x94, 0x9e, 0x12, 0x52, 0xc3, 0xa6, 0x1f, 0xcb, 0xa6, 0xe7, 0xb7, 0xf8, 0x4b,
|
||||
0x65, 0x86, 0xcc, 0x67, 0xba, 0xd4, 0xbf, 0x4c, 0xa6, 0x4b, 0x23, 0x2d, 0xd3, 0xe5, 0x3d, 0xa8,
|
||||
0x60, 0x0e, 0x82, 0x75, 0xee, 0x08, 0xe1, 0x88, 0x3c, 0x03, 0x4d, 0x3d, 0x49, 0x61, 0xd7, 0x71,
|
||||
0x43, 0x13, 0x7c, 0xf5, 0x67, 0x30, 0x9f, 0x74, 0xb2, 0xf8, 0x4b, 0x4c, 0x3a, 0x91, 0xb9, 0x12,
|
||||
0x1b, 0x50, 0x52, 0xfb, 0xc4, 0x18, 0xe4, 0x4f, 0x7d, 0x6f, 0xac, 0x2c, 0xa6, 0xe2, 0x6f, 0x56,
|
||||
0x87, 0x6c, 0xe8, 0xc9, 0xca, 0xd9, 0xd0, 0x33, 0x7e, 0x13, 0x2a, 0x1a, 0xa9, 0xb1, 0x37, 0xc8,
|
||||
0x36, 0x23, 0x94, 0x10, 0x29, 0xb5, 0xd1, 0x2a, 0x96, 0x25, 0xb4, 0x3b, 0x14, 0xfc, 0x66, 0xe8,
|
||||
0xf8, 0x1c, 0xd3, 0xc3, 0x2c, 0x9f, 0x5f, 0x70, 0x3f, 0x50, 0x16, 0xec, 0x66, 0x54, 0x60, 0x12,
|
||||
0xdc, 0xf8, 0x6b, 0xb0, 0x94, 0xd8, 0x5b, 0xc9, 0x22, 0xde, 0x82, 0x05, 0x5c, 0x37, 0xe5, 0x61,
|
||||
0x4c, 0x26, 0x7f, 0xc8, 0x32, 0xcc, 0xfb, 0x25, 0xe3, 0xbb, 0x35, 0xf1, 0xbd, 0x13, 0xec, 0x24,
|
||||
0x63, 0x56, 0x24, 0xec, 0xc8, 0xf7, 0x4e, 0x8c, 0x3f, 0xcf, 0x41, 0x6e, 0xd7, 0x9b, 0xe8, 0x41,
|
||||
0x35, 0x99, 0xb9, 0xa0, 0x1a, 0xa9, 0x59, 0x59, 0x91, 0xe6, 0x24, 0x85, 0x61, 0x34, 0x3b, 0x2b,
|
||||
0xed, 0xe9, 0x01, 0xd4, 0x05, 0x9f, 0x08, 0x3d, 0xa1, 0x9a, 0x5e, 0xda, 0x3e, 0x89, 0x9a, 0x39,
|
||||
0x3a, 0x7c, 0xf6, 0x38, 0xec, 0x7b, 0x3b, 0x04, 0x67, 0xcb, 0x90, 0x8b, 0xf4, 0x02, 0x2c, 0x16,
|
||||
0x9f, 0x6c, 0x15, 0x16, 0x30, 0x28, 0xf2, 0x5a, 0xba, 0xd0, 0xe4, 0x17, 0xfb, 0x26, 0x2c, 0x25,
|
||||
0xdb, 0x25, 0x56, 0x24, 0x65, 0x23, 0xbd, 0x61, 0xe4, 0x49, 0xb7, 0x41, 0xf0, 0x11, 0xc2, 0x91,
|
||||
0x9e, 0xf8, 0x53, 0xce, 0xb1, 0x48, 0x63, 0x7a, 0xa5, 0x04, 0xd3, 0xbb, 0x07, 0x95, 0x70, 0x74,
|
||||
0x61, 0x4d, 0xec, 0xeb, 0x91, 0x67, 0x0f, 0xe5, 0xf9, 0x86, 0x70, 0x74, 0x71, 0x44, 0x10, 0xf6,
|
||||
0x08, 0x60, 0x3c, 0x99, 0xc8, 0xb3, 0x87, 0x56, 0xdc, 0x98, 0x94, 0xf7, 0x8f, 0x8e, 0x88, 0xe4,
|
||||
0xcc, 0xf2, 0x78, 0x32, 0xa1, 0x3f, 0xd9, 0x36, 0xd4, 0x53, 0x53, 0xb8, 0xee, 0xaa, 0x18, 0x3e,
|
||||
0x6f, 0xb2, 0x91, 0x72, 0x38, 0x6b, 0x03, 0x1d, 0xb6, 0xfe, 0x7d, 0x60, 0xbf, 0x60, 0x22, 0x55,
|
||||
0x1f, 0xca, 0xd1, 0xf8, 0xf4, 0x3c, 0x24, 0x8c, 0xca, 0xad, 0x24, 0xf2, 0x90, 0xda, 0xc3, 0xa1,
|
||||
0x2f, 0xf8, 0x22, 0x5d, 0x98, 0x11, 0xcb, 0x07, 0xed, 0xc6, 0x6c, 0x13, 0xdf, 0x37, 0xfe, 0x32,
|
||||
0x03, 0x05, 0x4a, 0x8a, 0x7a, 0x1b, 0x1a, 0x84, 0x1f, 0x05, 0x28, 0x49, 0xc7, 0x1b, 0xdd, 0xbb,
|
||||
0x7d, 0x19, 0x9b, 0x24, 0x8e, 0x85, 0x96, 0xd0, 0x99, 0x8d, 0x76, 0x5e, 0x4b, 0xea, 0xbc, 0x07,
|
||||
0xe5, 0xa8, 0x6b, 0x8d, 0x74, 0x4a, 0xaa, 0x67, 0xf6, 0x3a, 0xe4, 0xcf, 0xbd, 0x89, 0x32, 0x71,
|
||||
0x40, 0xbc, 0x92, 0x26, 0xc2, 0xe3, 0xb1, 0x88, 0x3e, 0x68, 0xf0, 0x52, 0x35, 0x8f, 0x3a, 0x41,
|
||||
0x32, 0x98, 0x9f, 0xe3, 0x42, 0xca, 0x1c, 0x8f, 0xa1, 0x21, 0xf8, 0x80, 0xe6, 0x00, 0xbf, 0xf9,
|
||||
0xd2, 0xfc, 0xba, 0x90, 0xf0, 0x06, 0xa3, 0xe9, 0x90, 0xeb, 0x06, 0x26, 0x8c, 0x96, 0x91, 0x70,
|
||||
0x25, 0x59, 0x1b, 0x7f, 0x90, 0x21, 0xfe, 0x22, 0xda, 0x65, 0x0f, 0x20, 0x2f, 0xee, 0xb7, 0x19,
|
||||
0x03, 0x68, 0x14, 0x1e, 0x2d, 0xf0, 0x4c, 0xc4, 0xc0, 0x2c, 0xe8, 0xe9, 0x38, 0xd9, 0x7a, 0xcd,
|
||||
0xac, 0xb8, 0xd3, 0x71, 0x64, 0xa3, 0xf9, 0x9a, 0x9a, 0xd6, 0x8c, 0x7d, 0x83, 0x66, 0x1f, 0x1d,
|
||||
0xd3, 0x0d, 0x2d, 0xec, 0x26, 0x9f, 0xb8, 0x31, 0x95, 0x14, 0x38, 0x3c, 0xe3, 0x5a, 0xb8, 0xcd,
|
||||
0x1f, 0x65, 0xa1, 0x96, 0x18, 0x11, 0xc6, 0x1d, 0x89, 0x0b, 0x80, 0x8c, 0xeb, 0x72, 0xbf, 0x41,
|
||||
0x80, 0xa4, 0xa0, 0xae, 0xad, 0x53, 0x36, 0xb1, 0x4e, 0x91, 0xab, 0x3f, 0xa7, 0xbb, 0xfa, 0x1f,
|
||||
0x43, 0x39, 0x4e, 0xe4, 0x4d, 0x0e, 0x49, 0xf4, 0xa7, 0x82, 0xc4, 0x63, 0xa4, 0x38, 0x38, 0xa0,
|
||||
0xa0, 0x07, 0x07, 0x7c, 0x4f, 0xf3, 0x25, 0x2f, 0x60, 0x33, 0x46, 0xda, 0x8a, 0xfe, 0x52, 0x3c,
|
||||
0xc9, 0xc6, 0x47, 0x50, 0xd1, 0x06, 0xaf, 0xfb, 0x8c, 0x33, 0x09, 0x9f, 0x71, 0x94, 0xce, 0x91,
|
||||
0x8d, 0xd3, 0x39, 0x8c, 0xdf, 0xce, 0x42, 0x4d, 0x9c, 0x2f, 0xc7, 0x3d, 0x3b, 0xf2, 0x46, 0xce,
|
||||
0x00, 0x8d, 0xed, 0xd1, 0x09, 0x93, 0x82, 0x96, 0x3a, 0x67, 0xf2, 0x88, 0x91, 0x9c, 0xa5, 0x67,
|
||||
0xad, 0x11, 0x93, 0x8e, 0xb2, 0xd6, 0x0c, 0xa8, 0x09, 0xc6, 0x78, 0x62, 0x07, 0x5c, 0x4b, 0x33,
|
||||
0x36, 0x2b, 0xa7, 0x9c, 0x6f, 0xda, 0x01, 0x71, 0xc8, 0x6f, 0xc2, 0x92, 0xc0, 0xc1, 0x84, 0x9d,
|
||||
0xb1, 0x33, 0x1a, 0x39, 0x84, 0x49, 0x16, 0x9c, 0xe6, 0x29, 0xe7, 0xa6, 0x1d, 0xf2, 0x7d, 0x51,
|
||||
0x20, 0xb3, 0x92, 0x4b, 0x43, 0x27, 0xb0, 0x4f, 0xe2, 0xe8, 0xb0, 0xe8, 0x1b, 0x5d, 0x64, 0xf6,
|
||||
0x95, 0xe6, 0x22, 0xa3, 0xcc, 0xbd, 0xca, 0xd8, 0xbe, 0x8a, 0x5c, 0x64, 0x33, 0x94, 0x54, 0x9c,
|
||||
0xa5, 0x24, 0xe3, 0x3f, 0x66, 0xa1, 0xa2, 0x91, 0xe5, 0xab, 0xdc, 0xae, 0x77, 0xe7, 0x9c, 0x23,
|
||||
0x65, 0xdd, 0x0f, 0xf2, 0x66, 0xb2, 0x4b, 0xf4, 0xa4, 0x53, 0xfe, 0xb3, 0x46, 0xc0, 0x77, 0xa0,
|
||||
0x2c, 0x4e, 0xdd, 0x7b, 0x68, 0x6b, 0x94, 0xd9, 0xfb, 0x08, 0x38, 0x9a, 0x9e, 0xa8, 0xc2, 0x27,
|
||||
0x58, 0x58, 0x88, 0x0b, 0x9f, 0x88, 0xc2, 0x17, 0x85, 0x84, 0x7e, 0x07, 0xaa, 0xb2, 0x55, 0xdc,
|
||||
0x53, 0x9c, 0x6e, 0x7c, 0xea, 0x13, 0xfb, 0x6d, 0x56, 0xa8, 0x3b, 0xda, 0x7c, 0x59, 0xf1, 0x89,
|
||||
0xaa, 0x58, 0x7a, 0x59, 0xc5, 0x27, 0xf4, 0x61, 0xec, 0x44, 0x51, 0xb6, 0x18, 0xc5, 0xa1, 0xf8,
|
||||
0xd8, 0x23, 0x58, 0x52, 0xec, 0x6a, 0xea, 0xda, 0xae, 0xeb, 0x4d, 0xdd, 0x01, 0x57, 0x79, 0x1e,
|
||||
0x4c, 0x16, 0x1d, 0xc7, 0x25, 0xc6, 0x30, 0x4a, 0x04, 0xa4, 0x68, 0x90, 0x87, 0x50, 0x20, 0xb9,
|
||||
0x9c, 0x84, 0x8f, 0x74, 0xc6, 0x45, 0x28, 0xec, 0x01, 0x14, 0x48, 0x3c, 0xcf, 0xde, 0xc8, 0x6c,
|
||||
0x08, 0xc1, 0xd8, 0x80, 0x06, 0x8a, 0x98, 0x1a, 0xc7, 0x7d, 0x91, 0x54, 0x62, 0x2c, 0x03, 0x3b,
|
||||
0xa0, 0x43, 0xa4, 0x47, 0x29, 0xfd, 0xd7, 0x1c, 0x54, 0x34, 0xb0, 0x60, 0x8b, 0x18, 0xd7, 0x62,
|
||||
0x0d, 0x1d, 0x7b, 0xcc, 0x95, 0x4b, 0xa7, 0x66, 0xd6, 0x10, 0xba, 0x2d, 0x81, 0xe2, 0x52, 0xb0,
|
||||
0x2f, 0xce, 0x2c, 0x6f, 0x1a, 0x5a, 0x43, 0x7e, 0xe6, 0x73, 0x2e, 0x85, 0xa5, 0xaa, 0x7d, 0x71,
|
||||
0x76, 0x38, 0x0d, 0xb7, 0x11, 0x26, 0xb0, 0x04, 0x51, 0x6b, 0x58, 0x32, 0x14, 0x63, 0x6c, 0x5f,
|
||||
0xc5, 0x58, 0x32, 0x1e, 0x88, 0x96, 0x28, 0x1f, 0xc5, 0x03, 0x91, 0xda, 0x32, 0xcb, 0xc9, 0x0b,
|
||||
0xf3, 0x9c, 0xfc, 0xdb, 0xb0, 0x4a, 0x9c, 0x5c, 0xf2, 0x08, 0x6b, 0x86, 0xa4, 0x96, 0xb1, 0x54,
|
||||
0x4e, 0x52, 0x93, 0xbf, 0x9a, 0x62, 0x06, 0xea, 0x7c, 0x04, 0xce, 0x8f, 0xe9, 0x44, 0x65, 0x4c,
|
||||
0x31, 0x33, 0xd9, 0x78, 0xcf, 0xf9, 0x31, 0x17, 0x98, 0xe8, 0x6f, 0xd6, 0x31, 0x65, 0xe4, 0xf1,
|
||||
0xd8, 0x71, 0x67, 0x31, 0xed, 0xab, 0x24, 0x66, 0x59, 0x62, 0xda, 0x57, 0x3a, 0xe6, 0xfb, 0xb0,
|
||||
0x36, 0xe6, 0x43, 0xc7, 0x4e, 0x36, 0x6b, 0xc5, 0x12, 0xc4, 0x32, 0x15, 0x6b, 0x75, 0x7a, 0xa4,
|
||||
0x41, 0x8a, 0xd5, 0xf8, 0xb1, 0x37, 0x3e, 0x71, 0xe8, 0xf2, 0x24, 0x0f, 0x78, 0xde, 0xac, 0xbb,
|
||||
0xd3, 0xf1, 0x0f, 0x11, 0x2c, 0xaa, 0x04, 0x46, 0x0d, 0x2a, 0xbd, 0xd0, 0x9b, 0xa8, 0x6d, 0xae,
|
||||
0x43, 0x95, 0x3e, 0x65, 0x16, 0xcf, 0x1d, 0xb8, 0x8d, 0xb4, 0xd9, 0xf7, 0x26, 0xde, 0xc8, 0x3b,
|
||||
0xbb, 0x4e, 0x18, 0x94, 0xfe, 0x73, 0x06, 0x96, 0x12, 0xa5, 0xf2, 0x9c, 0x7f, 0x9b, 0x0e, 0x56,
|
||||
0x94, 0x8a, 0x41, 0xe4, 0xbc, 0xa8, 0x5d, 0x3e, 0x84, 0x48, 0xa7, 0x4a, 0xa5, 0x67, 0xb4, 0xe3,
|
||||
0x14, 0x62, 0x55, 0x91, 0x68, 0xbb, 0x35, 0x4f, 0xdb, 0xb2, 0xbe, 0x4a, 0x2e, 0x56, 0x4d, 0xfc,
|
||||
0xaa, 0x8c, 0x0e, 0x1f, 0xca, 0x29, 0xe7, 0x92, 0xf1, 0xaf, 0xba, 0xf1, 0x49, 0x8d, 0x20, 0xb6,
|
||||
0x48, 0x05, 0xc6, 0xbf, 0xc8, 0x00, 0xc4, 0xa3, 0xc3, 0x08, 0xdc, 0xe8, 0x02, 0xa5, 0xd7, 0x79,
|
||||
0xb4, 0xcb, 0xf2, 0x0d, 0xa8, 0x46, 0x81, 0x78, 0xf1, 0x95, 0x5c, 0x51, 0x30, 0x71, 0x2f, 0xbf,
|
||||
0x03, 0x8d, 0xb3, 0x91, 0x77, 0x82, 0xa2, 0x93, 0xbc, 0x40, 0x29, 0x97, 0xa9, 0x4e, 0x60, 0x75,
|
||||
0x2d, 0xc6, 0x17, 0x78, 0x3e, 0x35, 0x56, 0x4f, 0xbf, 0x8e, 0x8d, 0xdf, 0xc9, 0x46, 0x11, 0x49,
|
||||
0xf1, 0x4a, 0xbc, 0x58, 0xcf, 0xf8, 0x79, 0x1c, 0xdb, 0x2f, 0x72, 0xe8, 0x7c, 0x04, 0x75, 0x9f,
|
||||
0xb8, 0xa3, 0x62, 0x9d, 0xf9, 0x17, 0xb0, 0xce, 0x9a, 0x9f, 0xb8, 0x72, 0xbf, 0x0e, 0x4d, 0x7b,
|
||||
0x78, 0xc1, 0xfd, 0xd0, 0x41, 0xb3, 0x31, 0x0a, 0x6a, 0x32, 0x06, 0x48, 0x83, 0xa3, 0x44, 0xf4,
|
||||
0x0e, 0x34, 0x64, 0x66, 0x59, 0x84, 0x29, 0xdf, 0xaa, 0x88, 0xc1, 0x02, 0xd1, 0xf8, 0xd7, 0x2a,
|
||||
0x04, 0x2a, 0xb9, 0xbb, 0x2f, 0x5e, 0x15, 0x7d, 0x86, 0xd9, 0x79, 0x97, 0x95, 0x24, 0x24, 0x69,
|
||||
0x8d, 0x96, 0xfc, 0x88, 0x80, 0xd2, 0x16, 0x9d, 0x5c, 0xd6, 0xfc, 0xab, 0x2c, 0xab, 0xf1, 0x27,
|
||||
0x19, 0x28, 0xee, 0x7a, 0x13, 0xa1, 0x97, 0x0b, 0x79, 0x0e, 0x8f, 0x49, 0xe4, 0x86, 0x58, 0x10,
|
||||
0x9f, 0xdd, 0xe1, 0x8b, 0x33, 0x31, 0x52, 0xe5, 0x8d, 0x5a, 0x52, 0xde, 0xf8, 0x1e, 0xdc, 0x41,
|
||||
0x27, 0x8f, 0xef, 0x4d, 0x3c, 0x5f, 0x1c, 0x55, 0x7b, 0x44, 0x72, 0x87, 0xe7, 0x86, 0xe7, 0x8a,
|
||||
0x77, 0xde, 0x3e, 0xe5, 0xfc, 0x48, 0xc3, 0xd8, 0x8f, 0x10, 0x30, 0x45, 0x69, 0x14, 0x5e, 0x58,
|
||||
0xa4, 0x2a, 0x4a, 0xc1, 0x88, 0x38, 0x6a, 0x43, 0x14, 0x74, 0x10, 0x8e, 0xa2, 0x91, 0xf1, 0x5d,
|
||||
0x28, 0x47, 0x56, 0x07, 0xf6, 0x2e, 0x94, 0xcf, 0xbd, 0x89, 0x34, 0x4d, 0x64, 0x12, 0xd9, 0x2a,
|
||||
0x72, 0xd6, 0x66, 0xe9, 0x9c, 0xfe, 0x08, 0x8c, 0x3f, 0x2f, 0x42, 0xb1, 0xeb, 0x5e, 0x78, 0xce,
|
||||
0x00, 0x83, 0xa8, 0xc6, 0x7c, 0xec, 0xa9, 0xf4, 0x56, 0xf1, 0x37, 0x06, 0x4a, 0xc4, 0x2f, 0x4e,
|
||||
0xe4, 0x64, 0xa0, 0x44, 0xf4, 0xd6, 0xc4, 0x0a, 0x2c, 0xf8, 0xfa, 0x93, 0x11, 0x05, 0x1f, 0xc3,
|
||||
0x3a, 0x23, 0xa5, 0xad, 0xa0, 0xa5, 0x07, 0x8b, 0xb6, 0xe8, 0x29, 0x03, 0x5c, 0x32, 0x4a, 0x37,
|
||||
0x2a, 0x23, 0x04, 0x17, 0xec, 0x35, 0x28, 0xca, 0xe4, 0x10, 0x0a, 0xb5, 0xa7, 0x38, 0x4c, 0x09,
|
||||
0x42, 0x6a, 0xf0, 0x39, 0x39, 0xe9, 0x22, 0x89, 0x4a, 0xe8, 0xe9, 0x12, 0xb8, 0x2d, 0x68, 0xed,
|
||||
0x1e, 0x54, 0x08, 0x9f, 0x50, 0x4a, 0x32, 0xec, 0x09, 0x41, 0x88, 0x90, 0xf2, 0xf2, 0x4a, 0x39,
|
||||
0xf5, 0xe5, 0x15, 0x8c, 0x92, 0x8b, 0xb8, 0x2c, 0x4d, 0x11, 0xe8, 0xbd, 0x0d, 0x0d, 0xae, 0x9e,
|
||||
0x1d, 0x92, 0xca, 0x3d, 0x65, 0xdf, 0x29, 0xe5, 0xfe, 0x4d, 0xa8, 0x9d, 0xda, 0xa3, 0xd1, 0x89,
|
||||
0x3d, 0x78, 0x4e, 0x3a, 0x69, 0x95, 0xcc, 0x70, 0x0a, 0x88, 0x4a, 0xe9, 0x3d, 0xa8, 0x68, 0xbb,
|
||||
0x8c, 0x31, 0x4d, 0x79, 0x13, 0xe2, 0xfd, 0x9d, 0x35, 0x35, 0xd5, 0x5f, 0xc1, 0xd4, 0xa4, 0xc5,
|
||||
0x76, 0x35, 0x92, 0xb1, 0x5d, 0x77, 0x90, 0x9b, 0xca, 0xf8, 0x9f, 0x26, 0x3d, 0xee, 0x60, 0x0f,
|
||||
0x87, 0x18, 0xff, 0x43, 0x2f, 0xa9, 0xe1, 0xe2, 0x51, 0xf9, 0x22, 0x09, 0xb5, 0x04, 0x23, 0x94,
|
||||
0xbb, 0x64, 0x2f, 0x9d, 0xd8, 0xce, 0x10, 0x63, 0x69, 0x49, 0x8d, 0x2d, 0xda, 0xe3, 0xf0, 0xc8,
|
||||
0x76, 0x86, 0xec, 0x3e, 0x54, 0x55, 0x31, 0xde, 0x8e, 0x4b, 0xb4, 0xfe, 0xb2, 0x58, 0xdc, 0x89,
|
||||
0x06, 0xd4, 0x22, 0x8c, 0x71, 0x9c, 0x42, 0x57, 0x91, 0x28, 0x48, 0x07, 0xef, 0x61, 0x4c, 0x45,
|
||||
0xc8, 0x31, 0x51, 0xae, 0xfe, 0xe4, 0x8e, 0x9c, 0xab, 0xa4, 0x52, 0xf5, 0x3f, 0x79, 0x69, 0x08,
|
||||
0x53, 0x08, 0x62, 0xe4, 0x2c, 0x5a, 0x4d, 0x08, 0x62, 0x12, 0x15, 0x9d, 0x45, 0x84, 0xc0, 0xbe,
|
||||
0xab, 0x29, 0x52, 0x2d, 0x44, 0x7e, 0x6d, 0xa6, 0xfd, 0x9b, 0x52, 0x09, 0xee, 0x02, 0x38, 0x81,
|
||||
0xb8, 0x65, 0x02, 0xee, 0x0e, 0x31, 0xe7, 0xad, 0x64, 0x96, 0x9d, 0xe0, 0x19, 0x01, 0xbe, 0x5a,
|
||||
0x0d, 0xab, 0x0d, 0x55, 0x7d, 0x9a, 0xac, 0x04, 0xf9, 0xc3, 0xa3, 0xce, 0x41, 0xf3, 0x16, 0xab,
|
||||
0x40, 0xb1, 0xd7, 0xe9, 0xf7, 0xf7, 0xd0, 0xe5, 0x54, 0x85, 0x52, 0x94, 0xb9, 0x93, 0x15, 0x5f,
|
||||
0xed, 0xad, 0xad, 0xce, 0x51, 0xbf, 0xb3, 0xdd, 0xcc, 0xfd, 0x20, 0x5f, 0xca, 0x36, 0x73, 0xc6,
|
||||
0x5f, 0xe4, 0xa0, 0xa2, 0xad, 0xc2, 0x8b, 0x99, 0xf1, 0x5d, 0x00, 0x54, 0x69, 0xe2, 0xf0, 0xb0,
|
||||
0xbc, 0x59, 0x16, 0x10, 0xda, 0x7c, 0xdd, 0x58, 0x9e, 0xa3, 0x57, 0x43, 0x94, 0xb1, 0xfc, 0x4d,
|
||||
0xa8, 0xd1, 0x03, 0x1c, 0xba, 0xe3, 0xb0, 0x60, 0x56, 0x09, 0x28, 0x59, 0x35, 0xa6, 0xfe, 0x21,
|
||||
0x12, 0x26, 0x85, 0xc8, 0x74, 0x7c, 0x02, 0x61, 0x5a, 0x08, 0xe6, 0xf4, 0x04, 0xde, 0xe8, 0x82,
|
||||
0x13, 0x06, 0x49, 0x84, 0x15, 0x09, 0xeb, 0xcb, 0xdc, 0x43, 0xc9, 0x0f, 0xb5, 0xdc, 0xb3, 0x82,
|
||||
0x59, 0x25, 0xa0, 0xec, 0xe8, 0x9b, 0x8a, 0x80, 0x4a, 0x48, 0x40, 0x6b, 0xf3, 0xd4, 0x90, 0x20,
|
||||
0x9e, 0xbd, 0x39, 0x7b, 0x56, 0x19, 0x09, 0xe3, 0x6b, 0xf3, 0xf5, 0x5e, 0x6e, 0xd7, 0x62, 0xef,
|
||||
0x02, 0x1b, 0x4f, 0x26, 0x56, 0x8a, 0xa5, 0x29, 0x6f, 0x36, 0xc6, 0x93, 0x49, 0x5f, 0x33, 0xc4,
|
||||
0x7c, 0x05, 0x46, 0xb0, 0xcf, 0x81, 0xb5, 0xc5, 0x01, 0xc6, 0x21, 0x46, 0x26, 0xd4, 0x98, 0x2d,
|
||||
0x67, 0x74, 0xb6, 0x9c, 0xc2, 0xfd, 0xb2, 0xa9, 0xdc, 0xef, 0x45, 0x7c, 0xc2, 0xd8, 0x81, 0xca,
|
||||
0x91, 0xf6, 0xbc, 0xcf, 0x7d, 0x71, 0x43, 0xa8, 0x87, 0x7d, 0xe8, 0xee, 0x20, 0xe3, 0x96, 0x2f,
|
||||
0xdf, 0xf3, 0xd1, 0x46, 0x93, 0xd5, 0x46, 0x63, 0xfc, 0xf3, 0x0c, 0x3d, 0x9d, 0x10, 0x0d, 0x3e,
|
||||
0x7e, 0x51, 0x48, 0xf9, 0x81, 0xe2, 0x14, 0xd1, 0x8a, 0xf2, 0xff, 0xc8, 0xec, 0x4e, 0x1c, 0x9a,
|
||||
0xe5, 0x9d, 0x9e, 0x06, 0x5c, 0x25, 0x3b, 0x55, 0x10, 0x76, 0x88, 0x20, 0x25, 0x7c, 0x0b, 0x09,
|
||||
0xdf, 0xa1, 0xf6, 0x03, 0x99, 0xf4, 0x24, 0x84, 0xef, 0x7d, 0xfb, 0x4a, 0xf6, 0x1a, 0x08, 0x11,
|
||||
0x44, 0x1a, 0xaa, 0x55, 0x8a, 0x57, 0xf4, 0x6d, 0xfc, 0x13, 0x99, 0xc5, 0x3a, 0xbb, 0xbe, 0x0f,
|
||||
0xa1, 0x14, 0xb5, 0x9a, 0xbc, 0x61, 0x15, 0x66, 0x54, 0x2e, 0xee, 0x71, 0xd4, 0xca, 0x13, 0x23,
|
||||
0xa6, 0xc3, 0x85, 0xce, 0x86, 0xae, 0x36, 0xea, 0x6f, 0x00, 0x3b, 0x75, 0xfc, 0x59, 0x64, 0x3a,
|
||||
0x6c, 0x4d, 0x2c, 0xd1, 0xb0, 0x8d, 0x63, 0x58, 0x52, 0x5c, 0x42, 0xd3, 0x08, 0x92, 0x9b, 0x97,
|
||||
0x79, 0x09, 0x93, 0xcf, 0xce, 0x31, 0x79, 0xe3, 0xa7, 0x79, 0x28, 0xaa, 0xa7, 0xb2, 0xd2, 0x9e,
|
||||
0x77, 0x2a, 0x27, 0x9f, 0x77, 0x6a, 0x25, 0x9e, 0x02, 0xc1, 0xad, 0x97, 0xf7, 0xfd, 0x3b, 0xb3,
|
||||
0x57, 0xb6, 0x66, 0x34, 0x4f, 0x5c, 0xdb, 0xab, 0x90, 0x9f, 0xd8, 0xe1, 0x39, 0x1a, 0xc8, 0x88,
|
||||
0x78, 0xf0, 0x5b, 0x19, 0xd3, 0x0b, 0x49, 0x63, 0x7a, 0xda, 0x53, 0x58, 0x24, 0x92, 0xce, 0x3d,
|
||||
0x85, 0x75, 0x07, 0x48, 0xbe, 0xd0, 0xc2, 0x8c, 0x4a, 0x08, 0x10, 0x77, 0x51, 0x52, 0x1c, 0x29,
|
||||
0xcd, 0x8a, 0x23, 0xaf, 0x2c, 0x2a, 0x7c, 0x1b, 0x16, 0x28, 0x8d, 0x5c, 0xa6, 0xb2, 0xa9, 0x0b,
|
||||
0x45, 0xae, 0xa1, 0xfa, 0x9f, 0x62, 0x8b, 0x4d, 0x89, 0xab, 0xbf, 0x2b, 0x53, 0x49, 0xbc, 0x2b,
|
||||
0xa3, 0x1b, 0xf9, 0xab, 0x49, 0x23, 0xff, 0x03, 0x68, 0x46, 0x0b, 0x8a, 0x26, 0x33, 0x37, 0x90,
|
||||
0x89, 0x32, 0x75, 0x05, 0x17, 0x5c, 0xf2, 0x20, 0x88, 0x2f, 0xc4, 0x7a, 0xe2, 0x42, 0x14, 0x3c,
|
||||
0xac, 0x1d, 0x86, 0x7c, 0x3c, 0x09, 0xe5, 0x85, 0x88, 0xa1, 0xf4, 0xfa, 0x00, 0x93, 0x49, 0x9e,
|
||||
0x35, 0x28, 0x77, 0x0f, 0xac, 0x9d, 0xbd, 0xee, 0xd3, 0xdd, 0x7e, 0x33, 0x23, 0x3e, 0x7b, 0xc7,
|
||||
0x5b, 0x5b, 0x9d, 0xce, 0x36, 0xde, 0x38, 0x00, 0x0b, 0x3b, 0xed, 0xae, 0xb8, 0x7d, 0x72, 0xc6,
|
||||
0xef, 0x65, 0xa1, 0xa2, 0x35, 0xcf, 0xde, 0x8f, 0x56, 0x85, 0x9e, 0x1e, 0xb9, 0x3b, 0x3f, 0x84,
|
||||
0x0d, 0xc5, 0x8a, 0xb5, 0x65, 0x89, 0x1e, 0xfe, 0xca, 0xde, 0xf8, 0xf0, 0x17, 0x7b, 0x1b, 0x1a,
|
||||
0x36, 0xb5, 0x10, 0xad, 0x82, 0x34, 0x07, 0x4b, 0xb0, 0x5c, 0x04, 0x0c, 0xae, 0x8b, 0xef, 0x13,
|
||||
0x81, 0x97, 0x57, 0xf1, 0x6c, 0xd1, 0x95, 0x82, 0x8b, 0x55, 0x3c, 0xb5, 0x9d, 0xd1, 0xd4, 0xe7,
|
||||
0xd2, 0x7d, 0x1b, 0xdd, 0xcc, 0x04, 0x35, 0x55, 0xb1, 0xf1, 0x01, 0x40, 0x3c, 0xe6, 0xe4, 0xe2,
|
||||
0xdc, 0x4a, 0x2e, 0x4e, 0x46, 0x5b, 0x9c, 0xac, 0xb1, 0x4d, 0x6c, 0x44, 0x2e, 0x74, 0xe4, 0xa9,
|
||||
0xfe, 0x26, 0x28, 0x8b, 0x94, 0x85, 0xe1, 0xad, 0x93, 0x11, 0x0f, 0x55, 0x3a, 0xec, 0xa2, 0x2c,
|
||||
0xe9, 0x46, 0x05, 0x2a, 0x3b, 0x3d, 0x6e, 0x25, 0xe6, 0x46, 0x92, 0x24, 0x67, 0xb9, 0x91, 0x44,
|
||||
0x35, 0xa3, 0x72, 0x63, 0x1d, 0x5a, 0xdb, 0x5c, 0xb4, 0xd6, 0x1e, 0x8d, 0x66, 0x86, 0x63, 0xdc,
|
||||
0x81, 0xdb, 0x29, 0x65, 0xd2, 0x08, 0xf1, 0x31, 0xac, 0xb4, 0x29, 0xf3, 0xf5, 0xab, 0x4a, 0x71,
|
||||
0x31, 0x5a, 0xb0, 0x3a, 0xdb, 0xa4, 0xec, 0x6c, 0x07, 0x16, 0xb7, 0xf9, 0xc9, 0xf4, 0x6c, 0x8f,
|
||||
0x5f, 0xc4, 0x1d, 0x31, 0xc8, 0x07, 0xe7, 0xde, 0xa5, 0x5c, 0x1f, 0xfc, 0x1b, 0x03, 0xc9, 0x04,
|
||||
0x8e, 0x15, 0x4c, 0xf8, 0x40, 0x59, 0x44, 0x11, 0xd2, 0x9b, 0xf0, 0x81, 0xf1, 0x3e, 0x30, 0xbd,
|
||||
0x1d, 0xb9, 0x5e, 0x42, 0x4b, 0x98, 0x9e, 0x58, 0xc1, 0x75, 0x10, 0xf2, 0xb1, 0x7a, 0xd9, 0x06,
|
||||
0x82, 0xe9, 0x49, 0x8f, 0x20, 0xc6, 0x3b, 0x50, 0x3d, 0xb2, 0xaf, 0x4d, 0xfe, 0xb9, 0x4c, 0xde,
|
||||
0x58, 0x83, 0xe2, 0xc4, 0xbe, 0x16, 0x6c, 0x20, 0x72, 0x8e, 0x60, 0xb1, 0xf1, 0x87, 0x79, 0x58,
|
||||
0x20, 0x4c, 0x76, 0x9f, 0x1e, 0x9f, 0x74, 0x5c, 0x3c, 0x86, 0x8a, 0x51, 0x6a, 0xa0, 0x39, 0x5e,
|
||||
0x9a, 0x9d, 0xe7, 0xa5, 0xd2, 0x80, 0xa6, 0x1e, 0xdd, 0x50, 0x66, 0x6c, 0x77, 0x3a, 0x56, 0x2f,
|
||||
0x6d, 0x24, 0xd3, 0x3f, 0xf3, 0xf1, 0xe3, 0xa2, 0x94, 0x1b, 0x97, 0x74, 0x34, 0xc6, 0xba, 0x08,
|
||||
0x8d, 0x4e, 0x5d, 0x11, 0x92, 0x5d, 0xea, 0xa0, 0x54, 0x85, 0xa7, 0xa8, 0xd2, 0x82, 0x92, 0x0a,
|
||||
0xcf, 0x9c, 0x62, 0x53, 0x7a, 0xb9, 0x62, 0x43, 0x96, 0xb5, 0x17, 0x28, 0x36, 0xf0, 0x0a, 0x8a,
|
||||
0xcd, 0x2b, 0x38, 0xf9, 0x6e, 0x43, 0x09, 0xef, 0x7d, 0x8d, 0x7b, 0x8a, 0xfb, 0x5e, 0x70, 0xcf,
|
||||
0xef, 0x68, 0xa2, 0x3f, 0x45, 0x18, 0xdc, 0x89, 0x8f, 0x89, 0xc9, 0x3f, 0xff, 0xe5, 0x38, 0x4f,
|
||||
0x3e, 0x83, 0xa2, 0x84, 0x0a, 0x82, 0x76, 0xed, 0xb1, 0x7a, 0xb7, 0x08, 0xff, 0x16, 0xcb, 0x86,
|
||||
0x8f, 0xad, 0x7c, 0x3e, 0x75, 0x7c, 0x3e, 0x54, 0x2f, 0x5b, 0x38, 0x78, 0x46, 0x05, 0x44, 0x4c,
|
||||
0x50, 0xa8, 0x21, 0xae, 0x77, 0xe9, 0xca, 0xbc, 0xf6, 0xa2, 0x13, 0x3c, 0x13, 0x9f, 0x06, 0x83,
|
||||
0x26, 0xbe, 0x5c, 0x36, 0xf1, 0x7c, 0x75, 0x39, 0x19, 0x3f, 0xcd, 0x40, 0x53, 0x9e, 0xae, 0xa8,
|
||||
0x4c, 0xd7, 0x02, 0x0a, 0x37, 0x39, 0xc4, 0x5f, 0xfc, 0x4e, 0x85, 0x01, 0x35, 0x34, 0x7e, 0x44,
|
||||
0x37, 0x15, 0x19, 0x6f, 0x2a, 0x02, 0xb8, 0x23, 0x6f, 0xab, 0xd7, 0xa1, 0xa2, 0xa2, 0x5c, 0xc7,
|
||||
0xce, 0x48, 0xbd, 0x23, 0x4c, 0x61, 0xae, 0xfb, 0xce, 0x48, 0x5d, 0x74, 0xbe, 0x2d, 0xd3, 0xd4,
|
||||
0x32, 0x78, 0xd1, 0x99, 0x76, 0xc8, 0x8d, 0x7f, 0x9f, 0x81, 0x45, 0x6d, 0x2a, 0xf2, 0xdc, 0x7e,
|
||||
0x08, 0xd5, 0xe8, 0xc9, 0x40, 0x1e, 0x49, 0x5e, 0x6b, 0x49, 0x46, 0x13, 0x57, 0xab, 0x0c, 0x22,
|
||||
0x48, 0x20, 0x06, 0x33, 0xb4, 0xaf, 0x71, 0xbc, 0xc1, 0x74, 0xac, 0x94, 0x9b, 0xa1, 0x7d, 0xbd,
|
||||
0xc3, 0x79, 0x6f, 0x3a, 0x16, 0xaa, 0xeb, 0x25, 0xe7, 0xcf, 0x23, 0x04, 0x92, 0xb9, 0x40, 0xc0,
|
||||
0x24, 0x86, 0x01, 0xb5, 0xb1, 0xe7, 0x86, 0xe7, 0x11, 0x8a, 0x94, 0x3a, 0x11, 0x48, 0x38, 0xc6,
|
||||
0x9f, 0x65, 0x61, 0x89, 0x4c, 0x6c, 0xd2, 0xb4, 0x29, 0x59, 0x57, 0x0b, 0x16, 0xc8, 0xda, 0x48,
|
||||
0xcc, 0x6b, 0xf7, 0x96, 0x29, 0xbf, 0xd9, 0xb7, 0x5f, 0xd1, 0x2c, 0xa8, 0x32, 0xe1, 0x6e, 0x58,
|
||||
0xfe, 0xdc, 0xfc, 0xf2, 0xdf, 0xbc, 0xbc, 0x69, 0x1e, 0xb7, 0x42, 0x9a, 0xc7, 0xed, 0x55, 0xfc,
|
||||
0x5c, 0x73, 0xe9, 0x62, 0x45, 0x89, 0xa3, 0xa5, 0x8b, 0xbd, 0x0f, 0x6b, 0x09, 0x1c, 0xe4, 0xd6,
|
||||
0xce, 0xa9, 0xc3, 0xd5, 0xb3, 0x01, 0xcb, 0x1a, 0x76, 0x4f, 0x95, 0x6d, 0x16, 0xa1, 0x10, 0x0c,
|
||||
0xbc, 0x09, 0x37, 0x56, 0x61, 0x39, 0xb9, 0xaa, 0xf2, 0x9a, 0xf8, 0xfd, 0x0c, 0xb4, 0x64, 0x7c,
|
||||
0x84, 0xe3, 0x9e, 0xed, 0x3a, 0x41, 0xe8, 0xf9, 0xd1, 0xd3, 0x7a, 0x77, 0x01, 0x82, 0xd0, 0xf6,
|
||||
0xa5, 0xb6, 0x29, 0x13, 0xe5, 0x11, 0x82, 0x9a, 0xe4, 0x6d, 0x28, 0x71, 0x77, 0x48, 0x85, 0x44,
|
||||
0x0d, 0x45, 0xee, 0x0e, 0x95, 0x1e, 0x3a, 0x27, 0x7f, 0xd7, 0x92, 0xea, 0x85, 0xcc, 0x5b, 0x15,
|
||||
0xab, 0xc3, 0x2f, 0xf0, 0xe2, 0xcd, 0x47, 0x79, 0xab, 0xfb, 0xf6, 0x15, 0x46, 0x1b, 0x06, 0xc6,
|
||||
0x3f, 0xcc, 0x42, 0x23, 0x1e, 0x1f, 0x25, 0xbd, 0xbf, 0x38, 0x7d, 0xff, 0xbe, 0x24, 0x07, 0x47,
|
||||
0xc8, 0xef, 0x9a, 0xe1, 0xb1, 0x44, 0x87, 0xb3, 0xeb, 0x32, 0x03, 0x2a, 0x0a, 0xc3, 0x9b, 0x86,
|
||||
0xda, 0x0b, 0x57, 0x65, 0x42, 0x39, 0x9c, 0x86, 0x42, 0xe1, 0x12, 0x9a, 0xa7, 0xe3, 0x4a, 0x95,
|
||||
0xa7, 0x60, 0x8f, 0xc3, 0x2e, 0x3e, 0x9c, 0x2d, 0xc0, 0xa2, 0x1a, 0x6d, 0xa4, 0xc0, 0x12, 0xf8,
|
||||
0x4d, 0x92, 0xb3, 0x69, 0xe7, 0x50, 0xc6, 0xd6, 0x85, 0x50, 0x7a, 0x43, 0x34, 0x12, 0x42, 0x5f,
|
||||
0x87, 0x0a, 0x35, 0x1e, 0x67, 0x07, 0xe6, 0xcd, 0x32, 0xf6, 0x80, 0xe5, 0xd2, 0x08, 0xe4, 0x4d,
|
||||
0x13, 0xaa, 0x2f, 0x50, 0x57, 0x18, 0x7e, 0xf0, 0x77, 0x33, 0x70, 0x3b, 0x65, 0xdb, 0xe4, 0x29,
|
||||
0xdf, 0x82, 0xc5, 0xd3, 0xa8, 0x50, 0xad, 0x2e, 0x1d, 0xf5, 0x55, 0xc5, 0x56, 0x93, 0x6b, 0x6a,
|
||||
0x36, 0x4f, 0x93, 0x80, 0x58, 0xe9, 0xa2, 0x1d, 0x4c, 0x24, 0x80, 0xa2, 0xd2, 0x45, 0xdb, 0x48,
|
||||
0xfa, 0xce, 0x11, 0xac, 0x77, 0xae, 0x04, 0xc7, 0xd8, 0xd2, 0x5f, 0x7e, 0x57, 0x64, 0x94, 0x34,
|
||||
0x30, 0x67, 0x5e, 0xc9, 0xc0, 0x3c, 0xa4, 0x3c, 0xb7, 0xa8, 0xad, 0x9f, 0xa7, 0x11, 0xbc, 0x40,
|
||||
0x45, 0x1d, 0x7a, 0xb9, 0x5e, 0x25, 0xa1, 0x0e, 0xa2, 0x17, 0xeb, 0x8d, 0x00, 0x1a, 0xfb, 0xd3,
|
||||
0x51, 0xe8, 0xc4, 0x8f, 0xd8, 0xb3, 0x6f, 0xcb, 0x3a, 0xd8, 0x8f, 0x5a, 0xb5, 0xd4, 0x8e, 0x20,
|
||||
0xea, 0x08, 0x17, 0x6b, 0x2c, 0x1a, 0xb2, 0xe6, 0xfb, 0x6b, 0x8c, 0x93, 0x3d, 0x18, 0xb7, 0x61,
|
||||
0x2d, 0xfe, 0xa2, 0x65, 0x53, 0x57, 0xcd, 0x3f, 0xcb, 0x50, 0x68, 0x73, 0xf2, 0x41, 0x7d, 0xd6,
|
||||
0x81, 0xa5, 0xc0, 0x71, 0xcf, 0x46, 0x5c, 0x6f, 0x3e, 0x90, 0x8b, 0xb0, 0x92, 0x1c, 0x9b, 0x7c,
|
||||
0x74, 0xdf, 0x5c, 0xa4, 0x1a, 0x71, 0x6b, 0x01, 0xdb, 0xbc, 0x69, 0x90, 0x31, 0x59, 0xcc, 0xac,
|
||||
0xc6, 0xfc, 0xe0, 0xbb, 0x50, 0x4f, 0x76, 0xc4, 0xbe, 0x23, 0x73, 0x3c, 0xe3, 0x51, 0xe5, 0x66,
|
||||
0xd2, 0xf5, 0x62, 0x82, 0xa8, 0xc4, 0x6b, 0x1f, 0x18, 0x7f, 0x3f, 0x03, 0x2d, 0x93, 0x0b, 0xca,
|
||||
0xd5, 0x46, 0xa9, 0x68, 0xe6, 0xc3, 0xb9, 0x56, 0x6f, 0x9e, 0xab, 0x4a, 0x1d, 0x55, 0x23, 0xfa,
|
||||
0xc6, 0x8d, 0x9b, 0xb1, 0x7b, 0x6b, 0x6e, 0x46, 0x9b, 0x25, 0x58, 0x20, 0x14, 0x63, 0x0d, 0x56,
|
||||
0xe4, 0x78, 0xd4, 0x58, 0x62, 0xef, 0x61, 0xa2, 0xc7, 0x84, 0xf7, 0x70, 0x1d, 0x5a, 0xf4, 0x42,
|
||||
0xa2, 0x3e, 0x09, 0x59, 0x71, 0x1b, 0xd8, 0xbe, 0x3d, 0xb0, 0x7d, 0xcf, 0x73, 0x8f, 0xb8, 0x2f,
|
||||
0x03, 0x45, 0x51, 0xc2, 0x44, 0xe7, 0x9a, 0x12, 0x85, 0xe9, 0x4b, 0xbd, 0xeb, 0xe7, 0xb9, 0x2a,
|
||||
0x2e, 0x86, 0xbe, 0x0c, 0x13, 0x96, 0x36, 0xed, 0xe7, 0x5c, 0xb5, 0xa4, 0x96, 0xe8, 0x23, 0xa8,
|
||||
0x4c, 0xa2, 0x46, 0xd5, 0xba, 0xab, 0x44, 0xf0, 0xf9, 0x6e, 0x4d, 0x1d, 0xdb, 0x78, 0x02, 0xcb,
|
||||
0xc9, 0x36, 0x25, 0xeb, 0x58, 0x87, 0xd2, 0x58, 0xc2, 0xe4, 0xe8, 0xa2, 0x6f, 0xe3, 0x77, 0x4b,
|
||||
0x50, 0x94, 0xfa, 0x1c, 0xdb, 0x80, 0xfc, 0x40, 0xc5, 0x26, 0xc5, 0xef, 0x8b, 0xc8, 0x52, 0xf5,
|
||||
0xff, 0x16, 0x46, 0x28, 0x09, 0x3c, 0xf6, 0x11, 0xd4, 0x93, 0x5e, 0xd1, 0x99, 0x2c, 0xd3, 0xa4,
|
||||
0x3b, 0xb3, 0x36, 0x98, 0xf1, 0x7f, 0x95, 0xe3, 0xcb, 0x91, 0x64, 0x86, 0xd2, 0xb9, 0x76, 0x7b,
|
||||
0x7a, 0xae, 0x90, 0xb7, 0x83, 0x73, 0xdb, 0x7a, 0xf2, 0xfe, 0x07, 0x32, 0xcd, 0xb4, 0x82, 0xc0,
|
||||
0xde, 0xb9, 0xfd, 0xe4, 0xfd, 0x0f, 0x66, 0x25, 0x69, 0xca, 0x34, 0xd4, 0x25, 0xe9, 0x65, 0x28,
|
||||
0xd0, 0x03, 0x76, 0x14, 0x64, 0x42, 0x1f, 0xec, 0x31, 0x2c, 0x4b, 0xb5, 0xd5, 0x92, 0xe1, 0xc0,
|
||||
0xc4, 0x05, 0x4b, 0x94, 0xda, 0x24, 0xcb, 0x7a, 0x58, 0x44, 0xb6, 0xa1, 0x55, 0x58, 0x38, 0x8f,
|
||||
0x5f, 0x23, 0xac, 0x99, 0xf2, 0xcb, 0xf8, 0xb3, 0x02, 0x54, 0xb4, 0x45, 0x61, 0x55, 0x28, 0x99,
|
||||
0x9d, 0x5e, 0xc7, 0xfc, 0xa4, 0xb3, 0xdd, 0xbc, 0xc5, 0x1e, 0xc0, 0x5b, 0xdd, 0x83, 0xad, 0x43,
|
||||
0xd3, 0xec, 0x6c, 0xf5, 0xad, 0x43, 0xd3, 0x52, 0xaf, 0xdc, 0x1c, 0xb5, 0x3f, 0xdb, 0xef, 0x1c,
|
||||
0xf4, 0xad, 0xed, 0x4e, 0xbf, 0xdd, 0xdd, 0xeb, 0x35, 0x33, 0xec, 0x35, 0x68, 0xc5, 0x98, 0xaa,
|
||||
0xb8, 0xbd, 0x7f, 0x78, 0x7c, 0xd0, 0x6f, 0x66, 0xd9, 0x3d, 0xb8, 0xb3, 0xd3, 0x3d, 0x68, 0xef,
|
||||
0x59, 0x31, 0xce, 0xd6, 0x5e, 0xff, 0x13, 0xab, 0xf3, 0xeb, 0x47, 0x5d, 0xf3, 0xb3, 0x66, 0x2e,
|
||||
0x0d, 0x41, 0x28, 0xe3, 0xaa, 0x85, 0x3c, 0xbb, 0x0d, 0x2b, 0x84, 0x40, 0x55, 0xac, 0xfe, 0xe1,
|
||||
0xa1, 0xd5, 0x3b, 0x3c, 0x3c, 0x68, 0x16, 0xd8, 0x22, 0xd4, 0xba, 0x07, 0x9f, 0xb4, 0xf7, 0xba,
|
||||
0xdb, 0x96, 0xd9, 0x69, 0xef, 0xed, 0x37, 0x17, 0xd8, 0x12, 0x34, 0x66, 0xf1, 0x8a, 0xa2, 0x09,
|
||||
0x85, 0x77, 0x78, 0xd0, 0x3d, 0x3c, 0xb0, 0x3e, 0xe9, 0x98, 0xbd, 0xee, 0xe1, 0x41, 0xb3, 0xc4,
|
||||
0x56, 0x81, 0x25, 0x8b, 0x76, 0xf7, 0xdb, 0x5b, 0xcd, 0x32, 0x5b, 0x81, 0xc5, 0x24, 0xfc, 0x59,
|
||||
0xe7, 0xb3, 0x26, 0xb0, 0x16, 0x2c, 0xd3, 0xc0, 0xac, 0xcd, 0xce, 0xde, 0xe1, 0xa7, 0xd6, 0x7e,
|
||||
0xf7, 0xa0, 0xbb, 0x7f, 0xbc, 0xdf, 0xac, 0xe0, 0xbb, 0x5b, 0x9d, 0x8e, 0xd5, 0x3d, 0xe8, 0x1d,
|
||||
0xef, 0xec, 0x74, 0xb7, 0xba, 0x9d, 0x83, 0x7e, 0xb3, 0x4a, 0x3d, 0xa7, 0x4d, 0xbc, 0x26, 0x2a,
|
||||
0xc8, 0x9c, 0x01, 0x6b, 0xbb, 0xdb, 0x6b, 0x6f, 0xee, 0x75, 0xb6, 0x9b, 0x75, 0x76, 0x17, 0x6e,
|
||||
0xf7, 0x3b, 0xfb, 0x47, 0x87, 0x66, 0xdb, 0xfc, 0x4c, 0xe5, 0x14, 0x58, 0x3b, 0xed, 0xee, 0xde,
|
||||
0xb1, 0xd9, 0x69, 0x36, 0xd8, 0x1b, 0x70, 0xd7, 0xec, 0x7c, 0x7c, 0xdc, 0x35, 0x3b, 0xdb, 0xd6,
|
||||
0xc1, 0xe1, 0x76, 0xc7, 0xda, 0xe9, 0xb4, 0xfb, 0xc7, 0x66, 0xc7, 0xda, 0xef, 0xf6, 0x7a, 0xdd,
|
||||
0x83, 0xa7, 0xcd, 0x26, 0x7b, 0x0b, 0xee, 0x47, 0x28, 0x51, 0x03, 0x33, 0x58, 0x8b, 0x62, 0x7e,
|
||||
0x6a, 0x4b, 0x0f, 0x3a, 0xbf, 0xde, 0xb7, 0x8e, 0x3a, 0x1d, 0xb3, 0xc9, 0xd8, 0x3a, 0xac, 0xc6,
|
||||
0xdd, 0x53, 0x07, 0xb2, 0xef, 0x25, 0x51, 0x76, 0xd4, 0x31, 0xf7, 0xdb, 0x07, 0x62, 0x83, 0x13,
|
||||
0x65, 0xcb, 0x62, 0xd8, 0x71, 0xd9, 0xec, 0xb0, 0x57, 0x18, 0x83, 0xba, 0xb6, 0x2b, 0x3b, 0x6d,
|
||||
0xb3, 0xb9, 0xca, 0x1a, 0x50, 0xd9, 0x3f, 0x3a, 0xb2, 0xfa, 0xdd, 0xfd, 0xce, 0xe1, 0x71, 0xbf,
|
||||
0xb9, 0xc6, 0x56, 0xa0, 0xd9, 0x3d, 0xe8, 0x77, 0x4c, 0xb1, 0xd7, 0xaa, 0xea, 0xff, 0x2a, 0xb2,
|
||||
0x65, 0x68, 0xa8, 0x91, 0x2a, 0xe8, 0xcf, 0x8a, 0x6c, 0x0d, 0xd8, 0xf1, 0x81, 0xd9, 0x69, 0x6f,
|
||||
0x8b, 0x85, 0x8b, 0x0a, 0xfe, 0x77, 0x51, 0x7a, 0x48, 0x7e, 0x9a, 0x8b, 0x2e, 0xeb, 0x38, 0xe4,
|
||||
0x20, 0xf9, 0x36, 0x6d, 0x55, 0x7b, 0x53, 0xf6, 0x65, 0xaf, 0xc6, 0x6b, 0xaa, 0x55, 0x6e, 0x4e,
|
||||
0xb5, 0x9a, 0xd3, 0xdd, 0x6b, 0xba, 0xec, 0xf7, 0x26, 0xd4, 0xc6, 0xf4, 0x4e, 0xad, 0x7c, 0x8f,
|
||||
0x12, 0x64, 0xfc, 0x0d, 0x01, 0xe9, 0x31, 0xca, 0xb9, 0x67, 0xd3, 0x0b, 0xf3, 0xcf, 0xa6, 0xa7,
|
||||
0xc9, 0xf7, 0x0b, 0x69, 0xf2, 0xfd, 0x43, 0x58, 0x24, 0xd6, 0xe4, 0xb8, 0xce, 0x58, 0x69, 0xcd,
|
||||
0x24, 0x05, 0x36, 0x90, 0x45, 0x11, 0x5c, 0xa9, 0x13, 0x4a, 0xe5, 0x90, 0x2c, 0xa4, 0x28, 0xb5,
|
||||
0x8d, 0x84, 0xa6, 0x41, 0x9c, 0x23, 0xd2, 0x34, 0xa2, 0x1e, 0xec, 0xab, 0xb8, 0x87, 0x8a, 0xd6,
|
||||
0x03, 0xc1, 0xb1, 0x87, 0x87, 0xb0, 0xc8, 0xaf, 0x42, 0xdf, 0xb6, 0xbc, 0x89, 0xfd, 0xf9, 0x14,
|
||||
0x5d, 0xb8, 0x36, 0xea, 0xf0, 0x55, 0xb3, 0x81, 0x05, 0x87, 0x08, 0xdf, 0xb6, 0x43, 0xfb, 0xe1,
|
||||
0x17, 0x50, 0xd1, 0xde, 0x30, 0x66, 0x6b, 0xb0, 0xf4, 0x69, 0xb7, 0x7f, 0xd0, 0xe9, 0xf5, 0xac,
|
||||
0xa3, 0xe3, 0xcd, 0x67, 0x9d, 0xcf, 0xac, 0xdd, 0x76, 0x6f, 0xb7, 0x79, 0x4b, 0x1c, 0xda, 0x83,
|
||||
0x4e, 0xaf, 0xdf, 0xd9, 0x4e, 0xc0, 0x33, 0xec, 0x75, 0x58, 0x3f, 0x3e, 0x38, 0xee, 0x75, 0xb6,
|
||||
0xad, 0xb4, 0x7a, 0x59, 0x41, 0xa5, 0xb2, 0x3c, 0xa5, 0x7a, 0xee, 0xe1, 0xf7, 0xa1, 0x9e, 0x7c,
|
||||
0x58, 0x93, 0x01, 0x2c, 0xec, 0x75, 0x9e, 0xb6, 0xb7, 0x3e, 0xa3, 0x97, 0xf9, 0x7a, 0xfd, 0x76,
|
||||
0xbf, 0xbb, 0x65, 0xc9, 0x97, 0xf8, 0x04, 0x47, 0xc8, 0xb0, 0x0a, 0x14, 0xdb, 0x07, 0x5b, 0xbb,
|
||||
0x87, 0x66, 0xaf, 0x99, 0x7d, 0xf8, 0x11, 0x34, 0x67, 0xfd, 0x51, 0x09, 0x07, 0xde, 0x8b, 0x3c,
|
||||
0x7d, 0x0f, 0xff, 0x55, 0x0e, 0x20, 0x4e, 0x18, 0x10, 0xac, 0x66, 0xbb, 0xdd, 0x6f, 0xef, 0x1d,
|
||||
0x8a, 0x69, 0x98, 0x87, 0x7d, 0xc1, 0x41, 0xcc, 0xce, 0xc7, 0xcd, 0x5b, 0xa9, 0x25, 0x87, 0x47,
|
||||
0xfd, 0x66, 0x46, 0xac, 0x58, 0xf7, 0xa0, 0xdb, 0xef, 0xb6, 0xf7, 0x2c, 0xf3, 0xf0, 0xb8, 0x7b,
|
||||
0xf0, 0x94, 0x9e, 0x1c, 0x43, 0x2e, 0x7b, 0x7c, 0xb4, 0x63, 0x1e, 0x1e, 0xf4, 0xad, 0xde, 0xee,
|
||||
0x71, 0x7f, 0x1b, 0x1f, 0x2c, 0xdb, 0x32, 0xbb, 0x47, 0xd4, 0x66, 0xfe, 0x45, 0x08, 0xa2, 0xe9,
|
||||
0x82, 0x58, 0xf3, 0xa7, 0x87, 0xbd, 0x5e, 0xf7, 0xc8, 0xfa, 0xf8, 0xb8, 0x63, 0x76, 0x3b, 0x3d,
|
||||
0xac, 0xb8, 0x90, 0x02, 0x17, 0xf8, 0x45, 0xc1, 0x9b, 0xfb, 0x7b, 0x9f, 0x48, 0xe6, 0x29, 0x50,
|
||||
0x4b, 0x49, 0x90, 0xc0, 0x2a, 0x0b, 0x9e, 0x22, 0xb8, 0x4f, 0x4a, 0xcb, 0x70, 0x43, 0x99, 0xa8,
|
||||
0x57, 0x11, 0x7c, 0x75, 0x6e, 0x33, 0xb0, 0x5a, 0x35, 0xbd, 0x48, 0xd4, 0x42, 0x96, 0x1b, 0x5d,
|
||||
0x50, 0xdb, 0xdb, 0x26, 0x56, 0xa8, 0xcf, 0x41, 0x05, 0x6e, 0x43, 0x6c, 0x94, 0x60, 0x4f, 0x02,
|
||||
0xa5, 0xa9, 0x3e, 0x44, 0xc9, 0xe2, 0x93, 0xdf, 0xc9, 0x41, 0x9d, 0x92, 0xb7, 0xe8, 0x27, 0xa4,
|
||||
0xb8, 0xcf, 0xf6, 0xa1, 0x28, 0x7f, 0x8b, 0x8c, 0xad, 0x44, 0xaf, 0x41, 0xe9, 0xbf, 0x7e, 0xb6,
|
||||
0xbe, 0x3a, 0x0b, 0x96, 0xe2, 0xd8, 0xd2, 0xdf, 0xf8, 0xd3, 0xff, 0xf9, 0x0f, 0xb2, 0x35, 0x56,
|
||||
0x79, 0x74, 0xf1, 0xde, 0xa3, 0x33, 0xee, 0x06, 0xa2, 0x8d, 0xff, 0x1f, 0x20, 0xfe, 0x85, 0x2d,
|
||||
0xd6, 0x8a, 0x9c, 0x50, 0x33, 0x3f, 0x3f, 0xb6, 0x7e, 0x3b, 0xa5, 0x44, 0xb6, 0x7b, 0x1b, 0xdb,
|
||||
0x5d, 0x32, 0xea, 0xa2, 0x5d, 0xc7, 0x75, 0x42, 0xfa, 0xb5, 0xad, 0x0f, 0x33, 0x0f, 0xd9, 0x10,
|
||||
0xaa, 0xfa, 0x6f, 0x5f, 0x31, 0x25, 0x29, 0xa5, 0xfc, 0x7a, 0xd7, 0xfa, 0x9d, 0xd4, 0x32, 0x25,
|
||||
0x83, 0x62, 0x1f, 0x2b, 0x46, 0x53, 0xf4, 0x31, 0x45, 0x8c, 0xb8, 0x97, 0x11, 0x49, 0xe5, 0xf1,
|
||||
0x4f, 0x5c, 0xb1, 0xd7, 0x34, 0xb9, 0x6a, 0xee, 0x07, 0xb6, 0xd6, 0xef, 0xde, 0x50, 0x2a, 0xfb,
|
||||
0xba, 0x8b, 0x7d, 0xad, 0x19, 0x4c, 0xf4, 0x35, 0x40, 0x1c, 0xf5, 0x03, 0x5b, 0x1f, 0x66, 0x1e,
|
||||
0x3e, 0xf9, 0xcb, 0x07, 0x50, 0x8e, 0x82, 0x39, 0xd9, 0x6f, 0x41, 0x2d, 0x91, 0x5d, 0xc7, 0xd4,
|
||||
0x34, 0xd2, 0x92, 0xf1, 0xd6, 0x5f, 0x4b, 0x2f, 0x94, 0x1d, 0xbf, 0x8e, 0x1d, 0xb7, 0xd8, 0xaa,
|
||||
0xe8, 0x58, 0x66, 0xaf, 0x3d, 0xc2, 0x6c, 0x58, 0x7a, 0x5b, 0xeb, 0xb9, 0xa6, 0x7d, 0x50, 0x67,
|
||||
0xaf, 0xcd, 0x6a, 0x04, 0x89, 0xde, 0xee, 0xde, 0x50, 0x2a, 0xbb, 0x7b, 0x0d, 0xbb, 0x5b, 0x65,
|
||||
0xcb, 0x7a, 0x77, 0x2a, 0xf4, 0x92, 0x71, 0x7c, 0xcf, 0x4e, 0xff, 0x05, 0x28, 0x76, 0x37, 0x7e,
|
||||
0x7d, 0x2c, 0xe5, 0x97, 0xa1, 0x22, 0x12, 0x99, 0xff, 0x79, 0x28, 0xa3, 0x85, 0x5d, 0x31, 0x86,
|
||||
0xdb, 0xa7, 0xff, 0x00, 0x14, 0x3b, 0x81, 0x8a, 0xf6, 0xa3, 0x09, 0xec, 0xf6, 0x8d, 0x3f, 0xf0,
|
||||
0xb0, 0xbe, 0x9e, 0x56, 0x94, 0x36, 0x15, 0xbd, 0xfd, 0x47, 0xa7, 0x9c, 0xb3, 0xdf, 0x80, 0x72,
|
||||
0xf4, 0x14, 0x3f, 0x5b, 0xd3, 0x7e, 0x1a, 0x41, 0xff, 0xe9, 0x80, 0xf5, 0xd6, 0x7c, 0x41, 0x1a,
|
||||
0xf1, 0xe9, 0xad, 0x0b, 0xe2, 0xfb, 0x14, 0x2a, 0xda, 0x73, 0xfb, 0xd1, 0x04, 0xe6, 0x9f, 0xf4,
|
||||
0x8f, 0x26, 0x90, 0xf2, 0x3a, 0xbf, 0xb1, 0x88, 0x5d, 0x54, 0x58, 0x19, 0xe9, 0x3b, 0xbc, 0xf2,
|
||||
0x02, 0xb6, 0x07, 0x2b, 0x52, 0xd3, 0x3a, 0xe1, 0x5f, 0x66, 0x1b, 0x52, 0x7e, 0x74, 0xeb, 0x71,
|
||||
0x86, 0x7d, 0x04, 0x25, 0xf5, 0xab, 0x0a, 0x6c, 0x35, 0xfd, 0xd7, 0x21, 0xd6, 0xd7, 0xe6, 0xe0,
|
||||
0x52, 0x2d, 0xfa, 0x0c, 0x20, 0x7e, 0xdb, 0x3f, 0x62, 0x12, 0x73, 0xbf, 0x15, 0x10, 0x51, 0xc0,
|
||||
0xfc, 0x0f, 0x01, 0x18, 0xab, 0x38, 0xc1, 0x26, 0x43, 0x26, 0xe1, 0xf2, 0x4b, 0xf5, 0xe8, 0xe8,
|
||||
0x8f, 0xa0, 0xa2, 0x3d, 0xef, 0x1f, 0x2d, 0xdf, 0xfc, 0x4f, 0x03, 0x44, 0xcb, 0x97, 0xf2, 0x6b,
|
||||
0x00, 0xc6, 0x3a, 0xb6, 0xbe, 0x6c, 0x34, 0x44, 0xeb, 0x42, 0xd4, 0x92, 0x22, 0x8f, 0xd8, 0xa0,
|
||||
0x73, 0xa8, 0x25, 0xde, 0xf0, 0x8f, 0x4e, 0x68, 0xda, 0x2f, 0x04, 0x44, 0x27, 0x34, 0xf5, 0xd9,
|
||||
0x7f, 0x45, 0x67, 0xc6, 0xa2, 0xe8, 0xe7, 0x02, 0x51, 0xb4, 0x9e, 0x7e, 0x08, 0x15, 0xed, 0x3d,
|
||||
0xfe, 0x68, 0x2e, 0xf3, 0x4f, 0xff, 0x47, 0x73, 0x49, 0x7b, 0xbe, 0x7f, 0x19, 0xfb, 0xa8, 0x1b,
|
||||
0x48, 0x0a, 0xf8, 0x6c, 0xa2, 0x68, 0xfb, 0xb7, 0xa0, 0x9e, 0x7c, 0xa2, 0x3f, 0x3a, 0xfb, 0xa9,
|
||||
0x6f, 0xfd, 0x47, 0x67, 0xff, 0x86, 0x77, 0xfd, 0x25, 0x49, 0x3f, 0x5c, 0x8a, 0x3a, 0x79, 0xf4,
|
||||
0x13, 0x99, 0x96, 0xf2, 0x05, 0xfb, 0x58, 0x30, 0x38, 0xf9, 0x6a, 0x27, 0x5b, 0xd3, 0xa8, 0x56,
|
||||
0x7f, 0xfe, 0x33, 0x3a, 0x2f, 0x73, 0x0f, 0x7c, 0x26, 0x89, 0x19, 0x1b, 0x67, 0x4f, 0x61, 0x29,
|
||||
0x22, 0xe6, 0xe8, 0x19, 0xce, 0x20, 0x9a, 0x43, 0xea, 0x63, 0x9f, 0xeb, 0xcd, 0xd9, 0xd2, 0xc7,
|
||||
0x19, 0xba, 0xfe, 0xf0, 0xf1, 0x43, 0xed, 0xfa, 0xd3, 0x5f, 0xe2, 0xd4, 0xae, 0xbf, 0xc4, 0x1b,
|
||||
0x89, 0xb3, 0xd7, 0x5f, 0xe8, 0x88, 0x36, 0x5c, 0x68, 0xcc, 0x3e, 0x8a, 0x79, 0xf7, 0xa6, 0xb4,
|
||||
0x7f, 0x6a, 0xfe, 0xf5, 0x17, 0xbf, 0x0a, 0x90, 0x64, 0x45, 0x8a, 0x9b, 0x3e, 0x92, 0xc1, 0x27,
|
||||
0xec, 0x37, 0xa1, 0xaa, 0xbf, 0x0f, 0xce, 0x74, 0x9e, 0x30, 0xdb, 0xd3, 0x9d, 0xd4, 0xb2, 0x24,
|
||||
0x95, 0xb0, 0xaa, 0xde, 0x0d, 0xfb, 0x04, 0x56, 0xa3, 0x65, 0xd6, 0xf3, 0xd6, 0x03, 0x76, 0x2f,
|
||||
0x25, 0x9b, 0x3d, 0xb1, 0xd8, 0xb7, 0x6f, 0x4c, 0x77, 0x7f, 0x9c, 0x11, 0xd4, 0x97, 0x7c, 0xa8,
|
||||
0x38, 0xbe, 0x79, 0xd2, 0xde, 0x67, 0x8e, 0x6f, 0x9e, 0xd4, 0xd7, 0x8d, 0x15, 0xf5, 0xb1, 0xa5,
|
||||
0xc4, 0x1a, 0x51, 0x58, 0x2e, 0xfb, 0x21, 0x34, 0xb4, 0xa4, 0xfc, 0xde, 0xb5, 0x3b, 0x88, 0x4e,
|
||||
0xd2, 0xfc, 0x4b, 0x7b, 0xeb, 0x69, 0xb6, 0x49, 0x63, 0x0d, 0xdb, 0x5f, 0x34, 0x12, 0x8b, 0x23,
|
||||
0x4e, 0xd1, 0x16, 0x54, 0xf4, 0x84, 0xff, 0x17, 0xb4, 0xbb, 0xa6, 0x15, 0xe9, 0x8f, 0xba, 0x3d,
|
||||
0xce, 0xb0, 0x3d, 0x68, 0xce, 0xbe, 0x41, 0x15, 0xf1, 0x94, 0xb4, 0x77, 0xb3, 0xd6, 0x67, 0x0a,
|
||||
0x13, 0x2f, 0x57, 0xb1, 0x23, 0x4a, 0xec, 0x88, 0x7e, 0xa1, 0xca, 0xf3, 0x67, 0x6f, 0xf5, 0xe4,
|
||||
0x2f, 0x57, 0x45, 0xad, 0xa5, 0xfd, 0x66, 0xd9, 0x83, 0xcc, 0xe3, 0x0c, 0xfb, 0xbd, 0x0c, 0x54,
|
||||
0x13, 0xef, 0xbe, 0x24, 0x42, 0xe7, 0x67, 0xe6, 0xd9, 0xd2, 0xcb, 0xf4, 0x89, 0x1a, 0x26, 0x2e,
|
||||
0xe2, 0xde, 0xc3, 0x1f, 0x24, 0x36, 0xe9, 0x27, 0x09, 0xd7, 0xde, 0xc6, 0xec, 0x4f, 0x58, 0x7d,
|
||||
0x31, 0x8b, 0xa0, 0x3f, 0xa0, 0xf8, 0xc5, 0xe3, 0x0c, 0xfb, 0x37, 0x19, 0xa8, 0x27, 0x7d, 0xf6,
|
||||
0xd1, 0x74, 0x53, 0xa3, 0x03, 0x22, 0x52, 0xba, 0xc1, 0xd1, 0xff, 0x43, 0x1c, 0x65, 0xff, 0xa1,
|
||||
0x99, 0x18, 0xa5, 0x7c, 0x62, 0xfb, 0x17, 0x1b, 0x2d, 0xfb, 0x90, 0x7e, 0x31, 0x52, 0x85, 0x32,
|
||||
0xb1, 0xf9, 0x5f, 0x18, 0x8c, 0xc8, 0x4f, 0xff, 0x3d, 0x3e, 0xdc, 0x84, 0x1f, 0xd1, 0x4f, 0x35,
|
||||
0xa9, 0xc8, 0x18, 0x41, 0xc5, 0xaf, 0x5a, 0xdf, 0x78, 0x0b, 0xe7, 0xf4, 0xba, 0x71, 0x3b, 0x31,
|
||||
0xa7, 0x59, 0xc1, 0xa3, 0x4d, 0xa3, 0x93, 0x3f, 0xa7, 0x17, 0xdf, 0x9c, 0x73, 0x3f, 0xb1, 0x77,
|
||||
0xf3, 0x20, 0xc7, 0x34, 0x48, 0x89, 0x9e, 0x38, 0x6a, 0xaf, 0xd8, 0x8c, 0xf1, 0x10, 0xc7, 0xfa,
|
||||
0x96, 0x71, 0xef, 0xc6, 0xb1, 0x3e, 0x42, 0xff, 0xbb, 0x18, 0xf1, 0x11, 0x40, 0x1c, 0x6a, 0xc8,
|
||||
0x66, 0x02, 0xde, 0x22, 0x06, 0x34, 0x1f, 0x8d, 0x98, 0x3c, 0xcf, 0x2a, 0x2e, 0x4e, 0xb4, 0xf8,
|
||||
0x1b, 0xc4, 0x4e, 0xa3, 0x50, 0x3c, 0x5d, 0xfa, 0x4a, 0x46, 0x05, 0x26, 0xa4, 0xaf, 0xd9, 0xf6,
|
||||
0x13, 0xcc, 0x34, 0x8a, 0xbb, 0x3b, 0x86, 0xda, 0x9e, 0xe7, 0x3d, 0x9f, 0x4e, 0xa2, 0xf0, 0xf6,
|
||||
0x64, 0x50, 0xcc, 0xae, 0x1d, 0x9c, 0xaf, 0xcf, 0xcc, 0xc2, 0xb8, 0x8f, 0x4d, 0xad, 0xb3, 0x96,
|
||||
0xd6, 0xd4, 0xa3, 0x9f, 0xc4, 0xf1, 0x8d, 0x5f, 0x30, 0x1b, 0x16, 0x23, 0x1e, 0x1d, 0xc7, 0x10,
|
||||
0x26, 0x9b, 0x49, 0x70, 0xe6, 0xd9, 0x2e, 0x12, 0x6a, 0x82, 0x1a, 0xed, 0xa3, 0x40, 0xb5, 0xf9,
|
||||
0x38, 0xc3, 0x8e, 0xa0, 0xba, 0xcd, 0x07, 0x98, 0xa8, 0x8f, 0xa1, 0x25, 0x4b, 0x89, 0x30, 0x05,
|
||||
0x8a, 0x49, 0x59, 0xaf, 0x25, 0x80, 0xc9, 0x7b, 0x6b, 0x62, 0x5f, 0xfb, 0xfc, 0xf3, 0x47, 0x3f,
|
||||
0x91, 0x41, 0x2b, 0x5f, 0xa8, 0x7b, 0x4b, 0x05, 0xf5, 0x24, 0xee, 0xad, 0x99, 0x28, 0xa0, 0xc4,
|
||||
0xbd, 0x35, 0x17, 0x05, 0x94, 0x58, 0x6a, 0x15, 0x54, 0xc4, 0x46, 0xb0, 0x38, 0x17, 0x38, 0x14,
|
||||
0x5d, 0x59, 0x37, 0x85, 0x1b, 0xad, 0xdf, 0xbf, 0x19, 0x21, 0xd9, 0xdb, 0xc3, 0x64, 0x6f, 0x3d,
|
||||
0xa8, 0xd1, 0x9b, 0x8e, 0x27, 0x9c, 0x52, 0xf6, 0x66, 0xde, 0xbb, 0xd1, 0xf3, 0x01, 0x67, 0x2f,
|
||||
0x18, 0x2c, 0x4b, 0x4a, 0x38, 0x98, 0x2b, 0xc7, 0x7e, 0x03, 0x2a, 0x4f, 0x79, 0xa8, 0x72, 0xf4,
|
||||
0x22, 0x19, 0x7b, 0x26, 0x69, 0x6f, 0x3d, 0x25, 0xc5, 0x2f, 0x49, 0x33, 0xd8, 0xda, 0x23, 0x3e,
|
||||
0x3c, 0xe3, 0xc4, 0x9c, 0x2c, 0x67, 0xf8, 0x05, 0xfb, 0x75, 0x6c, 0x3c, 0x4a, 0x8d, 0x5e, 0xd5,
|
||||
0x92, 0xb0, 0xf4, 0xc6, 0x1b, 0x33, 0xf0, 0xb4, 0x96, 0x5d, 0x6f, 0xc8, 0x35, 0x59, 0xcf, 0x85,
|
||||
0x8a, 0xf6, 0x84, 0x42, 0x74, 0x80, 0xe6, 0x9f, 0xcc, 0x88, 0x0e, 0x50, 0xca, 0x8b, 0x0b, 0xc6,
|
||||
0x03, 0xec, 0xc7, 0x60, 0xf7, 0xe3, 0x7e, 0xe8, 0x95, 0x85, 0xb8, 0xa7, 0x47, 0x3f, 0xb1, 0xc7,
|
||||
0xe1, 0x17, 0xec, 0x53, 0x7c, 0x39, 0x5d, 0xcf, 0x41, 0x8c, 0x95, 0x86, 0xd9, 0x74, 0xc5, 0x68,
|
||||
0xb1, 0xb4, 0xa2, 0xa4, 0x22, 0x41, 0x5d, 0xa1, 0x24, 0xf7, 0x3e, 0x40, 0x2f, 0xf4, 0x26, 0xdb,
|
||||
0x36, 0x1f, 0x7b, 0x6e, 0xcc, 0x6b, 0xe3, 0xac, 0xb8, 0x98, 0x7f, 0x69, 0xa9, 0x71, 0xec, 0x53,
|
||||
0x4d, 0xcb, 0x4a, 0xa4, 0x71, 0x2a, 0xe2, 0xba, 0x31, 0x71, 0x2e, 0x5a, 0x90, 0x94, 0xe4, 0xb9,
|
||||
0xc7, 0x19, 0xd6, 0x06, 0x88, 0x23, 0xc7, 0x22, 0x9d, 0x69, 0x2e, 0x28, 0x2d, 0x62, 0x7b, 0x29,
|
||||
0x61, 0x66, 0x47, 0x50, 0x8e, 0x43, 0x6e, 0xd6, 0xe2, 0x17, 0x61, 0x12, 0x01, 0x3a, 0xd1, 0x0d,
|
||||
0x3e, 0x17, 0xee, 0x62, 0x34, 0x71, 0xa9, 0x80, 0x95, 0xc4, 0x52, 0x9d, 0x72, 0x1e, 0x30, 0x07,
|
||||
0x96, 0x68, 0x80, 0x91, 0xb8, 0x84, 0xd9, 0x5c, 0xd1, 0x03, 0xf9, 0xf3, 0x91, 0x27, 0xd1, 0x69,
|
||||
0x4e, 0x8d, 0x9f, 0x48, 0x98, 0x7e, 0x04, 0xb5, 0x52, 0x26, 0x99, 0x60, 0xcd, 0x63, 0x58, 0x9c,
|
||||
0x73, 0xd1, 0x47, 0x47, 0xfa, 0xa6, 0x98, 0x8b, 0xe8, 0x48, 0xdf, 0xe8, 0xdd, 0x37, 0x56, 0xb0,
|
||||
0xcb, 0x86, 0x01, 0xa8, 0xea, 0x5d, 0x3a, 0xe1, 0xe0, 0x5c, 0x74, 0xf7, 0x2f, 0x33, 0xb0, 0x94,
|
||||
0xe2, 0x84, 0x67, 0x6f, 0x28, 0xab, 0xc1, 0x8d, 0x0e, 0xfa, 0xf5, 0x54, 0x67, 0xad, 0xd1, 0xc3,
|
||||
0x7e, 0xf6, 0xd9, 0xb3, 0xc4, 0xc5, 0x46, 0xbe, 0x52, 0x79, 0x32, 0x5f, 0x28, 0x54, 0xa4, 0x4a,
|
||||
0x14, 0x9f, 0xc3, 0x1a, 0x0d, 0xa4, 0x3d, 0x1a, 0xcd, 0x38, 0x92, 0x5f, 0x9f, 0xfb, 0x45, 0xf9,
|
||||
0x84, 0x73, 0x7c, 0xfd, 0xe6, 0x5f, 0x9c, 0xbf, 0x41, 0x9c, 0xa6, 0xa1, 0xb2, 0x29, 0x34, 0x67,
|
||||
0x1d, 0xb4, 0xec, 0xe6, 0xb6, 0xd6, 0xef, 0x25, 0xf4, 0xdf, 0x14, 0xa7, 0xee, 0xd7, 0xb0, 0xb3,
|
||||
0x7b, 0xc6, 0x7a, 0xda, 0xba, 0x90, 0x4a, 0x2c, 0xf6, 0xe3, 0xaf, 0x47, 0xde, 0xe4, 0x99, 0x79,
|
||||
0xaa, 0x0e, 0x6e, 0xf2, 0x7d, 0x47, 0x1a, 0x78, 0xba, 0x33, 0xfa, 0x6d, 0xec, 0xfe, 0xbe, 0x71,
|
||||
0x27, 0xad, 0x7b, 0x9f, 0xaa, 0x90, 0x2e, 0xbe, 0x36, 0x7b, 0xae, 0xd5, 0x08, 0xee, 0xa7, 0xed,
|
||||
0xf7, 0x8d, 0xba, 0xd0, 0xcc, 0x5a, 0xdf, 0x42, 0xd9, 0xae, 0xaa, 0x7b, 0x8f, 0xa3, 0xe3, 0x93,
|
||||
0xe2, 0xa6, 0x8e, 0x8e, 0x4f, 0x9a, 0xbb, 0x39, 0x29, 0xd7, 0x28, 0x47, 0xf3, 0x87, 0x99, 0x87,
|
||||
0x9b, 0xef, 0xfc, 0xf0, 0x6b, 0x67, 0x4e, 0x78, 0x3e, 0x3d, 0xd9, 0x18, 0x78, 0xe3, 0x47, 0x23,
|
||||
0x65, 0x6d, 0x94, 0x29, 0xcf, 0x8f, 0x46, 0xee, 0xf0, 0x11, 0x36, 0x7b, 0xb2, 0x30, 0xf1, 0xbd,
|
||||
0xd0, 0xfb, 0xd6, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0x70, 0x9a, 0xaf, 0x28, 0x34, 0x83, 0x00,
|
||||
0x00,
|
||||
}
|
||||
|
||||
// Reference imports to suppress errors if they are not otherwise used.
|
||||
|
@ -1982,6 +1982,23 @@ message PendingChannelsResponse {
|
||||
|
||||
/// The balance in satoshis encumbered in this channel
|
||||
int64 limbo_balance = 2;
|
||||
|
||||
/**
|
||||
A list of valid commitment transactions. Any of these can confirm at
|
||||
this point.
|
||||
*/
|
||||
Commitments commitments = 3;
|
||||
}
|
||||
|
||||
message Commitments {
|
||||
/// Hash of the local version of the commitment tx.
|
||||
string local_txid = 1;
|
||||
|
||||
/// Hash of the remote version of the commitment tx.
|
||||
string remote_txid = 2;
|
||||
|
||||
/// Hash of the remote pending version of the commitment tx.
|
||||
string remote_pending_txid = 3;
|
||||
}
|
||||
|
||||
message ClosedChannel {
|
||||
@ -2016,6 +2033,14 @@ message PendingChannelsResponse {
|
||||
int64 recovered_balance = 6;
|
||||
|
||||
repeated PendingHTLC pending_htlcs = 8;
|
||||
|
||||
enum AnchorState {
|
||||
LIMBO = 0;
|
||||
RECOVERED = 1;
|
||||
LOST = 2;
|
||||
}
|
||||
|
||||
AnchorState anchor = 9;
|
||||
}
|
||||
|
||||
/// The balance in satoshis encumbered in pending channels
|
||||
|
@ -1534,6 +1534,15 @@
|
||||
"default": "RESERVED",
|
||||
"description": " - RESERVED: *\nThe numbers assigned in this enumeration match the failure codes as\ndefined in BOLT #4. Because protobuf 3 requires enums to start with 0,\na RESERVED value is added.\n - INTERNAL_FAILURE: *\nAn internal error occurred.\n - UNKNOWN_FAILURE: *\nThe error source is known, but the failure itself couldn't be decoded.\n - UNREADABLE_FAILURE: *\nAn unreadable failure result is returned if the received failure message\ncannot be decrypted. In that case the error source is unknown."
|
||||
},
|
||||
"ForceClosedChannelAnchorState": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"LIMBO",
|
||||
"RECOVERED",
|
||||
"LOST"
|
||||
],
|
||||
"default": "LIMBO"
|
||||
},
|
||||
"HTLCAttemptHTLCStatus": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
@ -1594,6 +1603,23 @@
|
||||
}
|
||||
}
|
||||
},
|
||||
"PendingChannelsResponseCommitments": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"local_txid": {
|
||||
"type": "string",
|
||||
"description": "/ Hash of the local version of the commitment tx."
|
||||
},
|
||||
"remote_txid": {
|
||||
"type": "string",
|
||||
"description": "/ Hash of the remote version of the commitment tx."
|
||||
},
|
||||
"remote_pending_txid": {
|
||||
"type": "string",
|
||||
"description": "/ Hash of the remote pending version of the commitment tx."
|
||||
}
|
||||
}
|
||||
},
|
||||
"PendingChannelsResponseForceClosedChannel": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
@ -1630,6 +1656,9 @@
|
||||
"items": {
|
||||
"$ref": "#/definitions/lnrpcPendingHTLC"
|
||||
}
|
||||
},
|
||||
"anchor": {
|
||||
"$ref": "#/definitions/ForceClosedChannelAnchorState"
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -1706,6 +1735,10 @@
|
||||
"type": "string",
|
||||
"format": "int64",
|
||||
"title": "/ The balance in satoshis encumbered in this channel"
|
||||
},
|
||||
"commitments": {
|
||||
"$ref": "#/definitions/PendingChannelsResponseCommitments",
|
||||
"description": "*\nA list of valid commitment transactions. Any of these can confirm at\nthis point."
|
||||
}
|
||||
}
|
||||
},
|
||||
|
@ -84,6 +84,10 @@ const (
|
||||
//A witness type that allows us to sweep an output that sends to a nested P2SH
|
||||
//script that pays to a key solely under our control.
|
||||
WitnessType_NESTED_WITNESS_KEY_HASH WitnessType = 12
|
||||
//
|
||||
//A witness type that allows us to spend our anchor on the commitment
|
||||
//transaction.
|
||||
WitnessType_COMMITMENT_ANCHOR WitnessType = 13
|
||||
)
|
||||
|
||||
var WitnessType_name = map[int32]string{
|
||||
@ -100,6 +104,7 @@ var WitnessType_name = map[int32]string{
|
||||
10: "HTLC_SECOND_LEVEL_REVOKE",
|
||||
11: "WITNESS_KEY_HASH",
|
||||
12: "NESTED_WITNESS_KEY_HASH",
|
||||
13: "COMMITMENT_ANCHOR",
|
||||
}
|
||||
|
||||
var WitnessType_value = map[string]int32{
|
||||
@ -116,6 +121,7 @@ var WitnessType_value = map[string]int32{
|
||||
"HTLC_SECOND_LEVEL_REVOKE": 10,
|
||||
"WITNESS_KEY_HASH": 11,
|
||||
"NESTED_WITNESS_KEY_HASH": 12,
|
||||
"COMMITMENT_ANCHOR": 13,
|
||||
}
|
||||
|
||||
func (x WitnessType) String() string {
|
||||
@ -828,73 +834,73 @@ func init() {
|
||||
func init() { proto.RegisterFile("walletrpc/walletkit.proto", fileDescriptor_6cc6942ac78249e5) }
|
||||
|
||||
var fileDescriptor_6cc6942ac78249e5 = []byte{
|
||||
// 1047 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0x6b, 0x6f, 0xea, 0x46,
|
||||
0x10, 0x2d, 0x21, 0x21, 0x30, 0x40, 0x42, 0x96, 0x3c, 0x7c, 0xb9, 0xb9, 0x0d, 0x75, 0x1f, 0x42,
|
||||
0x7d, 0x80, 0x9a, 0xa8, 0x55, 0x1f, 0x52, 0xd5, 0x84, 0x38, 0x22, 0x82, 0x60, 0x6a, 0x3b, 0x37,
|
||||
0xba, 0x55, 0xa5, 0x95, 0x03, 0x1b, 0x62, 0x01, 0xb6, 0xef, 0x7a, 0x29, 0xf8, 0x6b, 0x7f, 0x44,
|
||||
0xa5, 0xfe, 0x95, 0xfe, 0xba, 0xca, 0xeb, 0x07, 0x6b, 0x68, 0x2a, 0xf5, 0x53, 0xf0, 0x39, 0x67,
|
||||
0x8e, 0x67, 0x67, 0xc7, 0x33, 0x81, 0x57, 0x0b, 0x73, 0x3a, 0x25, 0x8c, 0xba, 0xc3, 0x56, 0xf8,
|
||||
0x6b, 0x62, 0xb1, 0xa6, 0x4b, 0x1d, 0xe6, 0xa0, 0x42, 0x42, 0xd5, 0x0a, 0xd4, 0x1d, 0x86, 0x68,
|
||||
0xed, 0xd0, 0xb3, 0xc6, 0x76, 0x20, 0x0f, 0xfe, 0x12, 0x1a, 0xa2, 0xf2, 0x2f, 0x90, 0xeb, 0x12,
|
||||
0x5f, 0x23, 0xef, 0x51, 0x03, 0x2a, 0x13, 0xe2, 0xe3, 0x27, 0xcb, 0x1e, 0x13, 0x8a, 0x5d, 0x6a,
|
||||
0xd9, 0x4c, 0xca, 0xd4, 0x33, 0x8d, 0x1d, 0x6d, 0x6f, 0x42, 0xfc, 0x1b, 0x0e, 0x0f, 0x02, 0x14,
|
||||
0xbd, 0x01, 0xe0, 0x4a, 0x73, 0x66, 0x4d, 0x7d, 0x69, 0x8b, 0x6b, 0x0a, 0x81, 0x86, 0x03, 0x72,
|
||||
0x19, 0x8a, 0x97, 0xa3, 0x11, 0xd5, 0xc8, 0xfb, 0x39, 0xf1, 0x98, 0x2c, 0x43, 0x29, 0x7c, 0xf4,
|
||||
0x5c, 0xc7, 0xf6, 0x08, 0x42, 0xb0, 0x6d, 0x8e, 0x46, 0x94, 0x7b, 0x17, 0x34, 0xfe, 0x5b, 0xfe,
|
||||
0x04, 0x8a, 0x06, 0x35, 0x6d, 0xcf, 0x1c, 0x32, 0xcb, 0xb1, 0xd1, 0x11, 0xe4, 0xd8, 0x12, 0x3f,
|
||||
0x93, 0x25, 0x17, 0x95, 0xb4, 0x1d, 0xb6, 0xec, 0x90, 0xa5, 0xfc, 0x2d, 0xec, 0x0f, 0xe6, 0x8f,
|
||||
0x53, 0xcb, 0x7b, 0x4e, 0xcc, 0x3e, 0x86, 0xb2, 0x1b, 0x42, 0x98, 0x50, 0xea, 0xc4, 0xae, 0xa5,
|
||||
0x08, 0x54, 0x02, 0x4c, 0xfe, 0x0d, 0x90, 0x4e, 0xec, 0x91, 0x3a, 0x67, 0xee, 0x9c, 0x79, 0x51,
|
||||
0x5e, 0xe8, 0x14, 0xc0, 0x33, 0x19, 0x76, 0x09, 0xc5, 0x93, 0x05, 0x8f, 0xcb, 0x6a, 0x79, 0xcf,
|
||||
0x64, 0x03, 0x42, 0xbb, 0x0b, 0xd4, 0x80, 0x5d, 0x27, 0xd4, 0x4b, 0x5b, 0xf5, 0x6c, 0xa3, 0x78,
|
||||
0xbe, 0xd7, 0x8c, 0xea, 0xd7, 0x34, 0x96, 0xea, 0x9c, 0x69, 0x31, 0x2d, 0x7f, 0x09, 0xd5, 0x94,
|
||||
0x7b, 0x94, 0xd9, 0x11, 0xe4, 0xa8, 0xb9, 0xc0, 0x2c, 0x39, 0x03, 0x35, 0x17, 0xc6, 0x52, 0xfe,
|
||||
0x06, 0x90, 0xe2, 0x31, 0x6b, 0x66, 0x32, 0x72, 0x43, 0x48, 0x9c, 0xcb, 0x19, 0x14, 0x87, 0x8e,
|
||||
0xfd, 0x84, 0x99, 0x49, 0xc7, 0x24, 0x2e, 0x3b, 0x04, 0x90, 0xc1, 0x11, 0xf9, 0x02, 0xaa, 0xa9,
|
||||
0xb0, 0xe8, 0x25, 0xff, 0x79, 0x06, 0xf9, 0xaf, 0x2c, 0x94, 0x06, 0xc4, 0x1e, 0x59, 0xf6, 0x58,
|
||||
0x5f, 0x10, 0xe2, 0xa2, 0x2f, 0x20, 0x1f, 0x64, 0xed, 0xc4, 0x57, 0x5b, 0x3c, 0xdf, 0x6f, 0x4e,
|
||||
0xf9, 0x99, 0xd4, 0x39, 0x1b, 0x04, 0xb0, 0x96, 0x08, 0xd0, 0xf7, 0x50, 0x5a, 0x58, 0xcc, 0x26,
|
||||
0x9e, 0x87, 0x99, 0xef, 0x12, 0x7e, 0xcf, 0x7b, 0xe7, 0xc7, 0xcd, 0xa4, 0xb9, 0x9a, 0x0f, 0x21,
|
||||
0x6d, 0xf8, 0x2e, 0xd1, 0x8a, 0x8b, 0xd5, 0x43, 0xd0, 0x20, 0xe6, 0xcc, 0x99, 0xdb, 0x0c, 0x7b,
|
||||
0x26, 0x93, 0xb2, 0xf5, 0x4c, 0xa3, 0xac, 0x15, 0x42, 0x44, 0x37, 0x19, 0xaa, 0x43, 0x29, 0xce,
|
||||
0xfa, 0xd1, 0x67, 0x44, 0xda, 0xe6, 0x02, 0x08, 0xf3, 0xbe, 0xf2, 0x19, 0x41, 0x5f, 0x01, 0x7a,
|
||||
0xa4, 0x8e, 0x39, 0x1a, 0x9a, 0x1e, 0xc3, 0x26, 0x63, 0x64, 0xe6, 0x32, 0x4f, 0xda, 0xe1, 0xba,
|
||||
0x83, 0x84, 0xb9, 0x8c, 0x08, 0x74, 0x0e, 0x47, 0x36, 0x59, 0x32, 0xbc, 0x8a, 0x79, 0x26, 0xd6,
|
||||
0xf8, 0x99, 0x49, 0x39, 0x1e, 0x51, 0x0d, 0xc8, 0xab, 0x98, 0xeb, 0x70, 0x2a, 0x88, 0xa1, 0x61,
|
||||
0xf5, 0xc9, 0x08, 0x8b, 0xc5, 0xcf, 0x87, 0x31, 0x09, 0xd9, 0x4e, 0x6e, 0x01, 0x5d, 0xc0, 0xf1,
|
||||
0x2a, 0x26, 0x75, 0x84, 0xc2, 0x5a, 0x90, 0xbe, 0x3a, 0xcb, 0x21, 0xec, 0x3c, 0x39, 0x74, 0x48,
|
||||
0xa4, 0xdd, 0x7a, 0xa6, 0x91, 0xd7, 0xc2, 0x07, 0xf9, 0x18, 0x0e, 0xc5, 0xab, 0x89, 0xbb, 0x52,
|
||||
0x7e, 0x80, 0xa3, 0x35, 0x3c, 0xba, 0xea, 0x9f, 0x60, 0xcf, 0x0d, 0x09, 0xec, 0x71, 0x46, 0xca,
|
||||
0xf0, 0xbe, 0x3c, 0x11, 0x2e, 0x44, 0x8c, 0xd4, 0xca, 0xae, 0xe8, 0x23, 0xff, 0x99, 0x81, 0xbd,
|
||||
0xab, 0xf9, 0xcc, 0x15, 0xba, 0xee, 0x7f, 0xb5, 0xc3, 0x19, 0x14, 0xc3, 0x02, 0xf1, 0x62, 0xf1,
|
||||
0x6e, 0x28, 0x6b, 0x10, 0x42, 0x41, 0x89, 0x36, 0x6e, 0x35, 0xbb, 0x71, 0xab, 0x49, 0x25, 0xb6,
|
||||
0xc5, 0x4a, 0x1c, 0xc0, 0x7e, 0x92, 0x57, 0x78, 0xd6, 0xcf, 0xff, 0xc8, 0x42, 0x51, 0x68, 0x2e,
|
||||
0x54, 0x85, 0xfd, 0xfb, 0x7e, 0xb7, 0xaf, 0x3e, 0xf4, 0xf1, 0xc3, 0xad, 0xd1, 0x57, 0x74, 0xbd,
|
||||
0xf2, 0x01, 0x92, 0xe0, 0xb0, 0xad, 0xde, 0xdd, 0xdd, 0x1a, 0x77, 0x4a, 0xdf, 0xc0, 0xc6, 0xed,
|
||||
0x9d, 0x82, 0x7b, 0x6a, 0xbb, 0x5b, 0xc9, 0xa0, 0x13, 0xa8, 0x0a, 0x4c, 0x5f, 0xc5, 0xd7, 0x4a,
|
||||
0xef, 0xf2, 0x5d, 0x65, 0x0b, 0x1d, 0xc1, 0x81, 0x40, 0x68, 0xca, 0x5b, 0xb5, 0xab, 0x54, 0xb2,
|
||||
0x81, 0xbe, 0x63, 0xf4, 0xda, 0x58, 0xbd, 0xb9, 0x51, 0x34, 0xe5, 0x3a, 0x26, 0xb6, 0x83, 0x57,
|
||||
0x70, 0xe2, 0xb2, 0xdd, 0x56, 0x06, 0xc6, 0x8a, 0xd9, 0x41, 0x9f, 0xc2, 0x47, 0xa9, 0x90, 0xe0,
|
||||
0xf5, 0xea, 0xbd, 0x81, 0x75, 0xa5, 0xad, 0xf6, 0xaf, 0x71, 0x4f, 0x79, 0xab, 0xf4, 0x2a, 0x39,
|
||||
0xf4, 0x19, 0xc8, 0x69, 0x03, 0xfd, 0xbe, 0xdd, 0x56, 0x74, 0x3d, 0xad, 0xdb, 0x45, 0x67, 0xf0,
|
||||
0x7a, 0x2d, 0x83, 0x3b, 0xd5, 0x50, 0x62, 0xd7, 0x4a, 0x1e, 0xd5, 0xe1, 0x74, 0x3d, 0x13, 0xae,
|
||||
0x88, 0xfc, 0x2a, 0x05, 0x74, 0x0a, 0x12, 0x57, 0x88, 0xce, 0x71, 0xbe, 0x80, 0x0e, 0xa1, 0x12,
|
||||
0x55, 0x0e, 0x77, 0x95, 0x77, 0xb8, 0x73, 0xa9, 0x77, 0x2a, 0x45, 0xf4, 0x1a, 0x4e, 0xfa, 0x8a,
|
||||
0x1e, 0xd8, 0x6d, 0x90, 0xa5, 0xf3, 0xbf, 0xb7, 0xa1, 0xf0, 0xc0, 0x5b, 0xab, 0x6b, 0x31, 0xf4,
|
||||
0x03, 0x94, 0xaf, 0x09, 0xb5, 0x7e, 0x27, 0x7d, 0xb2, 0x64, 0x5d, 0xe2, 0xa3, 0x03, 0xa1, 0xef,
|
||||
0xc2, 0x0d, 0x52, 0x3b, 0x4e, 0x46, 0x64, 0x97, 0xf8, 0xd7, 0xc4, 0x1b, 0x52, 0xcb, 0x65, 0x0e,
|
||||
0x45, 0xdf, 0x41, 0x21, 0x8c, 0x0d, 0xe2, 0xaa, 0xa2, 0xa8, 0xe7, 0x0c, 0x4d, 0xe6, 0xd0, 0x17,
|
||||
0x23, 0x7f, 0x84, 0x7c, 0xf0, 0xbe, 0x60, 0x7f, 0x20, 0x71, 0xf2, 0x08, 0xfb, 0xa5, 0x76, 0xb2,
|
||||
0x81, 0x47, 0x5f, 0x4c, 0x07, 0x50, 0xb4, 0x2e, 0xc4, 0xdd, 0x22, 0xda, 0x08, 0x78, 0xad, 0x26,
|
||||
0x7e, 0x47, 0x6b, 0x5b, 0xa6, 0x07, 0x45, 0x61, 0xc4, 0xa3, 0x37, 0x82, 0x74, 0x73, 0xb1, 0xd4,
|
||||
0x3e, 0x7c, 0x89, 0x5e, 0xb9, 0x09, 0xb3, 0x3c, 0xe5, 0xb6, 0xb9, 0x1a, 0x52, 0x6e, 0xff, 0xb6,
|
||||
0x02, 0x34, 0x28, 0xa7, 0x06, 0x06, 0x3a, 0x7b, 0x61, 0x20, 0x24, 0xf9, 0xd5, 0x5f, 0x16, 0x44,
|
||||
0x9e, 0x3f, 0xc3, 0x6e, 0xf4, 0x49, 0xa2, 0x57, 0x82, 0x38, 0x3d, 0x3e, 0x52, 0x15, 0x5b, 0xfb,
|
||||
0x82, 0xaf, 0xbe, 0xfe, 0xb5, 0x35, 0xb6, 0xd8, 0xf3, 0xfc, 0xb1, 0x39, 0x74, 0x66, 0xad, 0x69,
|
||||
0x30, 0x71, 0x6d, 0xcb, 0x1e, 0xdb, 0x84, 0x2d, 0x1c, 0x3a, 0x69, 0x4d, 0xed, 0x51, 0x8b, 0x4f,
|
||||
0x9a, 0x56, 0x62, 0xf1, 0x98, 0xe3, 0xff, 0x90, 0x5c, 0xfc, 0x13, 0x00, 0x00, 0xff, 0xff, 0x3b,
|
||||
0x08, 0xac, 0xe2, 0xd9, 0x08, 0x00, 0x00,
|
||||
// 1055 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0x6b, 0x6f, 0xe2, 0x46,
|
||||
0x14, 0x2d, 0x21, 0x21, 0x70, 0x81, 0xc4, 0x19, 0xf2, 0xf0, 0xb2, 0xd9, 0x86, 0xba, 0x0f, 0xa1,
|
||||
0x3e, 0x40, 0x4d, 0xd4, 0xaa, 0x0f, 0xa9, 0x2a, 0x21, 0x8e, 0x88, 0x20, 0x98, 0xda, 0xce, 0x46,
|
||||
0x5b, 0x55, 0x1a, 0x39, 0x30, 0x21, 0x56, 0xc0, 0xf6, 0x8e, 0x87, 0x02, 0x7f, 0xa4, 0xd2, 0xfe,
|
||||
0x95, 0xfe, 0xba, 0xca, 0xe3, 0x07, 0x63, 0x68, 0x2a, 0xf5, 0x53, 0xf0, 0x39, 0xe7, 0x1e, 0xdf,
|
||||
0xb9, 0x73, 0x7d, 0x6f, 0xe0, 0xd5, 0xdc, 0x9a, 0x4c, 0x08, 0xa3, 0xde, 0xb0, 0x19, 0xfe, 0x7a,
|
||||
0xb6, 0x59, 0xc3, 0xa3, 0x2e, 0x73, 0x51, 0x21, 0xa1, 0xaa, 0x05, 0xea, 0x0d, 0x43, 0xb4, 0x7a,
|
||||
0xe8, 0xdb, 0x63, 0x27, 0x90, 0x07, 0x7f, 0x09, 0x0d, 0x51, 0xe5, 0x37, 0xc8, 0x75, 0xc9, 0x52,
|
||||
0x27, 0xef, 0x51, 0x1d, 0xa4, 0x67, 0xb2, 0xc4, 0x8f, 0xb6, 0x33, 0x26, 0x14, 0x7b, 0xd4, 0x76,
|
||||
0x98, 0x9c, 0xa9, 0x65, 0xea, 0x3b, 0xfa, 0xde, 0x33, 0x59, 0x5e, 0x73, 0x78, 0x10, 0xa0, 0xe8,
|
||||
0x0d, 0x00, 0x57, 0x5a, 0x53, 0x7b, 0xb2, 0x94, 0xb7, 0xb8, 0xa6, 0x10, 0x68, 0x38, 0xa0, 0x94,
|
||||
0xa1, 0xd8, 0x1a, 0x8d, 0xa8, 0x4e, 0xde, 0xcf, 0x88, 0xcf, 0x14, 0x05, 0x4a, 0xe1, 0xa3, 0xef,
|
||||
0xb9, 0x8e, 0x4f, 0x10, 0x82, 0x6d, 0x6b, 0x34, 0xa2, 0xdc, 0xbb, 0xa0, 0xf3, 0xdf, 0xca, 0x67,
|
||||
0x50, 0x34, 0xa9, 0xe5, 0xf8, 0xd6, 0x90, 0xd9, 0xae, 0x83, 0x8e, 0x20, 0xc7, 0x16, 0xf8, 0x89,
|
||||
0x2c, 0xb8, 0xa8, 0xa4, 0xef, 0xb0, 0x45, 0x87, 0x2c, 0x94, 0xef, 0x61, 0x7f, 0x30, 0x7b, 0x98,
|
||||
0xd8, 0xfe, 0x53, 0x62, 0xf6, 0x29, 0x94, 0xbd, 0x10, 0xc2, 0x84, 0x52, 0x37, 0x76, 0x2d, 0x45,
|
||||
0xa0, 0x1a, 0x60, 0xca, 0x1f, 0x80, 0x0c, 0xe2, 0x8c, 0xb4, 0x19, 0xf3, 0x66, 0xcc, 0x8f, 0xf2,
|
||||
0x42, 0xa7, 0x00, 0xbe, 0xc5, 0xb0, 0x47, 0x28, 0x7e, 0x9e, 0xf3, 0xb8, 0xac, 0x9e, 0xf7, 0x2d,
|
||||
0x36, 0x20, 0xb4, 0x3b, 0x47, 0x75, 0xd8, 0x75, 0x43, 0xbd, 0xbc, 0x55, 0xcb, 0xd6, 0x8b, 0xe7,
|
||||
0x7b, 0x8d, 0xa8, 0x7e, 0x0d, 0x73, 0xa1, 0xcd, 0x98, 0x1e, 0xd3, 0xca, 0xd7, 0x50, 0x49, 0xb9,
|
||||
0x47, 0x99, 0x1d, 0x41, 0x8e, 0x5a, 0x73, 0xcc, 0x92, 0x33, 0x50, 0x6b, 0x6e, 0x2e, 0x94, 0xef,
|
||||
0x00, 0xa9, 0x3e, 0xb3, 0xa7, 0x16, 0x23, 0xd7, 0x84, 0xc4, 0xb9, 0x9c, 0x41, 0x71, 0xe8, 0x3a,
|
||||
0x8f, 0x98, 0x59, 0x74, 0x4c, 0xe2, 0xb2, 0x43, 0x00, 0x99, 0x1c, 0x51, 0x2e, 0xa0, 0x92, 0x0a,
|
||||
0x8b, 0x5e, 0xf2, 0x9f, 0x67, 0x50, 0x3e, 0x64, 0xa1, 0x34, 0x20, 0xce, 0xc8, 0x76, 0xc6, 0xc6,
|
||||
0x9c, 0x10, 0x0f, 0x7d, 0x05, 0xf9, 0x20, 0x6b, 0x37, 0xbe, 0xda, 0xe2, 0xf9, 0x7e, 0x63, 0xc2,
|
||||
0xcf, 0xa4, 0xcd, 0xd8, 0x20, 0x80, 0xf5, 0x44, 0x80, 0x7e, 0x84, 0xd2, 0xdc, 0x66, 0x0e, 0xf1,
|
||||
0x7d, 0xcc, 0x96, 0x1e, 0xe1, 0xf7, 0xbc, 0x77, 0x7e, 0xdc, 0x48, 0x9a, 0xab, 0x71, 0x1f, 0xd2,
|
||||
0xe6, 0xd2, 0x23, 0x7a, 0x71, 0xbe, 0x7a, 0x08, 0x1a, 0xc4, 0x9a, 0xba, 0x33, 0x87, 0x61, 0xdf,
|
||||
0x62, 0x72, 0xb6, 0x96, 0xa9, 0x97, 0xf5, 0x42, 0x88, 0x18, 0x16, 0x43, 0x35, 0x28, 0xc5, 0x59,
|
||||
0x3f, 0x2c, 0x19, 0x91, 0xb7, 0xb9, 0x00, 0xc2, 0xbc, 0x2f, 0x97, 0x8c, 0xa0, 0x6f, 0x00, 0x3d,
|
||||
0x50, 0xd7, 0x1a, 0x0d, 0x2d, 0x9f, 0x61, 0x8b, 0x31, 0x32, 0xf5, 0x98, 0x2f, 0xef, 0x70, 0xdd,
|
||||
0x41, 0xc2, 0xb4, 0x22, 0x02, 0x9d, 0xc3, 0x91, 0x43, 0x16, 0x0c, 0xaf, 0x62, 0x9e, 0x88, 0x3d,
|
||||
0x7e, 0x62, 0x72, 0x8e, 0x47, 0x54, 0x02, 0xf2, 0x32, 0xe6, 0x3a, 0x9c, 0x0a, 0x62, 0x68, 0x58,
|
||||
0x7d, 0x32, 0xc2, 0x62, 0xf1, 0xf3, 0x61, 0x4c, 0x42, 0xb6, 0x93, 0x5b, 0x40, 0x17, 0x70, 0xbc,
|
||||
0x8a, 0x49, 0x1d, 0xa1, 0xb0, 0x16, 0x64, 0xac, 0xce, 0x72, 0x08, 0x3b, 0x8f, 0x2e, 0x1d, 0x12,
|
||||
0x79, 0xb7, 0x96, 0xa9, 0xe7, 0xf5, 0xf0, 0x41, 0x39, 0x86, 0x43, 0xf1, 0x6a, 0xe2, 0xae, 0x54,
|
||||
0xee, 0xe1, 0x68, 0x0d, 0x8f, 0xae, 0xfa, 0x17, 0xd8, 0xf3, 0x42, 0x02, 0xfb, 0x9c, 0x91, 0x33,
|
||||
0xbc, 0x2f, 0x4f, 0x84, 0x0b, 0x11, 0x23, 0xf5, 0xb2, 0x27, 0xfa, 0x28, 0x7f, 0x65, 0x60, 0xef,
|
||||
0x72, 0x36, 0xf5, 0x84, 0xae, 0xfb, 0x5f, 0xed, 0x70, 0x06, 0xc5, 0xb0, 0x40, 0xbc, 0x58, 0xbc,
|
||||
0x1b, 0xca, 0x3a, 0x84, 0x50, 0x50, 0xa2, 0x8d, 0x5b, 0xcd, 0x6e, 0xdc, 0x6a, 0x52, 0x89, 0x6d,
|
||||
0xb1, 0x12, 0x07, 0xb0, 0x9f, 0xe4, 0x15, 0x9e, 0xf5, 0xcb, 0x0f, 0x59, 0x28, 0x0a, 0xcd, 0x85,
|
||||
0x2a, 0xb0, 0x7f, 0xd7, 0xef, 0xf6, 0xb5, 0xfb, 0x3e, 0xbe, 0xbf, 0x31, 0xfb, 0xaa, 0x61, 0x48,
|
||||
0x1f, 0x21, 0x19, 0x0e, 0xdb, 0xda, 0xed, 0xed, 0x8d, 0x79, 0xab, 0xf6, 0x4d, 0x6c, 0xde, 0xdc,
|
||||
0xaa, 0xb8, 0xa7, 0xb5, 0xbb, 0x52, 0x06, 0x9d, 0x40, 0x45, 0x60, 0xfa, 0x1a, 0xbe, 0x52, 0x7b,
|
||||
0xad, 0x77, 0xd2, 0x16, 0x3a, 0x82, 0x03, 0x81, 0xd0, 0xd5, 0xb7, 0x5a, 0x57, 0x95, 0xb2, 0x81,
|
||||
0xbe, 0x63, 0xf6, 0xda, 0x58, 0xbb, 0xbe, 0x56, 0x75, 0xf5, 0x2a, 0x26, 0xb6, 0x83, 0x57, 0x70,
|
||||
0xa2, 0xd5, 0x6e, 0xab, 0x03, 0x73, 0xc5, 0xec, 0xa0, 0xcf, 0xe1, 0x93, 0x54, 0x48, 0xf0, 0x7a,
|
||||
0xed, 0xce, 0xc4, 0x86, 0xda, 0xd6, 0xfa, 0x57, 0xb8, 0xa7, 0xbe, 0x55, 0x7b, 0x52, 0x0e, 0x7d,
|
||||
0x01, 0x4a, 0xda, 0xc0, 0xb8, 0x6b, 0xb7, 0x55, 0xc3, 0x48, 0xeb, 0x76, 0xd1, 0x19, 0xbc, 0x5e,
|
||||
0xcb, 0xe0, 0x56, 0x33, 0xd5, 0xd8, 0x55, 0xca, 0xa3, 0x1a, 0x9c, 0xae, 0x67, 0xc2, 0x15, 0x91,
|
||||
0x9f, 0x54, 0x40, 0xa7, 0x20, 0x73, 0x85, 0xe8, 0x1c, 0xe7, 0x0b, 0xe8, 0x10, 0xa4, 0xa8, 0x72,
|
||||
0xb8, 0xab, 0xbe, 0xc3, 0x9d, 0x96, 0xd1, 0x91, 0x8a, 0xe8, 0x35, 0x9c, 0xf4, 0x55, 0x23, 0xb0,
|
||||
0xdb, 0x20, 0x4b, 0x6b, 0xc5, 0x6a, 0xf5, 0xdb, 0x1d, 0x4d, 0x97, 0xca, 0xe7, 0x7f, 0x6f, 0x43,
|
||||
0xe1, 0x9e, 0x77, 0x5c, 0xd7, 0x66, 0xe8, 0x27, 0x28, 0x5f, 0x11, 0x6a, 0xff, 0x49, 0xfa, 0x64,
|
||||
0xc1, 0xba, 0x64, 0x89, 0x0e, 0x84, 0x76, 0x0c, 0x17, 0x4b, 0xf5, 0x38, 0x99, 0x9c, 0x5d, 0xb2,
|
||||
0xbc, 0x22, 0xfe, 0x90, 0xda, 0x1e, 0x73, 0x29, 0xfa, 0x01, 0x0a, 0x61, 0x6c, 0x10, 0x57, 0x11,
|
||||
0x45, 0x3d, 0x77, 0x68, 0x31, 0x97, 0xbe, 0x18, 0xf9, 0x33, 0xe4, 0x83, 0xf7, 0x05, 0x6b, 0x05,
|
||||
0x89, 0x03, 0x49, 0x58, 0x3b, 0xd5, 0x93, 0x0d, 0x3c, 0xfa, 0x90, 0x3a, 0x80, 0xa2, 0x2d, 0x22,
|
||||
0xae, 0x1c, 0xd1, 0x46, 0xc0, 0xab, 0x55, 0xf1, 0xf3, 0x5a, 0x5b, 0x3e, 0x3d, 0x28, 0x0a, 0x93,
|
||||
0x1f, 0xbd, 0x11, 0xa4, 0x9b, 0xfb, 0xa6, 0xfa, 0xf1, 0x4b, 0xf4, 0xca, 0x4d, 0x18, 0xf1, 0x29,
|
||||
0xb7, 0xcd, 0x8d, 0x91, 0x72, 0xfb, 0xb7, 0xcd, 0xa0, 0x43, 0x39, 0x35, 0x47, 0xd0, 0xd9, 0x0b,
|
||||
0x73, 0x22, 0xc9, 0xaf, 0xf6, 0xb2, 0x20, 0xf2, 0xfc, 0x15, 0x76, 0xa3, 0x2f, 0x15, 0xbd, 0x12,
|
||||
0xc4, 0xe9, 0xa9, 0x92, 0xaa, 0xd8, 0xda, 0x87, 0x7d, 0xf9, 0xed, 0xef, 0xcd, 0xb1, 0xcd, 0x9e,
|
||||
0x66, 0x0f, 0x8d, 0xa1, 0x3b, 0x6d, 0x4e, 0x82, 0x41, 0xec, 0xd8, 0xce, 0xd8, 0x21, 0x6c, 0xee,
|
||||
0xd2, 0xe7, 0xe6, 0xc4, 0x19, 0x35, 0xf9, 0x00, 0x6a, 0x26, 0x16, 0x0f, 0x39, 0xfe, 0x7f, 0xca,
|
||||
0xc5, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xf1, 0x3f, 0xcd, 0xa5, 0xf0, 0x08, 0x00, 0x00,
|
||||
}
|
||||
|
||||
// Reference imports to suppress errors if they are not otherwise used.
|
||||
|
@ -164,6 +164,12 @@ enum WitnessType {
|
||||
script that pays to a key solely under our control.
|
||||
*/
|
||||
NESTED_WITNESS_KEY_HASH = 12;
|
||||
|
||||
/*
|
||||
A witness type that allows us to spend our anchor on the commitment
|
||||
transaction.
|
||||
*/
|
||||
COMMITMENT_ANCHOR = 13;
|
||||
}
|
||||
|
||||
message PendingSweep {
|
||||
|
@ -390,6 +390,8 @@ func (w *WalletKit) PendingSweeps(ctx context.Context,
|
||||
witnessType = WitnessType_WITNESS_KEY_HASH
|
||||
case input.NestedWitnessKeyHash:
|
||||
witnessType = WitnessType_NESTED_WITNESS_KEY_HASH
|
||||
case input.CommitmentAnchor:
|
||||
witnessType = WitnessType_COMMITMENT_ANCHOR
|
||||
default:
|
||||
log.Warnf("Unhandled witness type %v for input %v",
|
||||
pendingInput.WitnessType, pendingInput.OutPoint)
|
||||
@ -486,7 +488,7 @@ func (w *WalletKit) BumpFee(ctx context.Context,
|
||||
// bump its fee, which will result in a replacement transaction (RBF)
|
||||
// being broadcast. If it is not aware of the input however,
|
||||
// lnwallet.ErrNotMine is returned.
|
||||
params := sweep.Params{
|
||||
params := sweep.ParamsUpdate{
|
||||
Fee: feePreference,
|
||||
Force: in.Force,
|
||||
}
|
||||
|
@ -8604,13 +8604,19 @@ func assertNumPendingChannels(t *harnessTest, node *lntest.HarnessNode,
|
||||
// on chain as he has no funds in the channel.
|
||||
func assertDLPExecuted(net *lntest.NetworkHarness, t *harnessTest,
|
||||
carol *lntest.HarnessNode, carolStartingBalance int64,
|
||||
dave *lntest.HarnessNode, daveStartingBalance int64) {
|
||||
dave *lntest.HarnessNode, daveStartingBalance int64,
|
||||
anchors bool) {
|
||||
|
||||
// Upon reconnection, the nodes should detect that Dave is out of sync.
|
||||
// Carol should force close the channel using her latest commitment.
|
||||
expectedTxes := 1
|
||||
if anchors {
|
||||
expectedTxes = 2
|
||||
}
|
||||
|
||||
ctxb := context.Background()
|
||||
forceClose, err := waitForTxInMempool(
|
||||
net.Miner.Node, minerMempoolTimeout,
|
||||
_, err := waitForNTxsInMempool(
|
||||
net.Miner.Node, expectedTxes, minerMempoolTimeout,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to find Carol's force close tx in mempool: %v",
|
||||
@ -8633,12 +8639,13 @@ func assertDLPExecuted(net *lntest.NetworkHarness, t *harnessTest,
|
||||
}
|
||||
|
||||
// Generate a single block, which should confirm the closing tx.
|
||||
block := mineBlocks(t, net, 1, 1)[0]
|
||||
assertTxInBlock(t, block, forceClose)
|
||||
block := mineBlocks(t, net, 1, expectedTxes)[0]
|
||||
|
||||
// Dave should sweep his funds immediately, as they are not timelocked.
|
||||
daveSweep, err := waitForTxInMempool(
|
||||
net.Miner.Node, minerMempoolTimeout,
|
||||
// We also expect Dave to sweep his anchor, if present.
|
||||
|
||||
_, err = waitForNTxsInMempool(
|
||||
net.Miner.Node, expectedTxes, minerMempoolTimeout,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to find Dave's sweep tx in mempool: %v", err)
|
||||
@ -8653,8 +8660,7 @@ func assertDLPExecuted(net *lntest.NetworkHarness, t *harnessTest,
|
||||
assertNumPendingChannels(t, carol, 0, 1)
|
||||
|
||||
// Mine the sweep tx.
|
||||
block = mineBlocks(t, net, 1, 1)[0]
|
||||
assertTxInBlock(t, block, daveSweep)
|
||||
block = mineBlocks(t, net, 1, expectedTxes)[0]
|
||||
|
||||
// Now Dave should consider the channel fully closed.
|
||||
assertNumPendingChannels(t, dave, 0, 0)
|
||||
@ -8925,6 +8931,7 @@ func testDataLossProtection(net *lntest.NetworkHarness, t *harnessTest) {
|
||||
// on chain, and both of them properly carry out the DLP protocol.
|
||||
assertDLPExecuted(
|
||||
net, t, carol, carolStartingBalance, dave, daveStartingBalance,
|
||||
false,
|
||||
)
|
||||
|
||||
// As a second part of this test, we will test the scenario where a
|
||||
@ -14048,9 +14055,14 @@ func testChanRestoreScenario(t *harnessTest, net *lntest.NetworkHarness,
|
||||
}
|
||||
defer shutdownAndAssert(net, t, carol)
|
||||
|
||||
// Now that our new node is created, we'll give him some coins it can
|
||||
// use to open channels with Carol.
|
||||
// Now that our new nodes are created, we'll give them some coins for
|
||||
// channel opening and anchor sweeping.
|
||||
ctxt, _ := context.WithTimeout(ctxb, defaultTimeout)
|
||||
err = net.SendCoins(ctxt, btcutil.SatoshiPerBitcoin, carol)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to send coins to dave: %v", err)
|
||||
}
|
||||
ctxt, _ = context.WithTimeout(ctxb, defaultTimeout)
|
||||
err = net.SendCoins(ctxt, btcutil.SatoshiPerBitcoin, dave)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to send coins to dave: %v", err)
|
||||
@ -14216,6 +14228,7 @@ func testChanRestoreScenario(t *harnessTest, net *lntest.NetworkHarness,
|
||||
// end of the protocol.
|
||||
assertDLPExecuted(
|
||||
net, t, carol, carolStartingBalance, dave, daveStartingBalance,
|
||||
testCase.anchorCommit,
|
||||
)
|
||||
}
|
||||
|
||||
|
@ -5115,6 +5115,11 @@ type UnilateralCloseSummary struct {
|
||||
// RemoteCommit is the exact commitment state that the remote party
|
||||
// broadcast.
|
||||
RemoteCommit channeldb.ChannelCommitment
|
||||
|
||||
// AnchorResolution contains the data required to sweep our anchor
|
||||
// output. If the channel type doesn't include anchors, the value of
|
||||
// this field will be nil.
|
||||
AnchorResolution *AnchorResolution
|
||||
}
|
||||
|
||||
// NewUnilateralCloseSummary creates a new summary that provides the caller
|
||||
@ -5229,12 +5234,20 @@ func NewUnilateralCloseSummary(chanState *channeldb.OpenChannel, signer input.Si
|
||||
closeSummary.LastChanSyncMsg = chanSync
|
||||
}
|
||||
|
||||
anchorResolution, err := NewAnchorResolution(
|
||||
chanState, commitTxBroadcast,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &UnilateralCloseSummary{
|
||||
SpendDetail: commitSpend,
|
||||
ChannelCloseSummary: closeSummary,
|
||||
CommitResolution: commitResolution,
|
||||
HtlcResolutions: htlcResolutions,
|
||||
RemoteCommit: remoteCommit,
|
||||
AnchorResolution: anchorResolution,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@ -5685,6 +5698,16 @@ func extractHtlcResolutions(feePerKw chainfee.SatPerKWeight, ourCommit bool,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// AnchorResolution holds the information necessary to spend our commitment tx
|
||||
// anchor.
|
||||
type AnchorResolution struct {
|
||||
// AnchorSignDescriptor is the sign descriptor for our anchor.
|
||||
AnchorSignDescriptor input.SignDescriptor
|
||||
|
||||
// CommitAnchor is the anchor outpoint on the commit tx.
|
||||
CommitAnchor wire.OutPoint
|
||||
}
|
||||
|
||||
// LocalForceCloseSummary describes the final commitment state before the
|
||||
// channel is locked-down to initiate a force closure by broadcasting the
|
||||
// latest state on-chain. If we intend to broadcast this this state, the
|
||||
@ -5717,6 +5740,11 @@ type LocalForceCloseSummary struct {
|
||||
// ChanSnapshot is a snapshot of the final state of the channel at the
|
||||
// time the summary was created.
|
||||
ChanSnapshot channeldb.ChannelSnapshot
|
||||
|
||||
// AnchorResolution contains the data required to sweep the anchor
|
||||
// output. If the channel type doesn't include anchors, the value of
|
||||
// this field will be nil.
|
||||
AnchorResolution *AnchorResolution
|
||||
}
|
||||
|
||||
// ForceClose executes a unilateral closure of the transaction at the current
|
||||
@ -5855,12 +5883,20 @@ func NewLocalForceCloseSummary(chanState *channeldb.OpenChannel, signer input.Si
|
||||
return nil, err
|
||||
}
|
||||
|
||||
anchorResolution, err := NewAnchorResolution(
|
||||
chanState, commitTx,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &LocalForceCloseSummary{
|
||||
ChanPoint: chanState.FundingOutpoint,
|
||||
CloseTx: commitTx,
|
||||
CommitResolution: commitResolution,
|
||||
HtlcResolutions: htlcResolutions,
|
||||
ChanSnapshot: *chanState.Snapshot(),
|
||||
AnchorResolution: anchorResolution,
|
||||
}, nil
|
||||
}
|
||||
|
||||
@ -6019,6 +6055,109 @@ func (lc *LightningChannel) CompleteCooperativeClose(localSig, remoteSig []byte,
|
||||
return closeTx, ourBalance, nil
|
||||
}
|
||||
|
||||
// NewAnchorResolutions returns the anchor resolutions for all currently valid
|
||||
// commitment transactions. Because we have no view on the mempool, we can only
|
||||
// blindly anchor all of these txes down.
|
||||
func (lc *LightningChannel) NewAnchorResolutions() ([]*AnchorResolution,
|
||||
error) {
|
||||
|
||||
lc.Lock()
|
||||
defer lc.Unlock()
|
||||
|
||||
var resolutions []*AnchorResolution
|
||||
|
||||
// Add anchor for local commitment tx, if any.
|
||||
localRes, err := NewAnchorResolution(
|
||||
lc.channelState, lc.channelState.LocalCommitment.CommitTx,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if localRes != nil {
|
||||
resolutions = append(resolutions, localRes)
|
||||
}
|
||||
|
||||
// Add anchor for remote commitment tx, if any.
|
||||
remoteRes, err := NewAnchorResolution(
|
||||
lc.channelState, lc.channelState.RemoteCommitment.CommitTx,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if remoteRes != nil {
|
||||
resolutions = append(resolutions, remoteRes)
|
||||
}
|
||||
|
||||
// Add anchor for remote pending commitment tx, if any.
|
||||
remotePendingCommit, err := lc.channelState.RemoteCommitChainTip()
|
||||
if err != nil && err != channeldb.ErrNoPendingCommit {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if remotePendingCommit != nil {
|
||||
remotePendingRes, err := NewAnchorResolution(
|
||||
lc.channelState,
|
||||
remotePendingCommit.Commitment.CommitTx,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if remotePendingRes != nil {
|
||||
resolutions = append(resolutions, remotePendingRes)
|
||||
}
|
||||
}
|
||||
|
||||
return resolutions, nil
|
||||
}
|
||||
|
||||
// NewAnchorResolution returns the information that is required to sweep the
|
||||
// local anchor.
|
||||
func NewAnchorResolution(chanState *channeldb.OpenChannel,
|
||||
commitTx *wire.MsgTx) (*AnchorResolution, error) {
|
||||
|
||||
// Return nil resolution if the channel has no anchors.
|
||||
if !chanState.ChanType.HasAnchors() {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// Derive our local anchor script.
|
||||
localAnchor, _, err := CommitScriptAnchors(
|
||||
&chanState.LocalChanCfg, &chanState.RemoteChanCfg,
|
||||
)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
// Look up the script on the commitment transaction. It may not be
|
||||
// present if there is no output paying to us.
|
||||
found, index := input.FindScriptOutputIndex(commitTx, localAnchor.PkScript)
|
||||
if !found {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
outPoint := &wire.OutPoint{
|
||||
Hash: commitTx.TxHash(),
|
||||
Index: index,
|
||||
}
|
||||
|
||||
// Instantiate the sign descriptor that allows sweeping of the anchor.
|
||||
signDesc := &input.SignDescriptor{
|
||||
KeyDesc: chanState.LocalChanCfg.MultiSigKey,
|
||||
WitnessScript: localAnchor.WitnessScript,
|
||||
Output: &wire.TxOut{
|
||||
PkScript: localAnchor.PkScript,
|
||||
Value: int64(anchorSize),
|
||||
},
|
||||
HashType: txscript.SigHashAll,
|
||||
}
|
||||
|
||||
return &AnchorResolution{
|
||||
CommitAnchor: *outPoint,
|
||||
AnchorSignDescriptor: *signDesc,
|
||||
}, nil
|
||||
}
|
||||
|
||||
// AvailableBalance returns the current balance available for sending within
|
||||
// the channel. By available balance, we mean that if at this very instance a
|
||||
// new commitment were to be created which evals all the log entries, what
|
||||
|
@ -60,7 +60,12 @@ func testAddSettleWorkflow(t *testing.T, tweakless bool) {
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(tweakless)
|
||||
chanType := channeldb.SingleFunderTweaklessBit
|
||||
if !tweakless {
|
||||
chanType = channeldb.SingleFunderBit
|
||||
}
|
||||
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(chanType)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -390,7 +395,9 @@ func TestCheckCommitTxSize(t *testing.T) {
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -449,7 +456,9 @@ func TestCooperativeChannelClosure(t *testing.T) {
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -517,12 +526,37 @@ func TestCooperativeChannelClosure(t *testing.T) {
|
||||
// force close generates HTLC resolutions that are capable of sweeping both
|
||||
// incoming and outgoing HTLC's.
|
||||
func TestForceClose(t *testing.T) {
|
||||
t.Run("tweakless", func(t *testing.T) {
|
||||
testForceClose(t, &forceCloseTestCase{
|
||||
chanType: channeldb.SingleFunderTweaklessBit,
|
||||
expectedCommitWeight: input.CommitWeight,
|
||||
})
|
||||
})
|
||||
t.Run("anchors", func(t *testing.T) {
|
||||
testForceClose(t, &forceCloseTestCase{
|
||||
chanType: channeldb.SingleFunderTweaklessBit |
|
||||
channeldb.AnchorOutputsBit,
|
||||
expectedCommitWeight: input.AnchorCommitWeight,
|
||||
anchorAmt: anchorSize * 2,
|
||||
})
|
||||
})
|
||||
}
|
||||
|
||||
type forceCloseTestCase struct {
|
||||
chanType channeldb.ChannelType
|
||||
expectedCommitWeight int64
|
||||
anchorAmt btcutil.Amount
|
||||
}
|
||||
|
||||
func testForceClose(t *testing.T, testCase *forceCloseTestCase) {
|
||||
t.Parallel()
|
||||
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
testCase.chanType,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -583,6 +617,36 @@ func TestForceClose(t *testing.T) {
|
||||
1, len(closeSummary.HtlcResolutions.IncomingHTLCs))
|
||||
}
|
||||
|
||||
// Verify the anchor resolutions for the anchor commitment format.
|
||||
if testCase.chanType.HasAnchors() {
|
||||
// Check the close summary resolution.
|
||||
anchorRes := closeSummary.AnchorResolution
|
||||
if anchorRes == nil {
|
||||
t.Fatal("expected anchor resolution")
|
||||
}
|
||||
if anchorRes.CommitAnchor.Hash != closeSummary.CloseTx.TxHash() {
|
||||
t.Fatal("commit tx not referenced by anchor res")
|
||||
}
|
||||
if anchorRes.AnchorSignDescriptor.Output.Value !=
|
||||
int64(anchorSize) {
|
||||
|
||||
t.Fatal("unexpected anchor size")
|
||||
}
|
||||
if anchorRes.AnchorSignDescriptor.WitnessScript == nil {
|
||||
t.Fatal("expected anchor witness script")
|
||||
}
|
||||
|
||||
// Check the pre-confirmation resolutions.
|
||||
resList, err := aliceChannel.NewAnchorResolutions()
|
||||
if err != nil {
|
||||
t.Fatalf("pre-confirmation resolution error: %v", err)
|
||||
}
|
||||
|
||||
if len(resList) != 2 {
|
||||
t.Fatal("expected two resolutions")
|
||||
}
|
||||
}
|
||||
|
||||
// The SelfOutputSignDesc should be non-nil since the output to-self is
|
||||
// non-dust.
|
||||
aliceCommitResolution := closeSummary.CommitResolution
|
||||
@ -601,12 +665,16 @@ func TestForceClose(t *testing.T) {
|
||||
|
||||
// Factoring in the fee rate, Alice's amount should properly reflect
|
||||
// that we've added two additional HTLC to the commitment transaction.
|
||||
totalCommitWeight := int64(input.CommitWeight + (input.HTLCWeight * 2))
|
||||
totalCommitWeight := testCase.expectedCommitWeight +
|
||||
(input.HTLCWeight * 2)
|
||||
feePerKw := chainfee.SatPerKWeight(
|
||||
aliceChannel.channelState.LocalCommitment.FeePerKw,
|
||||
)
|
||||
commitFee := feePerKw.FeeForWeight(totalCommitWeight)
|
||||
expectedAmount := (aliceChannel.Capacity / 2) - htlcAmount.ToSatoshis() - commitFee
|
||||
|
||||
expectedAmount := (aliceChannel.Capacity / 2) -
|
||||
htlcAmount.ToSatoshis() - commitFee - testCase.anchorAmt
|
||||
|
||||
if aliceCommitResolution.SelfOutputSignDesc.Output.Value != int64(expectedAmount) {
|
||||
t.Fatalf("alice incorrect output value in SelfOutputSignDesc, "+
|
||||
"expected %v, got %v", int64(expectedAmount),
|
||||
@ -808,7 +876,9 @@ func TestForceCloseDustOutput(t *testing.T) {
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -926,7 +996,9 @@ func TestDustHTLCFees(t *testing.T) {
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -970,7 +1042,7 @@ func TestDustHTLCFees(t *testing.T) {
|
||||
|
||||
// The commitment fee paid should be the same, as there have been no
|
||||
// new material outputs added.
|
||||
defaultFee := calcStaticFee(0)
|
||||
defaultFee := calcStaticFee(channeldb.SingleFunderTweaklessBit, 0)
|
||||
if aliceChannel.channelState.LocalCommitment.CommitFee != defaultFee {
|
||||
t.Fatalf("dust htlc amounts not subtracted from commitment fee "+
|
||||
"expected %v, got %v", defaultFee,
|
||||
@ -1003,7 +1075,9 @@ func TestHTLCDustLimit(t *testing.T) {
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -1046,7 +1120,7 @@ func TestHTLCDustLimit(t *testing.T) {
|
||||
t.Fatalf("incorrect # of outputs: expected %v, got %v",
|
||||
2, len(bobCommitment.txn.TxOut))
|
||||
}
|
||||
defaultFee := calcStaticFee(0)
|
||||
defaultFee := calcStaticFee(channeldb.SingleFunderTweaklessBit, 0)
|
||||
if bobChannel.channelState.LocalCommitment.CommitFee != defaultFee {
|
||||
t.Fatalf("dust htlc amount was subtracted from commitment fee "+
|
||||
"expected %v, got %v", defaultFee,
|
||||
@ -1092,7 +1166,9 @@ func TestHTLCSigNumber(t *testing.T) {
|
||||
// Create a test channel funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC. Alice's dustlimit is 200 sat, while
|
||||
// Bob has 1300 sat.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -1266,7 +1342,9 @@ func TestChannelBalanceDustLimit(t *testing.T) {
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -1280,7 +1358,7 @@ func TestChannelBalanceDustLimit(t *testing.T) {
|
||||
// This amount should leave an amount larger than Alice's dust limit
|
||||
// once fees have been subtracted, but smaller than Bob's dust limit.
|
||||
// We account in fees for the HTLC we will be adding.
|
||||
defaultFee := calcStaticFee(1)
|
||||
defaultFee := calcStaticFee(channeldb.SingleFunderTweaklessBit, 1)
|
||||
aliceBalance := aliceChannel.channelState.LocalCommitment.LocalBalance.ToSatoshis()
|
||||
htlcSat := aliceBalance - defaultFee
|
||||
htlcSat += HtlcSuccessFee(
|
||||
@ -1337,7 +1415,9 @@ func TestStateUpdatePersistence(t *testing.T) {
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -1678,7 +1758,9 @@ func TestCancelHTLC(t *testing.T) {
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -1711,7 +1793,7 @@ func TestCancelHTLC(t *testing.T) {
|
||||
// With the HTLC committed, Alice's balance should reflect the clearing
|
||||
// of the new HTLC.
|
||||
aliceExpectedBalance := btcutil.Amount(btcutil.SatoshiPerBitcoin*4) -
|
||||
calcStaticFee(1)
|
||||
calcStaticFee(channeldb.SingleFunderTweaklessBit, 1)
|
||||
if aliceChannel.channelState.LocalCommitment.LocalBalance.ToSatoshis() !=
|
||||
aliceExpectedBalance {
|
||||
t.Fatalf("Alice's balance is wrong: expected %v, got %v",
|
||||
@ -1756,12 +1838,13 @@ func TestCancelHTLC(t *testing.T) {
|
||||
}
|
||||
|
||||
expectedBalance := btcutil.Amount(btcutil.SatoshiPerBitcoin * 5)
|
||||
staticFee := calcStaticFee(channeldb.SingleFunderTweaklessBit, 0)
|
||||
if aliceChannel.channelState.LocalCommitment.LocalBalance.ToSatoshis() !=
|
||||
expectedBalance-calcStaticFee(0) {
|
||||
expectedBalance-staticFee {
|
||||
|
||||
t.Fatalf("balance is wrong: expected %v, got %v",
|
||||
aliceChannel.channelState.LocalCommitment.LocalBalance.ToSatoshis(),
|
||||
expectedBalance-calcStaticFee(0))
|
||||
expectedBalance-staticFee)
|
||||
}
|
||||
if aliceChannel.channelState.LocalCommitment.RemoteBalance.ToSatoshis() !=
|
||||
expectedBalance {
|
||||
@ -1778,11 +1861,11 @@ func TestCancelHTLC(t *testing.T) {
|
||||
expectedBalance)
|
||||
}
|
||||
if bobChannel.channelState.LocalCommitment.RemoteBalance.ToSatoshis() !=
|
||||
expectedBalance-calcStaticFee(0) {
|
||||
expectedBalance-staticFee {
|
||||
|
||||
t.Fatalf("balance is wrong: expected %v, got %v",
|
||||
bobChannel.channelState.LocalCommitment.RemoteBalance.ToSatoshis(),
|
||||
expectedBalance-calcStaticFee(0))
|
||||
expectedBalance-staticFee)
|
||||
}
|
||||
}
|
||||
|
||||
@ -1792,7 +1875,9 @@ func TestCooperativeCloseDustAdherence(t *testing.T) {
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -1957,7 +2042,9 @@ func TestCooperativeCloseDustAdherence(t *testing.T) {
|
||||
func TestUpdateFeeAdjustments(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -2012,7 +2099,9 @@ func TestUpdateFeeAdjustments(t *testing.T) {
|
||||
func TestUpdateFeeFail(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -2046,7 +2135,9 @@ func TestUpdateFeeFail(t *testing.T) {
|
||||
func TestUpdateFeeConcurrentSig(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -2132,7 +2223,9 @@ func TestUpdateFeeSenderCommits(t *testing.T) {
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -2254,7 +2347,9 @@ func TestUpdateFeeReceiverCommits(t *testing.T) {
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -2403,7 +2498,9 @@ func TestUpdateFeeReceiverSendsUpdate(t *testing.T) {
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -2432,7 +2529,9 @@ func TestUpdateFeeMultipleUpdates(t *testing.T) {
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -2552,7 +2651,9 @@ func TestAddHTLCNegativeBalance(t *testing.T) {
|
||||
|
||||
// We'll kick off the test by creating our channels which both are
|
||||
// loaded with 5 BTC each.
|
||||
aliceChannel, _, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, _, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -2633,7 +2734,9 @@ func TestChanSyncFullySynced(t *testing.T) {
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -2753,7 +2856,9 @@ func TestChanSyncOweCommitment(t *testing.T) {
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -3064,7 +3169,9 @@ func TestChanSyncOweCommitmentPendingRemote(t *testing.T) {
|
||||
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -3187,7 +3294,9 @@ func TestChanSyncOweRevocation(t *testing.T) {
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -3377,7 +3486,9 @@ func TestChanSyncOweRevocationAndCommit(t *testing.T) {
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -3546,7 +3657,9 @@ func TestChanSyncOweRevocationAndCommitForceTransition(t *testing.T) {
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -3775,7 +3888,9 @@ func TestChanSyncFailure(t *testing.T) {
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(false)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -4028,7 +4143,9 @@ func TestFeeUpdateRejectInsaneFee(t *testing.T) {
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, _, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, _, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -4056,7 +4173,9 @@ func TestChannelRetransmissionFeeUpdate(t *testing.T) {
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -4245,7 +4364,9 @@ func TestFeeUpdateOldDiskFormat(t *testing.T) {
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -4472,7 +4593,9 @@ func TestChanSyncUnableToSync(t *testing.T) {
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(false)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -4509,7 +4632,9 @@ func TestChanSyncInvalidLastSecret(t *testing.T) {
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(false)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -4599,7 +4724,9 @@ func TestChanAvailableBandwidth(t *testing.T) {
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -4735,7 +4862,9 @@ func TestChanAvailableBalanceNearHtlcFee(t *testing.T) {
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -4915,7 +5044,9 @@ func TestSignCommitmentFailNotLockedIn(t *testing.T) {
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, _, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, _, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -4940,7 +5071,9 @@ func TestLockedInHtlcForwardingSkipAfterRestart(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
// First, we'll make a channel between Alice and Bob.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -5254,7 +5387,9 @@ func TestInvalidCommitSigError(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
// First, we'll make a channel between Alice and Bob.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -5301,7 +5436,9 @@ func TestChannelUnilateralCloseHtlcResolution(t *testing.T) {
|
||||
// Create a test channel which will be used for the duration of this
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -5460,7 +5597,7 @@ func TestChannelUnilateralClosePendingCommit(t *testing.T) {
|
||||
// unittest. The channel will be funded evenly with Alice having 5 BTC,
|
||||
// and Bob having 5 BTC.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
false,
|
||||
channeldb.SingleFunderBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
@ -5587,7 +5724,9 @@ func TestDesyncHTLCs(t *testing.T) {
|
||||
|
||||
// We'll kick off the test by creating our channels which both are
|
||||
// loaded with 5 BTC each.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -5654,7 +5793,9 @@ func TestMaxAcceptedHTLCs(t *testing.T) {
|
||||
|
||||
// We'll kick off the test by creating our channels which both are
|
||||
// loaded with 5 BTC each.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -5786,7 +5927,9 @@ func TestMaxAsynchronousHtlcs(t *testing.T) {
|
||||
|
||||
// We'll kick off the test by creating our channels which both are
|
||||
// loaded with 5 BTC each.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -5921,7 +6064,9 @@ func TestMaxPendingAmount(t *testing.T) {
|
||||
|
||||
// We'll kick off the test by creating our channels which both are
|
||||
// loaded with 5 BTC each.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -6005,7 +6150,7 @@ func TestChanReserve(t *testing.T) {
|
||||
// We'll kick off the test by creating our channels which both
|
||||
// are loaded with 5 BTC each.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
true,
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
@ -6214,7 +6359,7 @@ func TestChanReserveRemoteInitiator(t *testing.T) {
|
||||
|
||||
// We start out with a channel where both parties have 5 BTC.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
true,
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@ -6267,7 +6412,7 @@ func TestChanReserveLocalInitiatorDustHtlc(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
true,
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
@ -6313,7 +6458,9 @@ func TestMinHTLC(t *testing.T) {
|
||||
|
||||
// We'll kick off the test by creating our channels which both are
|
||||
// loaded with 5 BTC each.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -6366,7 +6513,9 @@ func TestNewBreachRetributionSkipsDustHtlcs(t *testing.T) {
|
||||
|
||||
// We'll kick off the test by creating our channels which both are
|
||||
// loaded with 5 BTC each.
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -6538,7 +6687,9 @@ func compareLogs(a, b *updateLog) error {
|
||||
func TestChannelRestoreUpdateLogs(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -6707,7 +6858,9 @@ func restoreAndAssert(t *testing.T, channel *LightningChannel, numAddsLocal,
|
||||
func TestChannelRestoreUpdateLogsFailedHTLC(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -6830,7 +6983,9 @@ func TestChannelRestoreUpdateLogsFailedHTLC(t *testing.T) {
|
||||
func TestDuplicateFailRejection(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -6908,7 +7063,9 @@ func TestDuplicateFailRejection(t *testing.T) {
|
||||
func TestDuplicateSettleRejection(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -6989,7 +7146,9 @@ func TestDuplicateSettleRejection(t *testing.T) {
|
||||
func TestChannelRestoreCommitHeight(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -7176,7 +7335,9 @@ func TestChannelRestoreCommitHeight(t *testing.T) {
|
||||
func TestForceCloseFailLocalDataLoss(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
aliceChannel, _, cleanUp, err := CreateTestChannels(false)
|
||||
aliceChannel, _, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -7207,7 +7368,9 @@ func TestForceCloseFailLocalDataLoss(t *testing.T) {
|
||||
func TestForceCloseBorkedState(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(false)
|
||||
aliceChannel, bobChannel, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
@ -7284,7 +7447,9 @@ func TestForceCloseBorkedState(t *testing.T) {
|
||||
func TestChannelMaxFeeRate(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
aliceChannel, _, cleanUp, err := CreateTestChannels(true)
|
||||
aliceChannel, _, cleanUp, err := CreateTestChannels(
|
||||
channeldb.SingleFunderTweaklessBit,
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to create test channels: %v", err)
|
||||
}
|
||||
|
@ -91,7 +91,7 @@ var (
|
||||
// the test has been finalized. The clean up function will remote all temporary
|
||||
// files created. If tweaklessCommits is true, then the commits within the
|
||||
// channels will use the new format, otherwise the legacy format.
|
||||
func CreateTestChannels(tweaklessCommits bool) (
|
||||
func CreateTestChannels(chanType channeldb.ChannelType) (
|
||||
*LightningChannel, *LightningChannel, func(), error) {
|
||||
|
||||
channelCapacity, err := btcutil.NewAmount(10)
|
||||
@ -206,11 +206,6 @@ func CreateTestChannels(tweaklessCommits bool) (
|
||||
}
|
||||
aliceCommitPoint := input.ComputeCommitmentPoint(aliceFirstRevoke[:])
|
||||
|
||||
chanType := channeldb.SingleFunderTweaklessBit
|
||||
if !tweaklessCommits {
|
||||
chanType = channeldb.SingleFunderBit
|
||||
}
|
||||
|
||||
aliceCommitTx, bobCommitTx, err := CreateCommitmentTxns(
|
||||
channelBal, channelBal, &aliceCfg, &bobCfg, aliceCommitPoint,
|
||||
bobCommitPoint, *fundingTxIn, chanType,
|
||||
@ -244,12 +239,21 @@ func CreateTestChannels(tweaklessCommits bool) (
|
||||
if err != nil {
|
||||
return nil, nil, nil, err
|
||||
}
|
||||
commitFee := calcStaticFee(0)
|
||||
commitFee := calcStaticFee(chanType, 0)
|
||||
var anchorAmt btcutil.Amount
|
||||
if chanType.HasAnchors() {
|
||||
anchorAmt += 2 * anchorSize
|
||||
}
|
||||
|
||||
aliceBalance := lnwire.NewMSatFromSatoshis(
|
||||
channelBal - commitFee - anchorAmt,
|
||||
)
|
||||
bobBalance := lnwire.NewMSatFromSatoshis(channelBal)
|
||||
|
||||
aliceCommit := channeldb.ChannelCommitment{
|
||||
CommitHeight: 0,
|
||||
LocalBalance: lnwire.NewMSatFromSatoshis(channelBal - commitFee),
|
||||
RemoteBalance: lnwire.NewMSatFromSatoshis(channelBal),
|
||||
LocalBalance: aliceBalance,
|
||||
RemoteBalance: bobBalance,
|
||||
CommitFee: commitFee,
|
||||
FeePerKw: btcutil.Amount(feePerKw),
|
||||
CommitTx: aliceCommitTx,
|
||||
@ -257,8 +261,8 @@ func CreateTestChannels(tweaklessCommits bool) (
|
||||
}
|
||||
bobCommit := channeldb.ChannelCommitment{
|
||||
CommitHeight: 0,
|
||||
LocalBalance: lnwire.NewMSatFromSatoshis(channelBal),
|
||||
RemoteBalance: lnwire.NewMSatFromSatoshis(channelBal - commitFee),
|
||||
LocalBalance: bobBalance,
|
||||
RemoteBalance: aliceBalance,
|
||||
CommitFee: commitFee,
|
||||
FeePerKw: btcutil.Amount(feePerKw),
|
||||
CommitTx: bobCommitTx,
|
||||
@ -449,14 +453,14 @@ func txFromHex(txHex string) (*btcutil.Tx, error) {
|
||||
// calculations into account.
|
||||
//
|
||||
// TODO(bvu): Refactor when dynamic fee estimation is added.
|
||||
func calcStaticFee(numHTLCs int) btcutil.Amount {
|
||||
func calcStaticFee(chanType channeldb.ChannelType, numHTLCs int) btcutil.Amount {
|
||||
const (
|
||||
commitWeight = btcutil.Amount(724)
|
||||
htlcWeight = 172
|
||||
feePerKw = btcutil.Amount(24/4) * 1000
|
||||
htlcWeight = 172
|
||||
feePerKw = btcutil.Amount(24/4) * 1000
|
||||
)
|
||||
return feePerKw * (commitWeight +
|
||||
btcutil.Amount(htlcWeight*numHTLCs)) / 1000
|
||||
return feePerKw *
|
||||
(btcutil.Amount(CommitWeight(chanType) +
|
||||
htlcWeight*int64(numHTLCs))) / 1000
|
||||
}
|
||||
|
||||
// ForceStateTransition executes the necessary interaction between the two
|
||||
|
72
rpcserver.go
72
rpcserver.go
@ -2757,6 +2757,43 @@ func (r *rpcServer) PendingChannels(ctx context.Context,
|
||||
for _, waitingClose := range waitingCloseChans {
|
||||
pub := waitingClose.IdentityPub.SerializeCompressed()
|
||||
chanPoint := waitingClose.FundingOutpoint
|
||||
|
||||
var commitments lnrpc.PendingChannelsResponse_Commitments
|
||||
|
||||
// Report local commit. May not be present when DLP is active.
|
||||
if waitingClose.LocalCommitment.CommitTx != nil {
|
||||
commitments.LocalTxid =
|
||||
waitingClose.LocalCommitment.CommitTx.TxHash().
|
||||
String()
|
||||
}
|
||||
|
||||
// Report remote commit. May not be present when DLP is active.
|
||||
if waitingClose.RemoteCommitment.CommitTx != nil {
|
||||
commitments.RemoteTxid =
|
||||
waitingClose.RemoteCommitment.CommitTx.TxHash().
|
||||
String()
|
||||
}
|
||||
|
||||
// Report the remote pending commit if any.
|
||||
remoteCommitDiff, err := waitingClose.RemoteCommitChainTip()
|
||||
|
||||
switch {
|
||||
|
||||
// Don't set hash if there is no pending remote commit.
|
||||
case err == channeldb.ErrNoPendingCommit:
|
||||
|
||||
// An unexpected error occurred.
|
||||
case err != nil:
|
||||
return nil, err
|
||||
|
||||
// There is a pending remote commit. Set its hash in the
|
||||
// response.
|
||||
default:
|
||||
hash := remoteCommitDiff.Commitment.CommitTx.TxHash()
|
||||
commitments.RemotePendingTxid = hash.String()
|
||||
|
||||
}
|
||||
|
||||
channel := &lnrpc.PendingChannelsResponse_PendingChannel{
|
||||
RemoteNodePub: hex.EncodeToString(pub),
|
||||
ChannelPoint: chanPoint.String(),
|
||||
@ -2767,14 +2804,16 @@ func (r *rpcServer) PendingChannels(ctx context.Context,
|
||||
RemoteChanReserveSat: int64(waitingClose.RemoteChanCfg.ChanReserve),
|
||||
}
|
||||
|
||||
waitingCloseResp := &lnrpc.PendingChannelsResponse_WaitingCloseChannel{
|
||||
Channel: channel,
|
||||
LimboBalance: channel.LocalBalance,
|
||||
Commitments: &commitments,
|
||||
}
|
||||
|
||||
// A close tx has been broadcasted, all our balance will be in
|
||||
// limbo until it confirms.
|
||||
resp.WaitingCloseChannels = append(
|
||||
resp.WaitingCloseChannels,
|
||||
&lnrpc.PendingChannelsResponse_WaitingCloseChannel{
|
||||
Channel: channel,
|
||||
LimboBalance: channel.LocalBalance,
|
||||
},
|
||||
resp.WaitingCloseChannels, waitingCloseResp,
|
||||
)
|
||||
|
||||
resp.TotalLimboBalance += channel.LocalBalance
|
||||
@ -2818,6 +2857,12 @@ func (r *rpcServer) arbitratorPopulateForceCloseResp(chanPoint *wire.OutPoint,
|
||||
case contractcourt.ReportOutputIncomingHtlc,
|
||||
contractcourt.ReportOutputOutgoingHtlc:
|
||||
|
||||
// Don't report details on htlcs that are no longer in
|
||||
// limbo.
|
||||
if report.LimboBalance == 0 {
|
||||
break
|
||||
}
|
||||
|
||||
incoming := report.Type == contractcourt.ReportOutputIncomingHtlc
|
||||
htlc := &lnrpc.PendingHTLC{
|
||||
Incoming: incoming,
|
||||
@ -2834,6 +2879,22 @@ func (r *rpcServer) arbitratorPopulateForceCloseResp(chanPoint *wire.OutPoint,
|
||||
|
||||
forceClose.PendingHtlcs = append(forceClose.PendingHtlcs, htlc)
|
||||
|
||||
case contractcourt.ReportOutputAnchor:
|
||||
// There are three resolution states for the anchor:
|
||||
// limbo, lost and recovered. Derive the current state
|
||||
// from the limbo and recovered balances.
|
||||
switch {
|
||||
|
||||
case report.RecoveredBalance != 0:
|
||||
forceClose.Anchor = lnrpc.PendingChannelsResponse_ForceClosedChannel_RECOVERED
|
||||
|
||||
case report.LimboBalance != 0:
|
||||
forceClose.Anchor = lnrpc.PendingChannelsResponse_ForceClosedChannel_LIMBO
|
||||
|
||||
default:
|
||||
forceClose.Anchor = lnrpc.PendingChannelsResponse_ForceClosedChannel_LOST
|
||||
}
|
||||
|
||||
default:
|
||||
return fmt.Errorf("unknown report output type: %v",
|
||||
report.Type)
|
||||
@ -2841,7 +2902,6 @@ func (r *rpcServer) arbitratorPopulateForceCloseResp(chanPoint *wire.OutPoint,
|
||||
|
||||
forceClose.LimboBalance += int64(report.LimboBalance)
|
||||
forceClose.RecoveredBalance += int64(report.RecoveredBalance)
|
||||
|
||||
}
|
||||
|
||||
return nil
|
||||
|
@ -82,6 +82,18 @@ type Params struct {
|
||||
ExclusiveGroup *uint64
|
||||
}
|
||||
|
||||
// ParamsUpdate contains a new set of parameters to update a pending sweep with.
|
||||
type ParamsUpdate struct {
|
||||
// Fee is the fee preference of the client who requested the input to be
|
||||
// swept. If a confirmation target is specified, then we'll map it into
|
||||
// a fee rate whenever we attempt to cluster inputs for a sweep.
|
||||
Fee FeePreference
|
||||
|
||||
// Force indicates whether the input should be swept regardless of
|
||||
// whether it is economical to do so.
|
||||
Force bool
|
||||
}
|
||||
|
||||
// String returns a human readable interpretation of the sweep parameters.
|
||||
func (p Params) String() string {
|
||||
return fmt.Sprintf("fee=%v, force=%v, exclusive_group=%v",
|
||||
@ -174,7 +186,7 @@ type PendingInput struct {
|
||||
// intent to update the sweep parameters of a given input.
|
||||
type updateReq struct {
|
||||
input wire.OutPoint
|
||||
params Params
|
||||
params ParamsUpdate
|
||||
responseChan chan *updateResp
|
||||
}
|
||||
|
||||
@ -372,6 +384,12 @@ func (s *UtxoSweeper) Start() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
// RelayFeePerKW returns the minimum fee rate required for transactions to be
|
||||
// relayed.
|
||||
func (s *UtxoSweeper) RelayFeePerKW() chainfee.SatPerKWeight {
|
||||
return s.relayFeeRate
|
||||
}
|
||||
|
||||
// Stop stops sweeper from listening to block epochs and constructing sweep
|
||||
// txes.
|
||||
func (s *UtxoSweeper) Stop() error {
|
||||
@ -714,7 +732,15 @@ func (s *UtxoSweeper) sweepCluster(cluster inputCluster,
|
||||
func (s *UtxoSweeper) bucketForFeeRate(
|
||||
feeRate chainfee.SatPerKWeight) int {
|
||||
|
||||
return int(feeRate-s.relayFeeRate) / s.cfg.FeeRateBucketSize
|
||||
// Create an isolated bucket for sweeps at the minimum fee rate. This is
|
||||
// to prevent very small outputs (anchors) from becoming uneconomical if
|
||||
// their fee rate would be averaged with higher fee rate inputs in a
|
||||
// regular bucket.
|
||||
if feeRate == s.relayFeeRate {
|
||||
return 0
|
||||
}
|
||||
|
||||
return 1 + int(feeRate-s.relayFeeRate)/s.cfg.FeeRateBucketSize
|
||||
}
|
||||
|
||||
// clusterBySweepFeeRate takes the set of pending inputs within the UtxoSweeper
|
||||
@ -1111,7 +1137,7 @@ func (s *UtxoSweeper) handlePendingSweepsReq(
|
||||
// is actually successful. The responsibility of doing so should be handled by
|
||||
// the caller.
|
||||
func (s *UtxoSweeper) UpdateParams(input wire.OutPoint,
|
||||
params Params) (chan Result, error) {
|
||||
params ParamsUpdate) (chan Result, error) {
|
||||
|
||||
// Ensure the client provided a sane fee preference.
|
||||
if _, err := s.feeRateForPreference(params.Fee); err != nil {
|
||||
@ -1161,10 +1187,16 @@ func (s *UtxoSweeper) handleUpdateReq(req *updateReq, bestHeight int32) (
|
||||
return nil, lnwallet.ErrNotMine
|
||||
}
|
||||
|
||||
log.Debugf("Updating sweep parameters for %v from %v to %v", req.input,
|
||||
pendingInput.params, req.params)
|
||||
// Create the updated parameters struct. Leave the exclusive group
|
||||
// unchanged.
|
||||
newParams := pendingInput.params
|
||||
newParams.Fee = req.params.Fee
|
||||
newParams.Force = req.params.Force
|
||||
|
||||
pendingInput.params = req.params
|
||||
log.Debugf("Updating sweep parameters for %v from %v to %v", req.input,
|
||||
pendingInput.params, newParams)
|
||||
|
||||
pendingInput.params = newParams
|
||||
|
||||
// We'll reset the input's publish height to the current so that a new
|
||||
// transaction can be created that replaces the transaction currently
|
||||
|
@ -1179,7 +1179,7 @@ func TestBumpFeeRBF(t *testing.T) {
|
||||
// We'll first try to bump the fee of an output currently unknown to the
|
||||
// UtxoSweeper. Doing so should result in a lnwallet.ErrNotMine error.
|
||||
_, err := ctx.sweeper.UpdateParams(
|
||||
wire.OutPoint{}, Params{Fee: lowFeePref},
|
||||
wire.OutPoint{}, ParamsUpdate{Fee: lowFeePref},
|
||||
)
|
||||
if err != lnwallet.ErrNotMine {
|
||||
t.Fatalf("expected error lnwallet.ErrNotMine, got \"%v\"", err)
|
||||
@ -1208,13 +1208,13 @@ func TestBumpFeeRBF(t *testing.T) {
|
||||
ctx.estimator.blocksToFee[highFeePref.ConfTarget] = highFeeRate
|
||||
|
||||
// We should expect to see an error if a fee preference isn't provided.
|
||||
_, err = ctx.sweeper.UpdateParams(*input.OutPoint(), Params{})
|
||||
_, err = ctx.sweeper.UpdateParams(*input.OutPoint(), ParamsUpdate{})
|
||||
if err != ErrNoFeePreference {
|
||||
t.Fatalf("expected ErrNoFeePreference, got %v", err)
|
||||
}
|
||||
|
||||
bumpResult, err := ctx.sweeper.UpdateParams(
|
||||
*input.OutPoint(), Params{Fee: highFeePref},
|
||||
*input.OutPoint(), ParamsUpdate{Fee: highFeePref},
|
||||
)
|
||||
if err != nil {
|
||||
t.Fatalf("unable to bump input's fee: %v", err)
|
||||
|
Loading…
Reference in New Issue
Block a user