Repository: lightningnetwork/lnd
Pull request #3809 (2019-12-09 11:05:30)

sweep: allow force sweeping of negatively yielding inputs
This PR adds force sweep functionality to the sweeper. Force sweep signals that an input needs to be swept even if its yield is negative. This is useful in CPFP scenarios where the parent tx output is only small. This will be common in the upcoming new anchor outputs commitment format.

The force flag is exposed on the `BumpFee` rpc call and through `lncli`. In many cases it will be required to have a wallet utxo available to bring the tx output above the dust limit. PR #3814 extended the sweeper with the capability to attach wallet utxos if needed.

roeierez: @joostjager Will this PR solve the use case where channel was closed with small local balance?
Right now I have ~2000 sat that can't be swept due to fee rate.
in https://github.com/lightningnetwork/lnd/pull/3814 there is an attempt to use additional input but I don't have any in my wallet.
joostjager: With an input of that size, the idea is to modify the sweep fee rate to a lower value using the `bumpfee` rpc, so that it becomes economical to sweep. Without a wallet utxo, it still needs to produce a tx that has an output above the dust limit.

Note that the sweeper uses fee rate buckets to batch inputs together. The first bucket is 1-10 sat/byte. The actual sweep fee rate is the average of all inputs in a bucket. If your input is the only input in the 1-10 bucket and you've lowered the input fee rate preference to 1 sat/b, it should be swept at that rate.

This PR is not adding anything to that. It mainly allows negatively yielding inputs to be swept using the force flag, but for that you also need a wallet utxo.

Patch:
diff --git a/channeldb/invoices.go b/channeldb/invoices.go
index 006d5e68a..ff916a0ab 100644
--- a/channeldb/invoices.go
+++ b/channeldb/invoices.go
@@ -642,6 +642,49 @@ func (d *DB) FetchAllInvoicesWithPaymentHash(pendingOnly bool) (
 	return result, nil
 }
 
+// FetchAllInvoices returns all invoices currently stored within the database.
+// If the pendingOnly param is set to true, then only invoices in open or
+// accepted state will be returned, skipping all invoices that are fully
+// settled or canceled.
+func (d *DB) FetchAllInvoices(pendingOnly bool) ([]Invoice, error) {
+	var invoices []Invoice
+
+	err := d.View(func(tx *bbolt.Tx) error {
+		invoiceB := tx.Bucket(invoiceBucket)
+		if invoiceB == nil {
+			return ErrNoInvoicesCreated
+		}
+
+		// Iterate through the entire key space of the top-level
+		// invoice bucket. If key with a non-nil value stores the next
+		// invoice ID which maps to the corresponding invoice.
+		return invoiceB.ForEach(func(k, v []byte) error {
+			if v == nil {
+				return nil
+			}
+
+			invoiceReader := bytes.NewReader(v)
+			invoice, err := deserializeInvoice(invoiceReader)
+			if err != nil {
+				return err
+			}
+
+			if pendingOnly && !invoice.IsPending() {
+				return nil
+			}
+
+			invoices = append(invoices, invoice)
+
+			return nil
+		})
+	})
+	if err != nil {
+		return nil, err
+	}
+
+	return invoices, nil
+}
+
 // InvoiceQuery represents a query to the invoice database. The query allows a
 // caller to retrieve all invoices starting from a particular add index and
 // limit the number of results returned.
@@ -1284,19 +1327,6 @@ func copySlice(src []byte) []byte {
 	return dest
 }
 
-// copyInvoiceHTLC makes a deep copy of the supplied invoice HTLC.
-func copyInvoiceHTLC(src *InvoiceHTLC) *InvoiceHTLC {
-	result := *src
-
-	// Make a copy of the CustomSet map.
-	result.CustomRecords = make(record.CustomSet)
-	for k, v := range src.CustomRecords {
-		result.CustomRecords[k] = v
-	}
-
-	return &result
-}
-
 // copyInvoice makes a deep copy of the supplied invoice.
 func copyInvoice(src *Invoice) *Invoice {
 	dest := Invoice{
@@ -1317,7 +1347,7 @@ func copyInvoice(src *Invoice) *Invoice {
 	dest.Terms.Features = src.Terms.Features.Clone()
 
 	for k, v := range src.Htlcs {
-		dest.Htlcs[k] = copyInvoiceHTLC(v)
+		dest.Htlcs[k] = v
 	}
 
 	return &dest
diff --git a/cmd/lncli/commands.go b/cmd/lncli/commands.go
index 73651db8f..1f9a5fe43 100644
--- a/cmd/lncli/commands.go
+++ b/cmd/lncli/commands.go
@@ -203,7 +203,7 @@ var sendCoinsCommand = cli.Command{
 	Usage:     "Send bitcoin on-chain to an address.",
 	ArgsUsage: "addr amt",
 	Description: `
-	Send amt coins in satoshis to the base58 or bech32 encoded bitcoin address addr.
+	Send amt coins in satoshis to the BASE58 encoded bitcoin address addr.
 
 	Fees used when sending the transaction can be specified via the --conf_target, or
 	--sat_per_byte optional flags.
@@ -212,9 +212,8 @@ var sendCoinsCommand = cli.Command{
 	`,
 	Flags: []cli.Flag{
 		cli.StringFlag{
-			Name: "addr",
-			Usage: "the base58 or bech32 encoded bitcoin address to send coins " +
-				"to on-chain",
+			Name:  "addr",
+			Usage: "the BASE58 encoded bitcoin address to send coins to on-chain",
 		},
 		cli.BoolFlag{
 			Name: "sweepall",
@@ -2088,17 +2087,8 @@ var (
 	}
 
 	lastHopFlag = cli.StringFlag{
-		Name: "last_hop",
-		Usage: "pubkey of the last hop (penultimate node in the path) " +
-			"to route through for this payment",
-	}
-
-	dataFlag = cli.StringFlag{
-		Name: "data",
-		Usage: "attach custom data to the payment. The required " +
-			"format is: <record_id>=<hex_value>,<record_id>=" +
-			"<hex_value>,.. For example: --data 3438382=0a21ff. " +
-			"Custom record ids start from 65536.",
+		Name:  "last_hop",
+		Usage: "pubkey of the last hop to use for this payment",
 	}
 )
 
@@ -2136,7 +2126,6 @@ func paymentFlags() []cli.Flag {
 			Name:  "allow_self_payment",
 			Usage: "allow sending a circular payment to self",
 		},
-		dataFlag,
 	}
 }
 
@@ -2280,9 +2269,8 @@ func sendPayment(ctx *cli.Context) error {
 	}
 
 	req := &lnrpc.SendRequest{
-		Dest:              destNode,
-		Amt:               amount,
-		DestCustomRecords: make(map[uint64][]byte),
+		Dest: destNode,
+		Amt:  amount,
 	}
 
 	var rHash []byte
@@ -2297,10 +2285,9 @@ func sendPayment(ctx *cli.Context) error {
 			return err
 		}
 
-		// Set the preimage. If the user supplied a preimage with the
-		// data flag, the preimage that is set here will be overwritten
-		// later.
-		req.DestCustomRecords[record.KeySendType] = preimage[:]
+		req.DestCustomRecords = map[uint64][]byte{
+			record.KeySendType: preimage[:],
+		}
 
 		hash := preimage.Hash()
 		rHash = hash[:]
@@ -2367,33 +2354,6 @@ func sendPaymentRequest(ctx *cli.Context, req *lnrpc.SendRequest) error {
 
 	req.AllowSelfPayment = ctx.Bool("allow_self_payment")
 
-	// Parse custom data records.
-	data := ctx.String(dataFlag.Name)
-	if data != "" {
-		records := strings.Split(data, ",")
-		for _, r := range records {
-			kv := strings.Split(r, "=")
-			if len(kv) != 2 {
-				return errors.New("invalid data format: " +
-					"multiple equal signs in record")
-			}
-
-			recordID, err := strconv.ParseUint(kv[0], 10, 64)
-			if err != nil {
-				return fmt.Errorf("invalid data format: %v",
-					err)
-			}
-
-			hexValue, err := hex.DecodeString(kv[1])
-			if err != nil {
-				return fmt.Errorf("invalid data format: %v",
-					err)
-			}
-
-			req.DestCustomRecords[recordID] = hexValue
-		}
-	}
-
 	amt := req.Amt
 
 	if req.PaymentRequest != "" {
@@ -2473,9 +2433,8 @@ func payInvoice(ctx *cli.Context) error {
 	}
 
 	req := &lnrpc.SendRequest{
-		PaymentRequest:    payReq,
-		Amt:               ctx.Int64("amt"),
-		DestCustomRecords: make(map[uint64][]byte),
+		PaymentRequest: payReq,
+		Amt:            ctx.Int64("amt"),
 	}
 
 	return sendPaymentRequest(ctx, req)
diff --git a/cmd/lncli/walletrpc_active.go b/cmd/lncli/walletrpc_active.go
index 35dc562d6..31b14b764 100644
--- a/cmd/lncli/walletrpc_active.go
+++ b/cmd/lncli/walletrpc_active.go
@@ -4,7 +4,6 @@ package main
 
 import (
 	"context"
-	"fmt"
 	"sort"
 
 	"github.com/lightningnetwork/lnd/lnrpc/walletrpc"
@@ -113,7 +112,13 @@ var bumpFeeCommand = cli.Command{
 	Note that this command currently doesn't perform any validation checks
 	on the fee preference being provided. For now, the responsibility of
 	ensuring that the new fee preference is sufficient is delegated to the
-	user.`,
+	user.
+
+	The force flag enables sweeping of inputs that are negatively yielding.
+	Normally it does not make sense to lose money on sweeping, unless a
+	parent transaction needs to get confirmed and there is only a small
+	output available to attach the child transaction to.
+	`,
 	Flags: []cli.Flag{
 		cli.Uint64Flag{
 			Name: "conf_target",
@@ -125,6 +130,10 @@ var bumpFeeCommand = cli.Command{
 			Usage: "a manual fee expressed in sat/byte that " +
 				"should be used when sweeping the output",
 		},
+		cli.BoolFlag{
+			Name:  "force",
+			Usage: "sweep even if the yield is negative",
+		},
 	},
 	Action: actionDecorator(bumpFee),
 }
@@ -132,7 +141,7 @@ var bumpFeeCommand = cli.Command{
 func bumpFee(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 || ctx.NumFlags() != 1 {
+	if ctx.NArg() != 1 {
 		return cli.ShowCommandHelp(ctx, "bumpfee")
 	}
 
@@ -142,24 +151,14 @@ func bumpFee(ctx *cli.Context) error {
 		return err
 	}
 
-	var confTarget, satPerByte uint32
-	switch {
-	case ctx.IsSet("conf_target") && ctx.IsSet("sat_per_byte"):
-		return fmt.Errorf("either conf_target or sat_per_byte should " +
-			"be set, but not both")
-	case ctx.IsSet("conf_target"):
-		confTarget = uint32(ctx.Uint64("conf_target"))
-	case ctx.IsSet("sat_per_byte"):
-		satPerByte = uint32(ctx.Uint64("sat_per_byte"))
-	}
-
 	client, cleanUp := getWalletClient(ctx)
 	defer cleanUp()
 
 	resp, err := client.BumpFee(context.Background(), &walletrpc.BumpFeeRequest{
 		Outpoint:   protoOutPoint,
-		TargetConf: confTarget,
-		SatPerByte: satPerByte,
+		TargetConf: uint32(ctx.Uint64("conf_target")),
+		SatPerByte: uint32(ctx.Uint64("sat_per_byte")),
+		Force:      ctx.Bool("force"),
 	})
 	if err != nil {
 		return err
diff --git a/cmd/lncli/walletrpc_types.go b/cmd/lncli/walletrpc_types.go
index f336e02e2..c2b569819 100644
--- a/cmd/lncli/walletrpc_types.go
+++ b/cmd/lncli/walletrpc_types.go
@@ -11,6 +11,9 @@ type PendingSweep struct {
 	SatPerByte          uint32   `json:"sat_per_byte"`
 	BroadcastAttempts   uint32   `json:"broadcast_attempts"`
 	NextBroadcastHeight uint32   `json:"next_broadcast_height"`
+	RequestedSatPerByte uint32   `json:"requested_sat_per_byte"`
+	RequestedConfTarget uint32   `json:"requested_conf_target"`
+	Force               bool     `json:"force"`
 }
 
 // NewPendingSweepFromProto converts the walletrpc.PendingSweep proto type into
@@ -23,5 +26,8 @@ func NewPendingSweepFromProto(pendingSweep *walletrpc.PendingSweep) *PendingSwee
 		SatPerByte:          pendingSweep.SatPerByte,
 		BroadcastAttempts:   pendingSweep.BroadcastAttempts,
 		NextBroadcastHeight: pendingSweep.NextBroadcastHeight,
+		RequestedSatPerByte: pendingSweep.RequestedSatPerByte,
+		RequestedConfTarget: pendingSweep.RequestedConfTarget,
+		Force:               pendingSweep.Force,
 	}
 }
diff --git a/docker/README.md b/docker/README.md
index ebce1990b..1dc79dbbb 100644
--- a/docker/README.md
+++ b/docker/README.md
@@ -68,7 +68,7 @@ docker volume create simnet_lnd_alice
 docker volume create simnet_lnd_bob
 
 # Run the "Alice" container and log into it:
-$ docker-compose run -d --name alice --volume simnet_lnd_alice:/root/.lnd lnd
+$ docker-compose run -d --name alice --volume simnet_lnd_alice:/root/.lnd lnd_btc
 $ docker exec -i -t alice bash
 
 # Generate a new backward compatible nested p2sh address for Alice:
@@ -79,10 +79,10 @@ $ MINING_ADDRESS=<alice_address> docker-compose up -d btcd
 
 # Generate 400 blocks (we need at least "100 >=" blocks because of coinbase 
 # block maturity and "300 ~=" in order to activate segwit):
-$ docker exec -it btcd /start-btcctl.sh generate 400
+$ docker-compose run btcctl generate 400
 
 # Check that segwit is active:
-$ docker exec -it btcd /start-btcctl.sh getblockchaininfo | grep -A 1 segwit
+$ docker-compose run btcctl getblockchaininfo | grep -A 1 segwit
 ```
 
 Check `Alice` balance:
@@ -94,7 +94,7 @@ Connect `Bob` node to `Alice` node.
 
 ```bash
 # Run "Bob" node and log into it:
-$ docker-compose run -d --name bob --volume simnet_lnd_bob:/root/.lnd lnd
+$ docker-compose run -d --name bob --volume simnet_lnd_bob:/root/.lnd lnd_btc
 $ docker exec -i -t bob bash
 
 # Get the identity pubkey of "Bob" node:
@@ -163,7 +163,7 @@ Create the `Alice<->Bob` channel.
 alice$ lncli --network=simnet openchannel --node_key=<bob_identity_pubkey> --local_amt=1000000
 
 # Include funding transaction in block thereby opening the channel:
-$ docker exec -it btcd /start-btcctl.sh generate 3
+$ docker-compose run btcctl generate 3
 
 # Check that channel with "Bob" was opened:
 alice$ lncli --network=simnet listchannels
@@ -247,7 +247,7 @@ alice$ lncli --network=simnet listchannels
 alice$ lncli --network=simnet closechannel --funding_txid=<funding_txid> --output_index=<output_index>
 
 # Include close transaction in a block thereby closing the channel:
-$ docker exec -it btcd /start-btcctl.sh generate 3
+$ docker-compose run btcctl generate 3
 
 # Check "Alice" on-chain balance was credited by her settled amount in the channel:
 alice$ lncli --network=simnet walletbalance
@@ -299,7 +299,10 @@ First of all you need to run `btcd` node in `testnet` and wait for it to be
 synced with test network (`May the Force and Patience be with you`).
 ```bash 
 # Init bitcoin network env variable:
-$ NETWORK="testnet" docker-compose up
+$ export NETWORK="testnet"
+
+# Run "btcd" node:
+$ docker-compose up -d "btcd"
 ```
 
 After `btcd` synced, connect `Alice` to the `Faucet` node.
diff --git a/docker/btcd/start-btcctl.sh b/docker/btcd/start-btcctl.sh
index 8bd5fda0a..c8fda50da 100755
--- a/docker/btcd/start-btcctl.sh
+++ b/docker/btcd/start-btcctl.sh
@@ -52,7 +52,7 @@ PARAMS=$(echo $PARAMS \
     "--rpccert=/rpc/rpc.cert" \
     "--rpcuser=$RPCUSER" \
     "--rpcpass=$RPCPASS" \
-    "--rpcserver=localhost" \
+    "--rpcserver=rpcserver" \
 )
 
 PARAMS="$PARAMS $@"
diff --git a/docker/docker-compose.ltc.yml b/docker/docker-compose.ltc.yml
deleted file mode 100644
index c3bbd3dca..000000000
--- a/docker/docker-compose.ltc.yml
+++ /dev/null
@@ -1,55 +0,0 @@
-version: '2'
-services:
-    # ltc is an image of litecoin node which used as base image for ltcd and
-    # ltcctl. The environment variables default values determined on stage of
-    # container start within starting script.
-    ltcd:
-      image: ltcd
-      container_name: ltcd
-      build:
-        context: ltcd/
-      volumes:
-        - shared:/rpc
-        - litecoin:/data
-      environment:
-        - RPCUSER
-        - RPCPASS
-        - NETWORK
-        - DEBUG
-        - MINING_ADDRESS
-      entrypoint: ["./start-ltcd.sh"]
-
-    lnd:
-      image: lnd
-      container_name: lnd_ltc
-      build:
-        context: ../
-        dockerfile: docker/lnd/Dockerfile
-      environment:
-        - RPCUSER
-        - RPCPASS
-        - NETWORK
-        - CHAIN
-        - DEBUG
-      volumes:
-        - shared:/rpc
-        - lnd_ltc:/root/.lnd
-      entrypoint: ["./start-lnd.sh"]
-      links:
-        - "ltcd:blockchain"
-
-volumes:
-  # shared volume is need to store the btcd rpc certificates and use it within
-  # ltcctl and lnd containers.
-  shared:
-    driver: local
-
-  # litecoin volume is needed for maintaining blockchain persistence
-  # during ltcd container recreation.
-  litecoin:
-    driver: local
-
-  # lnd volume is used for persisting lnd application data and chain state
-  # during container lifecycle.
-  lnd_ltc:
-    driver: local
diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml
index f13a400f0..8794f688d 100644
--- a/docker/docker-compose.yml
+++ b/docker/docker-compose.yml
@@ -1,11 +1,11 @@
 version: '2'
 services:
+
     # btc is an image of bitcoin node which used as base image for btcd and
     # btccli. The environment variables default values determined on stage of
     # container start within starting script.
-    btcd:
+    btc:
       image: btcd
-      container_name: btcd
       build:
         context: btcd/
       volumes:
@@ -15,28 +15,82 @@ services:
         - RPCUSER
         - RPCPASS
         - NETWORK
-        - DEBUG
-        - MINING_ADDRESS
-      entrypoint: ["./start-btcd.sh"]
 
-    lnd:
-      image: lnd
-      container_name: lnd
+    btcd:
+        extends: btc
+        container_name: btcd
+        environment:
+          - DEBUG
+          - MINING_ADDRESS
+          - NETWORK
+        entrypoint: ["./start-btcd.sh"]
+
+    btcctl:
+        extends: btc
+        container_name: btcctl
+        links:
+            - "btcd:rpcserver"
+        entrypoint: ["./start-btcctl.sh"]
+
+
+    # ltc is an image of litecoin node which used as base image for ltcd and
+    # ltcctl. The environment variables default values determined on stage of
+    # container start within starting script.
+    ltc:
+      image: ltcd
       build:
-        context: ../
-        dockerfile: docker/lnd/Dockerfile
+        context: ltcd/
+      volumes:
+        - shared:/rpc
+        - litecoin:/data
       environment:
         - RPCUSER
         - RPCPASS
         - NETWORK
-        - CHAIN
-        - DEBUG
-      volumes:
-        - shared:/rpc
-        - lnd:/root/.lnd
-      entrypoint: ["./start-lnd.sh"]
+
+    ltcd:
+        extends: ltc
+        container_name: ltcd
+        environment:
+          - DEBUG
+          - MINING_ADDRESS
+          - NETWORK
+        entrypoint: ["./start-ltcd.sh"]
+
+    ltcctl:
+        extends: ltc
+        container_name: ltcctl
+        links:
+            - "ltcd:rpcserver"
+        entrypoint: ["./start-ltcctl.sh"]
+
+    lnd:
+        image: lnd
+        build:
+          context: ../
+          dockerfile: docker/lnd/Dockerfile
+        environment:
+          - RPCUSER
+          - RPCPASS
+          - NETWORK
+          - CHAIN
+          - DEBUG
+        volumes:
+          - shared:/rpc
+          - lnd:/root/.lnd
+        entrypoint: ["./start-lnd.sh"]
+
+    lnd_ltc:
+      extends: lnd
+      container_name: lnd_ltc
+      links:
+          - "ltcd:blockchain"
+
+    lnd_btc:
+      extends: lnd
+      container_name: lnd_btc
       links:
-        - "btcd:blockchain"
+          - "btcd:blockchain"
 
 volumes:
   # shared volume is need to store the btcd rpc certificates and use it within
@@ -53,3 +107,8 @@ volumes:
   # during container lifecycle.
   lnd:
     driver: local
+
+  # litecoin volume is needed for maintaining blockchain persistence
+  # during ltcd container recreation.
+  litecoin:
+    driver: local
diff --git a/docker/ltcd/start-ltcctl.sh b/docker/ltcd/start-ltcctl.sh
index 2888ab9c0..481586e0a 100755
--- a/docker/ltcd/start-ltcctl.sh
+++ b/docker/ltcd/start-ltcctl.sh
@@ -52,7 +52,7 @@ PARAMS=$(echo $PARAMS \
     "--rpccert=/rpc/rpc.cert" \
     "--rpcuser=$RPCUSER" \
     "--rpcpass=$RPCPASS" \
-    "--rpcserver=localhost" \
+    "--rpcserver=rpcserver" \
 )
 
 PARAMS="$PARAMS $@"
diff --git a/htlcswitch/failure.go b/htlcswitch/failure.go
index 35d78590b..0d817a07d 100644
--- a/htlcswitch/failure.go
+++ b/htlcswitch/failure.go
@@ -9,76 +9,6 @@ import (
 	"github.com/lightningnetwork/lnd/lnwire"
 )
 
-// ClearTextError is an interface which is implemented by errors that occur
-// when we know the underlying wire failure message. These errors are the
-// opposite to opaque errors which are onion-encrypted blobs only understandable
-// to the initiating node. ClearTextErrors are used when we fail a htlc at our
-// node, or one of our initiated payments failed and we can decrypt the onion
-// encrypted error fully.
-type ClearTextError interface {
-	error
-
-	// WireMessage extracts a valid wire failure message from an internal
-	// error which may contain additional metadata (which should not be
-	// exposed to the network). This value may be nil in the case where
-	// an unknown wire error is returned by one of our peers.
-	WireMessage() lnwire.FailureMessage
-}
-
-// LinkError is an implementation of the ClearTextError interface which
-// represents failures that occur on our incoming or outgoing link.
-type LinkError struct {
-	// msg returns the wire failure associated with the error.
-	// This value should *not* be nil, because we should always
-	// know the failure type for failures which occur at our own
-	// node.
-	msg lnwire.FailureMessage
-
-	// FailureDetail enriches the wire error with additional information.
-	FailureDetail
-}
-
-// NewLinkError returns a LinkError with the failure message provided.
-// The failure message provided should *not* be nil, because we should
-// always know the failure type for failures which occur at our own node.
-func NewLinkError(msg lnwire.FailureMessage) *LinkError {
-	return &LinkError{msg: msg}
-}
-
-// NewDetailedLinkError returns a link error that enriches a wire message with
-// a failure detail.
-func NewDetailedLinkError(msg lnwire.FailureMessage,
-	detail FailureDetail) *LinkError {
-
-	return &LinkError{
-		msg:           msg,
-		FailureDetail: detail,
-	}
-}
-
-// WireMessage extracts a valid wire failure message from an internal
-// error which may contain additional metadata (which should not be
-// exposed to the network). This value should never be nil for LinkErrors,
-// because we are the ones failing the htlc.
-//
-// Note this is part of the ClearTextError interface.
-func (l *LinkError) WireMessage() lnwire.FailureMessage {
-	return l.msg
-}
-
-// Error returns the string representation of a link error.
-//
-// Note this is part of the ClearTextError interface.
-func (l *LinkError) Error() string {
-	// If the link error has no failure detail, return the wire message's
-	// error.
-	if l.FailureDetail == FailureDetailNone {
-		return l.msg.Error()
-	}
-
-	return fmt.Sprintf("%v: %v", l.msg.Error(), l.FailureDetail)
-}
-
 // ForwardingError wraps an lnwire.FailureMessage in a struct that also
 // includes the source of the error.
 type ForwardingError struct {
@@ -88,49 +18,26 @@ type ForwardingError struct {
 	// zero is the self node.
 	FailureSourceIdx int
 
-	// msg is the wire message associated with the error. This value may
-	// be nil in the case where we fail to decode failure message sent by
-	// a peer.
-	msg lnwire.FailureMessage
-}
+	// ExtraMsg is an additional error message that callers can provide in
+	// order to provide context specific error details.
+	ExtraMsg string
 
-// WireMessage extracts a valid wire failure message from an internal
-// error which may contain additional metadata (which should not be
-// exposed to the network). This value may be nil in the case where
-// an unknown wire error is returned by one of our peers.
-//
-// Note this is part of the ClearTextError interface.
-func (f *ForwardingError) WireMessage() lnwire.FailureMessage {
-	return f.msg
+	lnwire.FailureMessage
 }
 
 // Error implements the built-in error interface. We use this method to allow
 // the switch or any callers to insert additional context to the error message
 // returned.
 func (f *ForwardingError) Error() string {
-	return fmt.Sprintf(
-		"%v@%v", f.msg, f.FailureSourceIdx,
-	)
-}
-
-// NewForwardingError creates a new payment error which wraps a wire error
-// with additional metadata.
-func NewForwardingError(failure lnwire.FailureMessage,
-	index int) *ForwardingError {
-
-	return &ForwardingError{
-		FailureSourceIdx: index,
-		msg:              failure,
+	if f.ExtraMsg == "" {
+		return fmt.Sprintf(
+			"%v@%v", f.FailureMessage, f.FailureSourceIdx,
+		)
 	}
-}
 
-// NewUnknownForwardingError returns a forwarding error which has a nil failure
-// message. This constructor should only be used in the case where we cannot
-// decode the failure we have received from a peer.
-func NewUnknownForwardingError(index int) *ForwardingError {
-	return &ForwardingError{
-		FailureSourceIdx: index,
-	}
+	return fmt.Sprintf(
+		"%v@%v: %v", f.FailureMessage, f.FailureSourceIdx, f.ExtraMsg,
+	)
 }
 
 // ErrorDecrypter is an interface that is used to decrypt the onion encrypted
@@ -187,10 +94,15 @@ func (s *SphinxErrorDecrypter) DecryptError(reason lnwire.OpaqueReason) (
 	r := bytes.NewReader(failure.Message)
 	failureMsg, err := lnwire.DecodeFailure(r, 0)
 	if err != nil {
-		return NewUnknownForwardingError(failure.SenderIdx), nil
+		return &ForwardingError{
+			FailureSourceIdx: failure.SenderIdx,
+		}, nil
 	}
 
-	return NewForwardingError(failureMsg, failure.SenderIdx), nil
+	return &ForwardingError{
+		FailureSourceIdx: failure.SenderIdx,
+		FailureMessage:   failureMsg,
+	}, nil
 }
 
 // A compile time check to ensure ErrorDecrypter implements the Deobfuscator
diff --git a/htlcswitch/failure_detail.go b/htlcswitch/failure_detail.go
deleted file mode 100644
index 92b25510e..000000000
--- a/htlcswitch/failure_detail.go
+++ /dev/null
@@ -1,58 +0,0 @@
-package htlcswitch
-
-// FailureDetail is an enum which is used to enrich failures with
-// additional information.
-type FailureDetail int
-
-const (
-	// FailureDetailNone is returned when the wire message contains
-	// sufficient information.
-	FailureDetailNone = iota
-
-	// FailureDetailOnionDecode indicates that we could not decode an
-	// onion error.
-	FailureDetailOnionDecode
-
-	// FailureDetailLinkNotEligible indicates that a routing attempt was
-	// made over a link that is not eligible for routing.
-	FailureDetailLinkNotEligible
-
-	// FailureDetailOnChainTimeout indicates that a payment had to be timed
-	// out on chain before it got past the first hop by us or the remote
-	// party.
-	FailureDetailOnChainTimeout
-
-	// FailureDetailHTLCExceedsMax is returned when a htlc exceeds our
-	// policy's maximum htlc amount.
-	FailureDetailHTLCExceedsMax
-
-	// FailureDetailInsufficientBalance is returned when we cannot route a
-	// htlc due to insufficient outgoing capacity.
-	FailureDetailInsufficientBalance
-)
-
-// String returns the string representation of a failure detail.
-func (fd FailureDetail) String() string {
-	switch fd {
-	case FailureDetailNone:
-		return "no failure detail"
-
-	case FailureDetailOnionDecode:
-		return "could not decode onion"
-
-	case FailureDetailLinkNotEligible:
-		return "link not eligible"
-
-	case FailureDetailOnChainTimeout:
-		return "payment was resolved on-chain, then canceled back"
-
-	case FailureDetailHTLCExceedsMax:
-		return "htlc exceeds maximum policy amount"
-
-	case FailureDetailInsufficientBalance:
-		return "insufficient bandwidth to route htlc"
-
-	default:
-		return "unknown failure detail"
-	}
-}
diff --git a/htlcswitch/interfaces.go b/htlcswitch/interfaces.go
index 1281e9515..bb34b283f 100644
--- a/htlcswitch/interfaces.go
+++ b/htlcswitch/interfaces.go
@@ -102,21 +102,20 @@ type ChannelLink interface {
 
 	// CheckHtlcForward should return a nil error if the passed HTLC details
 	// satisfy the current forwarding policy fo the target link. Otherwise,
-	// a LinkError with a valid protocol failure message should be returned
-	// in order to signal to the source of the HTLC, the policy consistency
-	// issue.
+	// a valid protocol failure message should be returned in order to
+	// signal to the source of the HTLC, the policy consistency issue.
 	CheckHtlcForward(payHash [32]byte, incomingAmt lnwire.MilliSatoshi,
 		amtToForward lnwire.MilliSatoshi,
 		incomingTimeout, outgoingTimeout uint32,
-		heightNow uint32) *LinkError
+		heightNow uint32) lnwire.FailureMessage
 
 	// CheckHtlcTransit should return a nil error if the passed HTLC details
-	// satisfy the current channel policy.  Otherwise, a LinkError with a
-	// valid protocol failure message should be returned in order to signal
-	// the violation. This call is intended to be used for locally initiated
-	// payments for which there is no corresponding incoming htlc.
+	// satisfy the current channel policy.  Otherwise, a valid protocol
+	// failure message should be returned in order to signal the violation.
+	// This call is intended to be used for locally initiated payments for
+	// which there is no corresponding incoming htlc.
 	CheckHtlcTransit(payHash [32]byte, amt lnwire.MilliSatoshi,
-		timeout uint32, heightNow uint32) *LinkError
+		timeout uint32, heightNow uint32) lnwire.FailureMessage
 
 	// Bandwidth returns the amount of milli-satoshis which current link
 	// might pass through channel link. The value returned from this method
diff --git a/htlcswitch/link.go b/htlcswitch/link.go
index 92ecba65c..0bba3f656 100644
--- a/htlcswitch/link.go
+++ b/htlcswitch/link.go
@@ -2135,17 +2135,16 @@ func (l *channelLink) UpdateForwardingPolicy(newPolicy ForwardingPolicy) {
 	l.cfg.FwrdingPolicy = newPolicy
 }
 
-// CheckHtlcForward should return a nil error if the passed HTLC details
-// satisfy the current forwarding policy fo the target link. Otherwise,
-// a LinkError with a valid protocol failure message should be returned
-// in order to signal to the source of the HTLC, the policy consistency
-// issue.
+// CheckHtlcForward should return a nil error if the passed HTLC details satisfy
+// the current forwarding policy fo the target link.  Otherwise, a valid
+// protocol failure message should be returned in order to signal to the source
+// of the HTLC, the policy consistency issue.
 //
 // NOTE: Part of the ChannelLink interface.
 func (l *channelLink) CheckHtlcForward(payHash [32]byte,
 	incomingHtlcAmt, amtToForward lnwire.MilliSatoshi,
 	incomingTimeout, outgoingTimeout uint32,
-	heightNow uint32) *LinkError {
+	heightNow uint32) lnwire.FailureMessage {
 
 	l.RLock()
 	policy := l.cfg.FwrdingPolicy
@@ -2177,14 +2176,14 @@ func (l *channelLink) CheckHtlcForward(payHash [32]byte,
 
 		// As part of the returned error, we'll send our latest routing
 		// policy so the sending node obtains the most up to date data.
-		failure := l.createFailureWithUpdate(
+
+		return l.createFailureWithUpdate(
 			func(upd *lnwire.ChannelUpdate) lnwire.FailureMessage {
 				return lnwire.NewFeeInsufficient(
 					amtToForward, *upd,
 				)
 			},
 		)
-		return NewLinkError(failure)
 	}
 
 	// Finally, we'll ensure that the time-lock on the outgoing HTLC meets
@@ -2199,27 +2198,26 @@ func (l *channelLink) CheckHtlcForward(payHash [32]byte,
 
 		// Grab the latest routing policy so the sending node is up to
 		// date with our current policy.
-		failure := l.createFailureWithUpdate(
+		return l.createFailureWithUpdate(
 			func(upd *lnwire.ChannelUpdate) lnwire.FailureMessage {
 				return lnwire.NewIncorrectCltvExpiry(
 					incomingTimeout, *upd,
 				)
 			},
 		)
-		return NewLinkError(failure)
 	}
 
 	return nil
 }
 
-// CheckHtlcTransit should return a nil error if the passed HTLC details
-// satisfy the current channel policy.  Otherwise, a LinkError with a
-// valid protocol failure message should be returned in order to signal
-// the violation. This call is intended to be used for locally initiated
-// payments for which there is no corresponding incoming htlc.
+// CheckHtlcTransit should return a nil error if the passed HTLC details satisfy the
+// current channel policy.  Otherwise, a valid protocol failure message should
+// be returned in order to signal the violation. This call is intended to be
+// used for locally initiated payments for which there is no corresponding
+// incoming htlc.
 func (l *channelLink) CheckHtlcTransit(payHash [32]byte,
 	amt lnwire.MilliSatoshi, timeout uint32,
-	heightNow uint32) *LinkError {
+	heightNow uint32) lnwire.FailureMessage {
 
 	l.RLock()
 	policy := l.cfg.FwrdingPolicy
@@ -2234,7 +2232,7 @@ func (l *channelLink) CheckHtlcTransit(payHash [32]byte,
 // the channel's amount and time lock constraints.
 func (l *channelLink) canSendHtlc(policy ForwardingPolicy,
 	payHash [32]byte, amt lnwire.MilliSatoshi, timeout uint32,
-	heightNow uint32) *LinkError {
+	heightNow uint32) lnwire.FailureMessage {
 
 	// As our first sanity check, we'll ensure that the passed HTLC isn't
 	// too small for the next hop. If so, then we'll cancel the HTLC
@@ -2246,14 +2244,13 @@ func (l *channelLink) canSendHtlc(policy ForwardingPolicy,
 
 		// As part of the returned error, we'll send our latest routing
 		// policy so the sending node obtains the most up to date data.
-		failure := l.createFailureWithUpdate(
+		return l.createFailureWithUpdate(
 			func(upd *lnwire.ChannelUpdate) lnwire.FailureMessage {
 				return lnwire.NewAmountBelowMinimum(
 					amt, *upd,
 				)
 			},
 		)
-		return NewLinkError(failure)
 	}
 
 	// Next, ensure that the passed HTLC isn't too large. If so, we'll
@@ -2264,12 +2261,11 @@ func (l *channelLink) canSendHtlc(policy ForwardingPolicy,
 
 		// As part of the returned error, we'll send our latest routing
 		// policy so the sending node obtains the most up-to-date data.
-		failure := l.createFailureWithUpdate(
+		return l.createFailureWithUpdate(
 			func(upd *lnwire.ChannelUpdate) lnwire.FailureMessage {
 				return lnwire.NewTemporaryChannelFailure(upd)
 			},
 		)
-		return NewDetailedLinkError(failure, FailureDetailHTLCExceedsMax)
 	}
 
 	// We want to avoid offering an HTLC which will expire in the near
@@ -2279,12 +2275,12 @@ func (l *channelLink) canSendHtlc(policy ForwardingPolicy,
 		l.log.Errorf("htlc(%x) has an expiry that's too soon: "+
 			"outgoing_expiry=%v, best_height=%v", payHash[:],
 			timeout, heightNow)
-		failure := l.createFailureWithUpdate(
+
+		return l.createFailureWithUpdate(
 			func(upd *lnwire.ChannelUpdate) lnwire.FailureMessage {
 				return lnwire.NewExpiryTooSoon(*upd)
 			},
 		)
-		return NewLinkError(failure)
 	}
 
 	// Check absolute max delta.
@@ -2293,19 +2289,16 @@ func (l *channelLink) canSendHtlc(policy ForwardingPolicy,
 			"the future: got %v, but maximum is %v", payHash[:],
 			timeout-heightNow, l.cfg.MaxOutgoingCltvExpiry)
 
-		return NewLinkError(&lnwire.FailExpiryTooFar{})
+		return &lnwire.FailExpiryTooFar{}
 	}
 
 	// Check to see if there is enough balance in this channel.
 	if amt > l.Bandwidth() {
-		failure := l.createFailureWithUpdate(
+		return l.createFailureWithUpdate(
 			func(upd *lnwire.ChannelUpdate) lnwire.FailureMessage {
 				return lnwire.NewTemporaryChannelFailure(upd)
 			},
 		)
-		return NewDetailedLinkError(
-			failure, FailureDetailInsufficientBalance,
-		)
 	}
 
 	return nil
diff --git a/htlcswitch/mock.go b/htlcswitch/mock.go
index 02737a715..5c905822d 100644
--- a/htlcswitch/mock.go
+++ b/htlcswitch/mock.go
@@ -400,7 +400,10 @@ func (o *mockDeobfuscator) DecryptError(reason lnwire.OpaqueReason) (*Forwarding
 		return nil, err
 	}
 
-	return NewForwardingError(failure, 1), nil
+	return &ForwardingError{
+		FailureSourceIdx: 1,
+		FailureMessage:   failure,
+	}, nil
 }
 
 var _ ErrorDecrypter = (*mockDeobfuscator)(nil)
@@ -645,9 +648,9 @@ type mockChannelLink struct {
 
 	htlcID uint64
 
-	checkHtlcTransitResult *LinkError
+	checkHtlcTransitResult lnwire.FailureMessage
 
-	checkHtlcForwardResult *LinkError
+	checkHtlcForwardResult lnwire.FailureMessage
 }
 
 // completeCircuit is a helper method for adding the finalized payment circuit
@@ -707,14 +710,14 @@ func (f *mockChannelLink) HandleChannelUpdate(lnwire.Message) {
 func (f *mockChannelLink) UpdateForwardingPolicy(_ ForwardingPolicy) {
 }
 func (f *mockChannelLink) CheckHtlcForward([32]byte, lnwire.MilliSatoshi,
-	lnwire.MilliSatoshi, uint32, uint32, uint32) *LinkError {
+	lnwire.MilliSatoshi, uint32, uint32, uint32) lnwire.FailureMessage {
 
 	return f.checkHtlcForwardResult
 }
 
 func (f *mockChannelLink) CheckHtlcTransit(payHash [32]byte,
 	amt lnwire.MilliSatoshi, timeout uint32,
-	heightNow uint32) *LinkError {
+	heightNow uint32) lnwire.FailureMessage {
 
 	return f.checkHtlcTransitResult
 }
diff --git a/htlcswitch/switch.go b/htlcswitch/switch.go
index c08bdc0cf..b78f43b13 100644
--- a/htlcswitch/switch.go
+++ b/htlcswitch/switch.go
@@ -756,19 +756,25 @@ func (s *Switch) handleLocalDispatch(pkt *htlcPacket) error {
 		s.indexMtx.RUnlock()
 		if err != nil {
 			log.Errorf("Link %v not found", pkt.outgoingChanID)
-			return NewLinkError(&lnwire.FailUnknownNextPeer{})
+			return &ForwardingError{
+				FailureSourceIdx: 0,
+				FailureMessage:   &lnwire.FailUnknownNextPeer{},
+			}
 		}
 
 		if !link.EligibleToForward() {
-			log.Errorf("Link %v is not available to forward",
+			err := fmt.Errorf("Link %v is not available to forward",
 				pkt.outgoingChanID)
+			log.Error(err)
 
 			// The update does not need to be populated as the error
 			// will be returned back to the router.
-			return NewDetailedLinkError(
-				lnwire.NewTemporaryChannelFailure(nil),
-				FailureDetailLinkNotEligible,
-			)
+			htlcErr := lnwire.NewTemporaryChannelFailure(nil)
+			return &ForwardingError{
+				FailureSourceIdx: 0,
+				ExtraMsg:         err.Error(),
+				FailureMessage:   htlcErr,
+			}
 		}
 
 		// Ensure that the htlc satisfies the outgoing channel policy.
@@ -781,7 +787,11 @@ func (s *Switch) handleLocalDispatch(pkt *htlcPacket) error {
 		if htlcErr != nil {
 			log.Errorf("Link %v policy for local forward not "+
 				"satisfied", pkt.outgoingChanID)
-			return htlcErr
+
+			return &ForwardingError{
+				FailureSourceIdx: 0,
+				FailureMessage:   htlcErr,
+			}
 		}
 
 		return link.HandleSwitchPacket(pkt)
@@ -905,43 +915,41 @@ func (s *Switch) parseFailedPayment(deobfuscator ErrorDecrypter,
 	// decrypt the error, simply decode it them report back to the
 	// user.
 	case unencrypted:
+		var userErr string
 		r := bytes.NewReader(htlc.Reason)
 		failureMsg, err := lnwire.DecodeFailure(r, 0)
 		if err != nil {
-			// If we could not decode the failure reason, return a link
-			// error indicating that we failed to decode the onion.
-			linkError := NewDetailedLinkError(
-				// As this didn't even clear the link, we don't
-				// need to apply an update here since it goes
-				// directly to the router.
-				lnwire.NewTemporaryChannelFailure(nil),
-				FailureDetailOnionDecode,
-			)
-
-			log.Errorf("%v: (hash=%v, pid=%d): %v",
-				linkError.FailureDetail, paymentHash, paymentID,
-				err)
+			userErr = fmt.Sprintf("unable to decode onion "+
+				"failure (hash=%v, pid=%d): %v",
+				paymentHash, paymentID, err)
+			log.Error(userErr)
 
-			return linkError
+			// As this didn't even clear the link, we don't need to
+			// apply an update here since it goes directly to the
+			// router.
+			failureMsg = lnwire.NewTemporaryChannelFailure(nil)
 		}
 
-		// If we successfully decoded the failure reason, return it.
-		return NewLinkError(failureMsg)
+		return &ForwardingError{
+			FailureSourceIdx: 0,
+			ExtraMsg:         userErr,
+			FailureMessage:   failureMsg,
+		}
 
 	// A payment had to be timed out on chain before it got past
 	// the first hop. In this case, we'll report a permanent
 	// channel failure as this means us, or the remote party had to
 	// go on chain.
 	case isResolution && htlc.Reason == nil:
-		linkError := NewDetailedLinkError(
-			&lnwire.FailPermanentChannelFailure{},
-			FailureDetailOnChainTimeout,
-		)
-
-		log.Info("%v: hash=%v, pid=%d", linkError.FailureDetail,
+		userErr := fmt.Sprintf("payment was resolved "+
+			"on-chain, then canceled back (hash=%v, pid=%d)",
 			paymentHash, paymentID)
 
-		return linkError
+		return &ForwardingError{
+			FailureSourceIdx: 0,
+			ExtraMsg:         userErr,
+			FailureMessage:   &lnwire.FailPermanentChannelFailure{},
+		}
 
 	// A regular multi-hop payment error that we'll need to
 	// decrypt.
@@ -1008,21 +1016,18 @@ func (s *Switch) handlePacketForward(packet *htlcPacket) error {
 		// selection process. This way we can return the error for
 		// precise link that the sender selected, while optimistically
 		// trying all links to utilize our available bandwidth.
-		linkErrs := make(map[lnwire.ShortChannelID]*LinkError)
+		linkErrs := make(map[lnwire.ShortChannelID]lnwire.FailureMessage)
 
 		// Try to find destination channel link with appropriate
 		// bandwidth.
 		var destination ChannelLink
 		for _, link := range interfaceLinks {
-			var failure *LinkError
+			var failure lnwire.FailureMessage
 
 			// We'll skip any links that aren't yet eligible for
 			// forwarding.
 			if !link.EligibleToForward() {
-				failure = NewDetailedLinkError(
-					&lnwire.FailUnknownNextPeer{},
-					FailureDetailLinkNotEligible,
-				)
+				failure = &lnwire.FailUnknownNextPeer{}
 			} else {
 				// We'll ensure that the HTLC satisfies the
 				// current forwarding conditions of this target
@@ -1057,9 +1062,7 @@ func (s *Switch) handlePacketForward(packet *htlcPacket) error {
 				// If we can't find the error of the source,
 				// then we'll return an unknown next peer,
 				// though this should never happen.
-				linkErr = NewLinkError(
-					&lnwire.FailUnknownNextPeer{},
-				)
+				linkErr = &lnwire.FailUnknownNextPeer{}
 				log.Warnf("unable to find err source for "+
 					"outgoing_link=%v, errors=%v",
 					packet.outgoingChanID, newLogClosure(func() string {
@@ -1072,7 +1075,7 @@ func (s *Switch) handlePacketForward(packet *htlcPacket) error {
 				htlc.PaymentHash[:], packet.outgoingChanID,
 				linkErr)
 
-			return s.failAddPacket(packet, linkErr.WireMessage(), addErr)
+			return s.failAddPacket(packet, linkErr, addErr)
 		}
 
 		// Send the packet to the destination channel link which
diff --git a/invoices/invoiceregistry.go b/invoices/invoiceregistry.go
index 238e3bb7b..c3354c979 100644
--- a/invoices/invoiceregistry.go
+++ b/invoices/invoiceregistry.go
@@ -736,12 +736,6 @@ func (i *InvoiceRegistry) processKeySend(ctx invoiceUpdateCtx,
 	// Use the minimum block delta that we require for settling htlcs.
 	finalCltvDelta := i.cfg.FinalCltvRejectDelta
 
-	// Pre-check expiry here to prevent inserting an invoice that will not
-	// be settled.
-	if ctx.expiry < uint32(ctx.currentHeight+finalCltvDelta) {
-		return errors.New("final expiry too soon")
-	}
-
 	// Create placeholder invoice.
 	invoice := &channeldb.Invoice{
 		CreationDate: i.cfg.Clock.Now(),
diff --git a/lnd.go b/lnd.go
index 1d0e9ce72..62e8c6c24 100644
--- a/lnd.go
+++ b/lnd.go
@@ -60,25 +60,6 @@ var (
 	networkDir string
 )
 
-// WalletUnlockerAuthOptions returns a list of DialOptions that can be used to
-// authenticate with the wallet unlocker service.
-//
-// NOTE: This should only be called after the WalletUnlocker listener has
-// signaled it is ready.
-func WalletUnlockerAuthOptions() ([]grpc.DialOption, error) {
-	creds, err := credentials.NewClientTLSFromFile(cfg.TLSCertPath, "")
-	if err != nil {
-		return nil, fmt.Errorf("unable to read TLS cert: %v", err)
-	}
-
-	// Create a dial options array with the TLS credentials.
-	opts := []grpc.DialOption{
-		grpc.WithTransportCredentials(creds),
-	}
-
-	return opts, nil
-}
-
 // AdminAuthOptions returns a list of DialOptions that can be used to
 // authenticate with the RPC server with admin capabilities.
 //
diff --git a/lnrpc/routerrpc/router_backend.go b/lnrpc/routerrpc/router_backend.go
index 23cd32e0b..79976ca39 100644
--- a/lnrpc/routerrpc/router_backend.go
+++ b/lnrpc/routerrpc/router_backend.go
@@ -45,8 +45,7 @@ type RouterBackend struct {
 	FindRoute func(source, target route.Vertex,
 		amt lnwire.MilliSatoshi, restrictions *routing.RestrictParams,
 		destCustomRecords record.CustomSet,
-		routeHints map[route.Vertex][]*channeldb.ChannelEdgePolicy,
-		finalExpiry uint16) (*route.Route, error)
+		finalExpiry ...uint16) (*route.Route, error)
 
 	MissionControl MissionControl
 
@@ -63,10 +62,6 @@ type RouterBackend struct {
 	// MaxTotalTimelock is the maximum total time lock a route is allowed to
 	// have.
 	MaxTotalTimelock uint32
-
-	// DefaultFinalCltvDelta is the default value used as final cltv delta
-	// when an RPC caller doesn't specify a value.
-	DefaultFinalCltvDelta uint16
 }
 
 // MissionControl defines the mission control dependencies of routerrpc.
@@ -198,18 +193,12 @@ func (r *RouterBackend) QueryRoutes(ctx context.Context,
 	// We need to subtract the final delta before passing it into path
 	// finding. The optimal path is independent of the final cltv delta and
 	// the path finding algorithm is unaware of this value.
-	finalCLTVDelta := r.DefaultFinalCltvDelta
+	finalCLTVDelta := uint16(zpay32.DefaultFinalCLTVDelta)
 	if in.FinalCltvDelta != 0 {
 		finalCLTVDelta = uint16(in.FinalCltvDelta)
 	}
 	cltvLimit -= uint32(finalCLTVDelta)
 
-	// Parse destination feature bits.
-	features, err := UnmarshalFeatures(in.DestFeatures)
-	if err != nil {
-		return nil, err
-	}
-
 	restrictions := &routing.RestrictParams{
 		FeeLimit: feeLimit,
 		ProbabilitySource: func(fromNode, toNode route.Vertex,
@@ -237,23 +226,6 @@ func (r *RouterBackend) QueryRoutes(ctx context.Context,
 		},
 		DestCustomRecords: record.CustomSet(in.DestCustomRecords),
 		CltvLimit:         cltvLimit,
-		DestFeatures:      features,
-	}
-
-	// Pass along an outgoing channel restriction if specified.
-	if in.OutgoingChanId != 0 {
-		restrictions.OutgoingChannelID = &in.OutgoingChanId
-	}
-
-	// Pass along a last hop restriction if specified.
-	if len(in.LastHopPubkey) > 0 {
-		lastHop, err := route.NewVertexFromBytes(
-			in.LastHopPubkey,
-		)
-		if err != nil {
-			return nil, err
-		}
-		restrictions.LastHop = &lastHop
 	}
 
 	// If we have any TLV records destined for the final hop, then we'll
@@ -264,24 +236,12 @@ func (r *RouterBackend) QueryRoutes(ctx context.Context,
 		return nil, err
 	}
 
-	// Convert route hints to an edge map.
-	routeHints, err := unmarshallRouteHints(in.RouteHints)
-	if err != nil {
-		return nil, err
-	}
-	routeHintEdges, err := routing.RouteHintsToEdges(
-		routeHints, targetPubKey,
-	)
-	if err != nil {
-		return nil, err
-	}
-
 	// Query the channel router for a possible path to the destination that
 	// can carry `in.Amt` satoshis _including_ the total fee required on
 	// the route.
 	route, err := r.FindRoute(
 		sourcePubKey, targetPubKey, amt, restrictions,
-		customRecords, routeHintEdges, finalCLTVDelta,
+		customRecords, finalCLTVDelta,
 	)
 	if err != nil {
 		return nil, err
@@ -661,7 +621,7 @@ func (r *RouterBackend) extractIntentFromSendRequest(
 			payIntent.FinalCLTVDelta =
 				uint16(rpcPayReq.FinalCltvDelta)
 		} else {
-			payIntent.FinalCLTVDelta = r.DefaultFinalCltvDelta
+			payIntent.FinalCLTVDelta = zpay32.DefaultFinalCLTVDelta
 		}
 
 		// Amount.
diff --git a/lnrpc/routerrpc/router_server.go b/lnrpc/routerrpc/router_server.go
index a1b7948c1..ba23a0799 100644
--- a/lnrpc/routerrpc/router_server.go
+++ b/lnrpc/routerrpc/router_server.go
@@ -260,7 +260,7 @@ func (s *Server) EstimateRouteFee(ctx context.Context,
 		&routing.RestrictParams{
 			FeeLimit:  feeLimit,
 			CltvLimit: s.cfg.RouterBackend.MaxTotalTimelock,
-		}, nil, nil, s.cfg.RouterBackend.DefaultFinalCltvDelta,
+		}, nil,
 	)
 	if err != nil {
 		return nil, err
@@ -326,12 +326,12 @@ func marshallError(sendError error) (*Failure, error) {
 		return response, nil
 	}
 
-	rtErr, ok := sendError.(htlcswitch.ClearTextError)
+	fErr, ok := sendError.(*htlcswitch.ForwardingError)
 	if !ok {
 		return nil, sendError
 	}
 
-	switch onionErr := rtErr.WireMessage().(type) {
+	switch onionErr := fErr.FailureMessage.(type) {
 
 	case *lnwire.FailIncorrectDetails:
 		response.Code = Failure_INCORRECT_OR_UNKNOWN_PAYMENT_DETAILS
@@ -425,16 +425,7 @@ func marshallError(sendError error) (*Failure, error) {
 		return nil, fmt.Errorf("cannot marshall failure %T", onionErr)
 	}
 
-	// If the ClearTextError received is a ForwardingError, the error
-	// originated from a node along the route, not locally on our outgoing
-	// link. We set failureSourceIdx to the index of the node where the
-	// failure occurred. If the error is not a ForwardingError, the failure
-	// occurred at our node, so we leave the index as 0 to indicate that
-	// we failed locally.
-	fErr, ok := rtErr.(*htlcswitch.ForwardingError)
-	if ok {
-		response.FailureSourceIndex = uint32(fErr.FailureSourceIdx)
-	}
+	response.FailureSourceIndex = uint32(fErr.FailureSourceIdx)
 
 	return response, nil
 }
diff --git a/lnrpc/rpc.pb.go b/lnrpc/rpc.pb.go
index 4ac5c5b3d..65c837c9c 100644
--- a/lnrpc/rpc.pb.go
+++ b/lnrpc/rpc.pb.go
@@ -5902,27 +5902,10 @@ type QueryRoutesRequest struct {
 	//does not support the specified recrods, and error will be returned.
 	//Record types are required to be in the custom range >= 65536. When using
 	//REST, the values must be encoded as base64.
-	DestCustomRecords map[uint64][]byte `protobuf:"bytes,13,rep,name=dest_custom_records,json=destCustomRecords,proto3" json:"dest_custom_records,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
-	//*
-	//The channel id of the channel that must be taken to the first hop. If zero,
-	//any channel may be used.
-	OutgoingChanId uint64 `protobuf:"varint,14,opt,name=outgoing_chan_id,json=outgoingChanId,proto3" json:"outgoing_chan_id,omitempty"`
-	//*
-	//The pubkey of the last hop of the route. If empty, any hop may be used.
-	LastHopPubkey []byte `protobuf:"bytes,15,opt,name=last_hop_pubkey,json=lastHopPubkey,proto3" json:"last_hop_pubkey,omitempty"`
-	//*
-	//Optional route hints to reach the destination through private channels.
-	RouteHints []*RouteHint `protobuf:"bytes,16,rep,name=route_hints,json=routeHints,proto3" json:"route_hints,omitempty"`
-	//*
-	//Features assumed to be supported by the final node. All transitive feature
-	//depdencies must also be set properly. For a given feature bit pair, either
-	//optional or remote may be set, but not both. If this field is nil or empty,
-	//the router will try to load destination features from the graph as a
-	//fallback.
-	DestFeatures         []FeatureBit `protobuf:"varint,17,rep,packed,name=dest_features,json=destFeatures,proto3,enum=lnrpc.FeatureBit" json:"dest_features,omitempty"`
-	XXX_NoUnkeyedLiteral struct{}     `json:"-"`
-	XXX_unrecognized     []byte       `json:"-"`
-	XXX_sizecache        int32        `json:"-"`
+	DestCustomRecords    map[uint64][]byte `protobuf:"bytes,13,rep,name=dest_custom_records,json=destCustomRecords,proto3" json:"dest_custom_records,omitempty" protobuf_key:"varint,1,opt,name=key,proto3" protobuf_val:"bytes,2,opt,name=value,proto3"`
+	XXX_NoUnkeyedLiteral struct{}          `json:"-"`
+	XXX_unrecognized     []byte            `json:"-"`
+	XXX_sizecache        int32             `json:"-"`
 }
 
 func (m *QueryRoutesRequest) Reset()         { *m = QueryRoutesRequest{} }
@@ -6035,34 +6018,6 @@ func (m *QueryRoutesRequest) GetDestCustomRecords() map[uint64][]byte {
 	return nil
 }
 
-func (m *QueryRoutesRequest) GetOutgoingChanId() uint64 {
-	if m != nil {
-		return m.OutgoingChanId
-	}
-	return 0
-}
-
-func (m *QueryRoutesRequest) GetLastHopPubkey() []byte {
-	if m != nil {
-		return m.LastHopPubkey
-	}
-	return nil
-}
-
-func (m *QueryRoutesRequest) GetRouteHints() []*RouteHint {
-	if m != nil {
-		return m.RouteHints
-	}
-	return nil
-}
-
-func (m *QueryRoutesRequest) GetDestFeatures() []FeatureBit {
-	if m != nil {
-		return m.DestFeatures
-	}
-	return nil
-}
-
 type NodePair struct {
 	//*
 	//The sending node of the pair. When using REST, this field must be encoded as
@@ -10552,622 +10507,621 @@ func init() {
 func init() { proto.RegisterFile("rpc.proto", fileDescriptor_77a6da22d6a3feb1) }
 
 var fileDescriptor_77a6da22d6a3feb1 = []byte{
-	// 9839 bytes of a gzipped FileDescriptorProto
+	// 9815 bytes of a gzipped FileDescriptorProto
 	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x7d, 0x4b, 0x6c, 0x24, 0xc9,
 	0x95, 0x58, 0x67, 0x7d, 0xc8, 0xaa, 0x57, 0x1f, 0x16, 0x83, 0x6c, 0xb2, 0xba, 0xfa, 0x33, 0x3d,
-	0xa9, 0xd6, 0x4c, 0x8b, 0x1a, 0xb1, 0x7b, 0x28, 0x69, 0x76, 0x76, 0xda, 0xab, 0x15, 0x7f, 0xdd,
-	0xa4, 0x86, 0x4d, 0x52, 0x49, 0xb6, 0x7a, 0x25, 0xed, 0x22, 0x95, 0xac, 0x0a, 0x92, 0xa9, 0xae,
-	0xca, 0x2c, 0x65, 0x66, 0x91, 0x4d, 0xc9, 0xe3, 0x83, 0x61, 0x1b, 0x86, 0x2f, 0x86, 0xb0, 0x30,
-	0xe0, 0x35, 0x6c, 0x2c, 0xa0, 0xb5, 0x61, 0x18, 0x06, 0x6c, 0x5f, 0x6c, 0xac, 0x0d, 0xf9, 0xe4,
-	0xc3, 0xfa, 0x62, 0xf8, 0x60, 0x03, 0x06, 0x6c, 0xc0, 0xc0, 0x62, 0x7d, 0xf0, 0xc2, 0x17, 0x1f,
-	0x6c, 0x9f, 0x8d, 0x78, 0xf1, 0xc9, 0x88, 0xcc, 0x2c, 0x76, 0x8f, 0xa4, 0xd5, 0xa5, 0x9b, 0xf1,
-	0x5e, 0x64, 0x7c, 0xdf, 0x7b, 0xf1, 0x7e, 0x11, 0x05, 0xf5, 0x68, 0xdc, 0x5f, 0x1d, 0x47, 0x61,
-	0x12, 0x92, 0xea, 0x30, 0x88, 0xc6, 0xfd, 0xde, 0x9d, 0xb3, 0x30, 0x3c, 0x1b, 0xd2, 0x47, 0xde,
-	0xd8, 0x7f, 0xe4, 0x05, 0x41, 0x98, 0x78, 0x89, 0x1f, 0x06, 0x31, 0xaf, 0x64, 0xff, 0x00, 0xda,
-	0xcf, 0x68, 0x70, 0x44, 0xe9, 0xc0, 0xa1, 0x3f, 0x9a, 0xd0, 0x38, 0x21, 0x5f, 0x86, 0x79, 0x8f,
-	0xfe, 0x98, 0xd2, 0x81, 0x3b, 0xf6, 0xe2, 0x78, 0x7c, 0x1e, 0x79, 0x31, 0xed, 0x5a, 0xf7, 0xad,
-	0x87, 0x4d, 0xa7, 0xc3, 0x11, 0x87, 0x0a, 0x4e, 0xde, 0x85, 0x66, 0xcc, 0xaa, 0xd2, 0x20, 0x89,
-	0xc2, 0xf1, 0x55, 0xb7, 0x84, 0xf5, 0x1a, 0x0c, 0xb6, 0xcd, 0x41, 0xf6, 0x10, 0xe6, 0x54, 0x0f,
-	0xf1, 0x38, 0x0c, 0x62, 0x4a, 0x1e, 0xc3, 0x62, 0xdf, 0x1f, 0x9f, 0xd3, 0xc8, 0xc5, 0x8f, 0x47,
-	0x01, 0x1d, 0x85, 0x81, 0xdf, 0xef, 0x5a, 0xf7, 0xcb, 0x0f, 0xeb, 0x0e, 0xe1, 0x38, 0xf6, 0xc5,
-	0x73, 0x81, 0x21, 0xef, 0xc3, 0x1c, 0x0d, 0x38, 0x9c, 0x0e, 0xf0, 0x2b, 0xd1, 0x55, 0x3b, 0x05,
-	0xb3, 0x0f, 0xec, 0xbf, 0x59, 0x82, 0xf9, 0xdd, 0xc0, 0x4f, 0x5e, 0x7a, 0xc3, 0x21, 0x4d, 0xe4,
-	0x9c, 0xde, 0x87, 0xb9, 0x4b, 0x04, 0xe0, 0x9c, 0x2e, 0xc3, 0x68, 0x20, 0x66, 0xd4, 0xe6, 0xe0,
-	0x43, 0x01, 0x9d, 0x3a, 0xb2, 0xd2, 0xd4, 0x91, 0x15, 0x2e, 0x57, 0x79, 0xca, 0x72, 0xbd, 0x0f,
-	0x73, 0x11, 0xed, 0x87, 0x17, 0x34, 0xba, 0x72, 0x2f, 0xfd, 0x60, 0x10, 0x5e, 0x76, 0x2b, 0xf7,
-	0xad, 0x87, 0x55, 0xa7, 0x2d, 0xc1, 0x2f, 0x11, 0x4a, 0x36, 0x60, 0xae, 0x7f, 0xee, 0x05, 0x01,
-	0x1d, 0xba, 0x27, 0x5e, 0xff, 0xd5, 0x64, 0x1c, 0x77, 0xab, 0xf7, 0xad, 0x87, 0x8d, 0xb5, 0x5b,
-	0xab, 0xb8, 0xab, 0xab, 0x9b, 0xe7, 0x5e, 0xb0, 0x81, 0x98, 0xa3, 0xc0, 0x1b, 0xc7, 0xe7, 0x61,
-	0xe2, 0xb4, 0xc5, 0x17, 0x1c, 0x1c, 0xdb, 0x8b, 0x40, 0xf4, 0x95, 0xe0, 0x6b, 0x6f, 0xff, 0x53,
-	0x0b, 0x16, 0x5e, 0x04, 0xc3, 0xb0, 0xff, 0xea, 0x17, 0x5c, 0xa2, 0x82, 0x39, 0x94, 0xde, 0x76,
-	0x0e, 0xe5, 0xcf, 0x3b, 0x87, 0x25, 0x58, 0x34, 0x07, 0x2b, 0x66, 0x41, 0xe1, 0x26, 0xfb, 0xfa,
-	0x8c, 0xca, 0x61, 0xc9, 0x69, 0x7c, 0x09, 0x3a, 0xfd, 0x49, 0x14, 0xd1, 0x20, 0x37, 0x8f, 0x39,
-	0x01, 0x57, 0x13, 0x79, 0x17, 0x9a, 0x01, 0xbd, 0x4c, 0xab, 0x09, 0xda, 0x0d, 0xe8, 0xa5, 0xac,
-	0x62, 0x77, 0x61, 0x29, 0xdb, 0x8d, 0x18, 0xc0, 0x9f, 0x5a, 0x50, 0x79, 0x91, 0xbc, 0x0e, 0xc9,
-	0x2a, 0x54, 0x92, 0xab, 0x31, 0xe7, 0x90, 0xf6, 0x1a, 0x11, 0x53, 0x5b, 0x1f, 0x0c, 0x22, 0x1a,
-	0xc7, 0xc7, 0x57, 0x63, 0xea, 0x34, 0x3d, 0x5e, 0x70, 0x59, 0x3d, 0xd2, 0x85, 0x59, 0x51, 0xc6,
-	0x0e, 0xeb, 0x8e, 0x2c, 0x92, 0x7b, 0x00, 0xde, 0x28, 0x9c, 0x04, 0x89, 0x1b, 0x7b, 0x09, 0x2e,
-	0x55, 0xd9, 0xd1, 0x20, 0xe4, 0x0e, 0xd4, 0xc7, 0xaf, 0xdc, 0xb8, 0x1f, 0xf9, 0xe3, 0x04, 0xc9,
-	0xa6, 0xee, 0xa4, 0x00, 0xf2, 0x65, 0xa8, 0x85, 0x93, 0x64, 0x1c, 0xfa, 0x41, 0x22, 0x48, 0x65,
-	0x4e, 0x8c, 0xe5, 0x60, 0x92, 0x1c, 0x32, 0xb0, 0xa3, 0x2a, 0x90, 0x07, 0xd0, 0xea, 0x87, 0xc1,
-	0xa9, 0x1f, 0x8d, 0xb8, 0x30, 0xe8, 0xce, 0x60, 0x6f, 0x26, 0xd0, 0xfe, 0xd7, 0x25, 0x68, 0x1c,
-	0x47, 0x5e, 0x10, 0x7b, 0x7d, 0x06, 0x60, 0x43, 0x4f, 0x5e, 0xbb, 0xe7, 0x5e, 0x7c, 0x8e, 0xb3,
-	0xad, 0x3b, 0xb2, 0x48, 0x96, 0x60, 0x86, 0x0f, 0x14, 0xe7, 0x54, 0x76, 0x44, 0x89, 0x7c, 0x00,
-	0xf3, 0xc1, 0x64, 0xe4, 0x9a, 0x7d, 0x95, 0x91, 0x5a, 0xf2, 0x08, 0xb6, 0x00, 0x27, 0x6c, 0xaf,
-	0x79, 0x17, 0x7c, 0x86, 0x1a, 0x84, 0xd8, 0xd0, 0x14, 0x25, 0xea, 0x9f, 0x9d, 0xf3, 0x69, 0x56,
-	0x1d, 0x03, 0xc6, 0xda, 0x48, 0xfc, 0x11, 0x75, 0xe3, 0xc4, 0x1b, 0x8d, 0xc5, 0xb4, 0x34, 0x08,
-	0xe2, 0xc3, 0xc4, 0x1b, 0xba, 0xa7, 0x94, 0xc6, 0xdd, 0x59, 0x81, 0x57, 0x10, 0xf2, 0x1e, 0xb4,
-	0x07, 0x34, 0x4e, 0x5c, 0xb1, 0x29, 0x34, 0xee, 0xd6, 0x90, 0xf5, 0x33, 0x50, 0xd6, 0x4e, 0xe4,
-	0x5d, 0xba, 0x6c, 0x01, 0xe8, 0xeb, 0x6e, 0x9d, 0x8f, 0x35, 0x85, 0x30, 0xca, 0x79, 0x46, 0x13,
-	0x6d, 0xf5, 0x62, 0x41, 0xa1, 0xf6, 0x1e, 0x10, 0x0d, 0xbc, 0x45, 0x13, 0xcf, 0x1f, 0xc6, 0xe4,
-	0x23, 0x68, 0x26, 0x5a, 0x65, 0x14, 0x85, 0x0d, 0x45, 0x4e, 0xda, 0x07, 0x8e, 0x51, 0xcf, 0x3e,
-	0x87, 0xda, 0x53, 0x4a, 0xf7, 0xfc, 0x91, 0x9f, 0x90, 0x25, 0xa8, 0x9e, 0xfa, 0xaf, 0x29, 0x27,
-	0xf8, 0xf2, 0xce, 0x0d, 0x87, 0x17, 0xc9, 0x3b, 0x00, 0xf8, 0x87, 0x3b, 0x52, 0x84, 0xb5, 0x73,
-	0xc3, 0xa9, 0x23, 0xec, 0x39, 0xa3, 0xac, 0x1e, 0xcc, 0x8e, 0x69, 0xd4, 0xa7, 0x72, 0xff, 0x76,
-	0x6e, 0x38, 0x12, 0xb0, 0x31, 0x0b, 0xd5, 0x21, 0x6b, 0xdd, 0xfe, 0x93, 0x2a, 0x34, 0x8e, 0x68,
-	0xa0, 0x38, 0x8d, 0x40, 0x85, 0xad, 0x89, 0xe0, 0x2e, 0xfc, 0x9b, 0x7c, 0x01, 0x1a, 0xb8, 0x4e,
-	0x71, 0x12, 0xf9, 0xc1, 0x19, 0x27, 0xf0, 0x8d, 0x52, 0xd7, 0x72, 0x80, 0x81, 0x8f, 0x10, 0x4a,
-	0x3a, 0x50, 0xf6, 0x46, 0x92, 0xc0, 0xd9, 0x9f, 0xe4, 0x16, 0xd4, 0xbc, 0x51, 0xc2, 0x87, 0xd7,
-	0x44, 0xf0, 0xac, 0x37, 0x4a, 0x70, 0x68, 0xef, 0x42, 0x73, 0xec, 0x5d, 0x8d, 0x18, 0x3f, 0x2b,
-	0xaa, 0x68, 0x3a, 0x0d, 0x01, 0xdb, 0x61, 0x64, 0xb1, 0x06, 0x0b, 0x7a, 0x15, 0xd9, 0x79, 0x55,
-	0x75, 0x3e, 0xaf, 0xd5, 0x16, 0x63, 0x78, 0x1f, 0xe6, 0xe4, 0x37, 0x11, 0x9f, 0x0f, 0xd2, 0x4a,
-	0xdd, 0x69, 0x0b, 0xb0, 0x9c, 0xe5, 0x43, 0xe8, 0x9c, 0xfa, 0x81, 0x37, 0x74, 0xfb, 0xc3, 0xe4,
-	0xc2, 0x1d, 0xd0, 0x61, 0xe2, 0x21, 0xd5, 0x54, 0x9d, 0x36, 0xc2, 0x37, 0x87, 0xc9, 0xc5, 0x16,
-	0x83, 0x92, 0x0f, 0xa0, 0x7e, 0x4a, 0xa9, 0x8b, 0x8b, 0xd5, 0xad, 0x19, 0x1c, 0x28, 0x77, 0xc8,
-	0xa9, 0x9d, 0xca, 0xbd, 0xfa, 0x00, 0x3a, 0xe1, 0x24, 0x39, 0x0b, 0xfd, 0xe0, 0xcc, 0x65, 0x32,
-	0xcf, 0xf5, 0x07, 0x48, 0x45, 0x95, 0x8d, 0xd2, 0x63, 0xcb, 0x69, 0x4b, 0x1c, 0x93, 0x3e, 0xbb,
-	0x03, 0xf2, 0x1e, 0xcc, 0x0d, 0xbd, 0x38, 0x71, 0xcf, 0xc3, 0xb1, 0x3b, 0x9e, 0x9c, 0xbc, 0xa2,
-	0x57, 0xdd, 0x16, 0x2e, 0x44, 0x8b, 0x81, 0x77, 0xc2, 0xf1, 0x21, 0x02, 0xc9, 0x5d, 0x00, 0x1c,
-	0x27, 0x1f, 0x04, 0xdc, 0xb7, 0x1e, 0xb6, 0x9c, 0x3a, 0x83, 0xf0, 0x4e, 0xbf, 0x0b, 0x0b, 0xb8,
-	0x3d, 0xfd, 0x49, 0x9c, 0x84, 0x23, 0x97, 0xc9, 0xeb, 0x68, 0x10, 0x77, 0x1b, 0x48, 0x6b, 0x5f,
-	0x12, 0x83, 0xd5, 0xf6, 0x78, 0x75, 0x8b, 0xc6, 0xc9, 0x26, 0x56, 0x76, 0x78, 0x5d, 0x76, 0xa8,
-	0x5f, 0x39, 0xf3, 0x83, 0x2c, 0x9c, 0x7c, 0x00, 0xc4, 0x1b, 0x0e, 0xc3, 0x4b, 0x37, 0xa6, 0xc3,
-	0x53, 0x57, 0x2c, 0x62, 0xb7, 0x7d, 0xdf, 0x7a, 0x58, 0x73, 0x3a, 0x88, 0x39, 0xa2, 0xc3, 0xd3,
-	0x43, 0x0e, 0x27, 0x1f, 0x41, 0x0b, 0x07, 0x72, 0x4a, 0xbd, 0x64, 0x12, 0xd1, 0xb8, 0x3b, 0x77,
-	0xbf, 0xfc, 0xb0, 0xbd, 0x36, 0xaf, 0xd6, 0x0b, 0xc1, 0x1b, 0x7e, 0xe2, 0x34, 0x59, 0x3d, 0x51,
-	0x8e, 0x7b, 0x5b, 0xb0, 0x54, 0x3c, 0x24, 0x46, 0x54, 0x6c, 0x55, 0x18, 0x31, 0x56, 0x1c, 0xf6,
-	0x27, 0x59, 0x84, 0xea, 0x85, 0x37, 0x9c, 0x50, 0x21, 0xd7, 0x79, 0xe1, 0x93, 0xd2, 0xc7, 0x96,
-	0xfd, 0xc7, 0x16, 0x34, 0xf9, 0x2c, 0x85, 0x3e, 0xf2, 0x00, 0x5a, 0x92, 0x1a, 0x68, 0x14, 0x85,
-	0x91, 0x10, 0x6f, 0x26, 0x90, 0xac, 0x40, 0x47, 0x02, 0xc6, 0x11, 0xf5, 0x47, 0xde, 0x99, 0x6c,
-	0x3b, 0x07, 0x27, 0x6b, 0x69, 0x8b, 0x51, 0x38, 0x49, 0xa8, 0x38, 0xf9, 0x9a, 0x62, 0x82, 0x0e,
-	0x83, 0x39, 0x66, 0x15, 0x26, 0xde, 0x0a, 0x48, 0xdd, 0x80, 0xd9, 0x7f, 0xc7, 0x02, 0xc2, 0x86,
-	0x7e, 0x1c, 0xf2, 0x26, 0x04, 0x95, 0x66, 0xb9, 0xc4, 0x7a, 0x6b, 0x2e, 0x29, 0x5d, 0xc7, 0x25,
-	0x36, 0x54, 0xf9, 0xe8, 0x2b, 0x05, 0xa3, 0xe7, 0xa8, 0x6f, 0x55, 0x6a, 0xe5, 0x4e, 0xc5, 0xfe,
-	0xaf, 0x65, 0x58, 0xdc, 0xe4, 0x47, 0xf7, 0x7a, 0xbf, 0x4f, 0xc7, 0x8a, 0x7f, 0xde, 0x81, 0x46,
-	0x10, 0x0e, 0xa8, 0xa4, 0x5a, 0x3e, 0x30, 0x60, 0x20, 0x8d, 0x64, 0xcf, 0x3d, 0x3f, 0xe0, 0x03,
-	0xe7, 0xeb, 0x59, 0x47, 0x08, 0x0e, 0xfb, 0x3d, 0x98, 0x1b, 0xd3, 0x60, 0xa0, 0xb3, 0x09, 0x57,
-	0xae, 0x5a, 0x02, 0x2c, 0x38, 0xe4, 0x1d, 0x68, 0x9c, 0x4e, 0x78, 0x3d, 0x26, 0x5c, 0x2a, 0x48,
-	0x07, 0x20, 0x40, 0xeb, 0x5c, 0xc6, 0x8c, 0x27, 0xf1, 0x39, 0x62, 0xab, 0x88, 0x9d, 0x65, 0x65,
-	0x86, 0xba, 0x0b, 0x30, 0x98, 0xc4, 0x89, 0xe0, 0x9a, 0x19, 0x44, 0xd6, 0x19, 0x84, 0x73, 0xcd,
-	0x57, 0x60, 0x61, 0xe4, 0xbd, 0x76, 0x91, 0x7e, 0x5c, 0x3f, 0x70, 0x4f, 0x87, 0x78, 0xfa, 0xcc,
-	0x62, 0xbd, 0xce, 0xc8, 0x7b, 0xfd, 0x1d, 0x86, 0xd9, 0x0d, 0x9e, 0x22, 0x9c, 0x89, 0x16, 0xa9,
-	0xf6, 0x44, 0x34, 0xa6, 0xd1, 0x05, 0x45, 0x69, 0x50, 0x51, 0xba, 0x8d, 0xc3, 0xa1, 0x6c, 0x44,
-	0x23, 0x36, 0xef, 0x64, 0xd8, 0xe7, 0xac, 0xef, 0xcc, 0x8e, 0xfc, 0x60, 0x27, 0x19, 0xf6, 0xc9,
-	0x1d, 0x00, 0x26, 0x4b, 0xc6, 0x34, 0x72, 0x5f, 0x5d, 0x22, 0x1f, 0x57, 0x50, 0x76, 0x1c, 0xd2,
-	0xe8, 0xd3, 0x4b, 0x72, 0x1b, 0xea, 0xfd, 0x18, 0x85, 0x91, 0x77, 0xd5, 0x6d, 0x20, 0x93, 0xd7,
-	0xfa, 0x31, 0x13, 0x43, 0xde, 0x15, 0x63, 0x44, 0x36, 0x5a, 0x0f, 0x77, 0x81, 0x0e, 0xb0, 0xf9,
-	0x18, 0xa5, 0x6a, 0x0b, 0x07, 0xbb, 0x2e, 0x10, 0xac, 0x9f, 0x98, 0x7c, 0x01, 0x5a, 0x72, 0xb0,
-	0xa7, 0x43, 0xef, 0x2c, 0x46, 0xb1, 0xd2, 0x72, 0x9a, 0x02, 0xf8, 0x94, 0xc1, 0xec, 0x97, 0x5c,
-	0xd9, 0xd2, 0xf6, 0x56, 0xf0, 0x0d, 0x3b, 0xf6, 0x11, 0x82, 0xfb, 0x5a, 0x73, 0x44, 0xa9, 0x68,
-	0xd3, 0x4a, 0x05, 0x9b, 0x66, 0xff, 0xcc, 0x82, 0xa6, 0x68, 0x19, 0x35, 0x14, 0xf2, 0x18, 0x88,
-	0xdc, 0xc5, 0xe4, 0xb5, 0x3f, 0x70, 0x4f, 0xae, 0x12, 0x1a, 0x73, 0xa2, 0xd9, 0xb9, 0xe1, 0x14,
-	0xe0, 0x98, 0x1c, 0x35, 0xa0, 0x71, 0x12, 0x71, 0x9a, 0xde, 0xb9, 0xe1, 0xe4, 0x30, 0x8c, 0xc5,
-	0x98, 0x0e, 0x34, 0x49, 0x5c, 0x3f, 0x18, 0xd0, 0xd7, 0x48, 0x4a, 0x2d, 0xc7, 0x80, 0x6d, 0xb4,
-	0xa1, 0xa9, 0x7f, 0x67, 0xff, 0x10, 0x6a, 0x52, 0x83, 0x42, 0xed, 0x21, 0x33, 0x2e, 0x47, 0x83,
-	0x90, 0x1e, 0xd4, 0xcc, 0x51, 0x38, 0xb5, 0xcf, 0xd3, 0xb7, 0xfd, 0x0d, 0xe8, 0xec, 0x31, 0x22,
-	0x0a, 0x18, 0xd1, 0x0a, 0xb5, 0x70, 0x09, 0x66, 0x34, 0xe6, 0xa9, 0x3b, 0xa2, 0xc4, 0xce, 0xdf,
-	0xf3, 0x30, 0x4e, 0x44, 0x3f, 0xf8, 0xb7, 0xfd, 0x27, 0x16, 0x90, 0xed, 0x38, 0xf1, 0x47, 0x5e,
-	0x42, 0x9f, 0x52, 0x25, 0x1e, 0x0e, 0xa0, 0xc9, 0x5a, 0x3b, 0x0e, 0xd7, 0xb9, 0x92, 0xc6, 0x95,
-	0x8b, 0x2f, 0x0b, 0x76, 0xce, 0x7f, 0xb0, 0xaa, 0xd7, 0xe6, 0x22, 0xdf, 0x68, 0x80, 0x71, 0x5b,
-	0xe2, 0x45, 0x67, 0x34, 0x41, 0x0d, 0x4e, 0xe8, 0xff, 0xc0, 0x41, 0x9b, 0x61, 0x70, 0xda, 0xfb,
-	0x6d, 0x98, 0xcf, 0xb5, 0xa1, 0xcb, 0xe8, 0x7a, 0x81, 0x8c, 0x2e, 0xeb, 0x32, 0xba, 0x0f, 0x0b,
-	0xc6, 0xb8, 0x04, 0xc5, 0x75, 0x61, 0x96, 0x31, 0x06, 0x53, 0x14, 0x2c, 0xae, 0x28, 0x88, 0x22,
-	0x59, 0x83, 0xc5, 0x53, 0x4a, 0x23, 0x2f, 0xc1, 0x22, 0xb2, 0x0e, 0xdb, 0x13, 0xd1, 0x72, 0x21,
-	0xce, 0xfe, 0x33, 0x0b, 0xe6, 0x98, 0x34, 0x7d, 0xee, 0x05, 0x57, 0x72, 0xad, 0xf6, 0x0a, 0xd7,
-	0xea, 0xa1, 0x76, 0x38, 0x6a, 0xb5, 0x3f, 0xef, 0x42, 0x95, 0xb3, 0x0b, 0x45, 0xee, 0x43, 0xd3,
-	0x18, 0x6e, 0x95, 0x6b, 0xa4, 0xb1, 0x97, 0x1c, 0xd2, 0x68, 0xe3, 0x2a, 0xa1, 0xbf, 0xfc, 0x52,
-	0xbe, 0x07, 0x9d, 0x74, 0xd8, 0x62, 0x1d, 0x09, 0x54, 0x18, 0x61, 0x8a, 0x06, 0xf0, 0x6f, 0xfb,
-	0xef, 0x5b, 0xbc, 0xe2, 0x66, 0xe8, 0x2b, 0x6d, 0x95, 0x55, 0x64, 0x4a, 0xaf, 0xac, 0xc8, 0xfe,
-	0x9e, 0xaa, 0xed, 0xff, 0xf2, 0x93, 0x65, 0x32, 0x31, 0xa6, 0xc1, 0xc0, 0xf5, 0x86, 0x43, 0x14,
-	0xc4, 0x35, 0x67, 0x96, 0x95, 0xd7, 0x87, 0x43, 0xfb, 0x7d, 0x98, 0xd7, 0x46, 0x77, 0xcd, 0x3c,
-	0xf6, 0x81, 0xec, 0xf9, 0x71, 0xf2, 0x22, 0x88, 0xc7, 0x9a, 0x22, 0x77, 0x1b, 0xea, 0x4c, 0xda,
-	0xb2, 0x91, 0x71, 0xce, 0xad, 0x3a, 0x4c, 0xfc, 0xb2, 0x71, 0xc5, 0x88, 0xf4, 0x5e, 0x0b, 0x64,
-	0x49, 0x20, 0xbd, 0xd7, 0x88, 0xb4, 0x3f, 0x86, 0x05, 0xa3, 0x3d, 0xd1, 0xf5, 0xbb, 0x50, 0x9d,
-	0x24, 0xaf, 0x43, 0xa9, 0xaa, 0x37, 0x04, 0x85, 0x30, 0xa3, 0xd0, 0xe1, 0x18, 0xfb, 0x09, 0xcc,
-	0xef, 0xd3, 0x4b, 0xc1, 0xc8, 0x72, 0x20, 0xef, 0xbd, 0xd1, 0x60, 0x44, 0xbc, 0xbd, 0x0a, 0x44,
-	0xff, 0x38, 0x65, 0x00, 0x69, 0x3e, 0x5a, 0x86, 0xf9, 0x68, 0xbf, 0x07, 0xe4, 0xc8, 0x3f, 0x0b,
-	0x9e, 0xd3, 0x38, 0xf6, 0xce, 0x14, 0xeb, 0x77, 0xa0, 0x3c, 0x8a, 0xcf, 0x84, 0xa8, 0x62, 0x7f,
-	0xda, 0x5f, 0x85, 0x05, 0xa3, 0x9e, 0x68, 0xf8, 0x0e, 0xd4, 0x63, 0xff, 0x2c, 0x40, 0x45, 0x4b,
-	0x34, 0x9d, 0x02, 0xec, 0xa7, 0xb0, 0xf8, 0x1d, 0x1a, 0xf9, 0xa7, 0x57, 0x6f, 0x6a, 0xde, 0x6c,
-	0xa7, 0x94, 0x6d, 0x67, 0x1b, 0x6e, 0x66, 0xda, 0x11, 0xdd, 0x73, 0xf2, 0x15, 0x3b, 0x59, 0x73,
-	0x78, 0x41, 0x93, 0x7d, 0x25, 0x5d, 0xf6, 0xd9, 0x2f, 0x80, 0x6c, 0x86, 0x41, 0x40, 0xfb, 0xc9,
-	0x21, 0xa5, 0x51, 0xea, 0xb9, 0x4a, 0x69, 0xb5, 0xb1, 0xb6, 0x2c, 0x56, 0x36, 0x2b, 0x50, 0x05,
-	0x11, 0x13, 0xa8, 0x8c, 0x69, 0x34, 0xc2, 0x86, 0x6b, 0x0e, 0xfe, 0x6d, 0xdf, 0x84, 0x05, 0xa3,
-	0x59, 0x61, 0xeb, 0x7f, 0x08, 0x37, 0xb7, 0xfc, 0xb8, 0x9f, 0xef, 0xb0, 0x0b, 0xb3, 0xe3, 0xc9,
-	0x89, 0x9b, 0x72, 0xa2, 0x2c, 0x32, 0xf3, 0x2f, 0xfb, 0x89, 0x68, 0xec, 0x6f, 0x58, 0x50, 0xd9,
-	0x39, 0xde, 0xdb, 0x64, 0x67, 0x85, 0x1f, 0xf4, 0xc3, 0x11, 0xd3, 0xc2, 0xf8, 0xa4, 0x55, 0x79,
-	0x2a, 0x87, 0xdd, 0x81, 0x3a, 0x2a, 0x6f, 0xcc, 0xe2, 0x15, 0x7a, 0x50, 0x0a, 0x60, 0xd6, 0x36,
-	0x7d, 0x3d, 0xf6, 0x23, 0x34, 0xa7, 0xa5, 0x91, 0x5c, 0xc1, 0x63, 0x26, 0x8f, 0xb0, 0xff, 0xfd,
-	0x2c, 0xcc, 0x8a, 0xc3, 0x97, 0x1f, 0xe4, 0x89, 0x7f, 0x41, 0xd3, 0x83, 0x9c, 0x95, 0x98, 0x62,
-	0x1c, 0xd1, 0x51, 0x98, 0x28, 0xfd, 0x8d, 0x6f, 0x83, 0x09, 0x44, 0x6f, 0x82, 0x50, 0x22, 0xb8,
-	0xff, 0xa1, 0xcc, 0x6b, 0x19, 0x40, 0x72, 0x07, 0x66, 0xa5, 0x32, 0x50, 0x51, 0x86, 0x8e, 0x04,
-	0xb1, 0xd5, 0xe8, 0x7b, 0x63, 0xaf, 0xef, 0x27, 0x57, 0x42, 0x2c, 0xa8, 0x32, 0x6b, 0x7f, 0x18,
-	0xf6, 0xbd, 0xa1, 0x7b, 0xe2, 0x0d, 0xbd, 0xa0, 0x4f, 0xa5, 0xb7, 0xc2, 0x00, 0x32, 0xcb, 0x5d,
-	0x0c, 0x4b, 0x56, 0xe3, 0xd6, 0x7d, 0x06, 0xca, 0xce, 0xf0, 0x7e, 0x38, 0x1a, 0xf9, 0xcc, 0xfa,
-	0xe0, 0xaa, 0x59, 0xd9, 0xd1, 0x20, 0xdc, 0x37, 0x82, 0xa5, 0x4b, 0xbe, 0x82, 0x75, 0xe9, 0x1b,
-	0xd1, 0x80, 0xac, 0x95, 0x8c, 0x86, 0x56, 0x76, 0x34, 0x08, 0xdb, 0x8b, 0x49, 0x10, 0xd3, 0x24,
-	0x19, 0xd2, 0x81, 0x1a, 0x50, 0x03, 0xab, 0xe5, 0x11, 0xe4, 0x31, 0x2c, 0x70, 0x1f, 0x44, 0xec,
-	0x25, 0x61, 0x7c, 0xee, 0xc7, 0x6e, 0xcc, 0xcc, 0x27, 0x6e, 0x0b, 0x17, 0xa1, 0xc8, 0xc7, 0xb0,
-	0x9c, 0x01, 0x47, 0xb4, 0x4f, 0xfd, 0x0b, 0x3a, 0x40, 0x15, 0xae, 0xec, 0x4c, 0x43, 0x93, 0xfb,
-	0xd0, 0x08, 0x26, 0x23, 0x77, 0x32, 0x1e, 0x78, 0x4c, 0x89, 0x69, 0xa3, 0x72, 0xa9, 0x83, 0xc8,
-	0x87, 0x20, 0xf5, 0x34, 0xa1, 0x3d, 0xce, 0x19, 0x12, 0x8e, 0x51, 0xaf, 0x63, 0xd6, 0x60, 0x84,
-	0x99, 0xaa, 0xa4, 0x1d, 0x61, 0x77, 0x4a, 0x00, 0xf2, 0x49, 0xe4, 0x5f, 0x78, 0x09, 0xed, 0xce,
-	0x73, 0xa1, 0x2e, 0x8a, 0xec, 0x3b, 0x3f, 0xf0, 0x13, 0xdf, 0x4b, 0xc2, 0xa8, 0x4b, 0x10, 0x97,
-	0x02, 0xd8, 0x22, 0x22, 0x7d, 0xc4, 0x89, 0x97, 0x4c, 0x62, 0xa1, 0xa1, 0x2e, 0x20, 0x71, 0xe5,
-	0x11, 0xe4, 0x23, 0x58, 0xe2, 0x14, 0x81, 0x28, 0xa1, 0x7b, 0xa3, 0xaa, 0xb0, 0x88, 0x2b, 0x32,
-	0x05, 0xcb, 0x96, 0x52, 0x90, 0x48, 0xee, 0xc3, 0x9b, 0x7c, 0x29, 0xa7, 0xa0, 0xd9, 0xf8, 0xd8,
-	0x08, 0xfc, 0xbe, 0x2b, 0x6a, 0x30, 0x16, 0x59, 0xc2, 0x59, 0xe4, 0x11, 0x8c, 0xc4, 0x87, 0xfe,
-	0x29, 0x4d, 0xfc, 0x11, 0xed, 0x2e, 0x73, 0x12, 0x97, 0x65, 0xc6, 0x80, 0x93, 0x31, 0x62, 0xba,
-	0x9c, 0xe1, 0x79, 0x09, 0x89, 0x71, 0x18, 0xc6, 0x54, 0x7a, 0x9e, 0xba, 0xb7, 0x04, 0x6b, 0xe9,
-	0x40, 0xfb, 0x0f, 0x2d, 0x7e, 0x44, 0x09, 0x76, 0x8e, 0x35, 0xe3, 0x8b, 0x33, 0xb2, 0x1b, 0x06,
-	0xc3, 0x2b, 0xc1, 0xdb, 0xc0, 0x41, 0x07, 0xc1, 0xf0, 0x8a, 0xa9, 0xff, 0x7e, 0xa0, 0x57, 0xe1,
-	0xd2, 0xb0, 0x29, 0x81, 0x58, 0xe9, 0x1d, 0x68, 0x8c, 0x27, 0x27, 0x43, 0xbf, 0xcf, 0xab, 0x94,
-	0x79, 0x2b, 0x1c, 0x84, 0x15, 0x98, 0xf5, 0xc9, 0xf7, 0x93, 0xd7, 0xa8, 0x60, 0x8d, 0x86, 0x80,
-	0xb1, 0x2a, 0xf6, 0x06, 0x2c, 0x9a, 0x03, 0x14, 0x62, 0x7f, 0x05, 0x6a, 0x42, 0x4a, 0x48, 0x37,
-	0x44, 0x5b, 0x73, 0x0e, 0x33, 0x63, 0x49, 0xe1, 0xed, 0x7f, 0x53, 0x81, 0x05, 0x01, 0xdd, 0x64,
-	0xd3, 0x3f, 0x9a, 0x8c, 0x46, 0x5e, 0x54, 0x20, 0x7e, 0xac, 0x37, 0x88, 0x9f, 0x52, 0x5e, 0xfc,
-	0xdc, 0x33, 0xac, 0x50, 0x2e, 0xbf, 0x34, 0x08, 0x79, 0x08, 0x73, 0x6c, 0xc9, 0xb9, 0x51, 0xa0,
-	0xfb, 0x27, 0xb3, 0xe0, 0xbc, 0xc8, 0xac, 0x16, 0x89, 0x4c, 0x5d, 0xdc, 0xcd, 0x64, 0xc4, 0x9d,
-	0x0d, 0x4d, 0xbe, 0xbd, 0x42, 0x82, 0xcf, 0x0a, 0x93, 0x4c, 0x83, 0xb1, 0xf1, 0x64, 0x85, 0x0b,
-	0x97, 0x64, 0x73, 0x45, 0xa2, 0xc5, 0x1f, 0x51, 0x3c, 0x21, 0xb4, 0xda, 0x75, 0x21, 0x5a, 0xf2,
-	0x28, 0xf2, 0x14, 0x80, 0xf7, 0x85, 0x6a, 0x0a, 0xa0, 0x9a, 0xf2, 0x9e, 0xb9, 0x2b, 0xfa, 0xfa,
-	0xaf, 0xb2, 0xc2, 0x24, 0xa2, 0xa8, 0xba, 0x68, 0x5f, 0xda, 0x7f, 0xcb, 0x82, 0x86, 0x86, 0x23,
-	0x37, 0x61, 0x7e, 0xf3, 0xe0, 0xe0, 0x70, 0xdb, 0x59, 0x3f, 0xde, 0xfd, 0xce, 0xb6, 0xbb, 0xb9,
-	0x77, 0x70, 0xb4, 0xdd, 0xb9, 0xc1, 0xc0, 0x7b, 0x07, 0x9b, 0xeb, 0x7b, 0xee, 0xd3, 0x03, 0x67,
-	0x53, 0x82, 0x2d, 0xb2, 0x04, 0xc4, 0xd9, 0x7e, 0x7e, 0x70, 0xbc, 0x6d, 0xc0, 0x4b, 0xa4, 0x03,
-	0xcd, 0x0d, 0x67, 0x7b, 0x7d, 0x73, 0x47, 0x40, 0xca, 0x64, 0x11, 0x3a, 0x4f, 0x5f, 0xec, 0x6f,
-	0xed, 0xee, 0x3f, 0x73, 0x37, 0xd7, 0xf7, 0x37, 0xb7, 0xf7, 0xb6, 0xb7, 0x3a, 0x15, 0xd2, 0x82,
-	0xfa, 0xfa, 0xc6, 0xfa, 0xfe, 0xd6, 0xc1, 0xfe, 0xf6, 0x56, 0xa7, 0x6a, 0xff, 0x77, 0x0b, 0x6e,
-	0xe2, 0xa8, 0x07, 0x59, 0x26, 0xb9, 0x0f, 0x8d, 0x7e, 0x18, 0x8e, 0x99, 0x79, 0x90, 0x1e, 0x80,
-	0x3a, 0x88, 0x31, 0x00, 0x17, 0x1d, 0xa7, 0x61, 0xd4, 0xa7, 0x82, 0x47, 0x00, 0x41, 0x4f, 0x19,
-	0x84, 0x31, 0x80, 0xd8, 0x5e, 0x5e, 0x83, 0xb3, 0x48, 0x83, 0xc3, 0x78, 0x95, 0x25, 0x98, 0x39,
-	0x89, 0xa8, 0xd7, 0x3f, 0x17, 0xdc, 0x21, 0x4a, 0xe4, 0x4b, 0xa9, 0xfd, 0xda, 0x67, 0xab, 0x3f,
-	0xa4, 0x03, 0xa4, 0x98, 0x9a, 0x33, 0x27, 0xe0, 0x9b, 0x02, 0xcc, 0x64, 0xa5, 0x77, 0xe2, 0x05,
-	0x83, 0x30, 0xa0, 0x03, 0xa1, 0x1c, 0xa7, 0x00, 0xfb, 0x10, 0x96, 0xb2, 0xf3, 0x13, 0x3c, 0xf6,
-	0x91, 0xc6, 0x63, 0x5c, 0x57, 0xed, 0x4d, 0xdf, 0x4d, 0x8d, 0xdf, 0xfe, 0xac, 0x0c, 0x15, 0xa6,
-	0xba, 0x4c, 0x57, 0x73, 0x74, 0x6d, 0xb4, 0x9c, 0x0b, 0x66, 0xa0, 0x49, 0xcc, 0x0f, 0x32, 0xe1,
-	0x8e, 0x49, 0x21, 0x29, 0x3e, 0xa2, 0xfd, 0x0b, 0xe1, 0x90, 0xd1, 0x20, 0x8c, 0x41, 0x98, 0xa9,
-	0x80, 0x5f, 0x0b, 0x06, 0x91, 0x65, 0x89, 0xc3, 0x2f, 0x67, 0x53, 0x1c, 0x7e, 0xd7, 0x85, 0x59,
-	0x3f, 0x38, 0x09, 0x27, 0xc1, 0x00, 0x19, 0xa2, 0xe6, 0xc8, 0x22, 0x86, 0x4f, 0x90, 0x51, 0x99,
-	0x94, 0xe5, 0xe4, 0x9f, 0x02, 0xc8, 0x1a, 0xd4, 0xe3, 0xab, 0xa0, 0xaf, 0xd3, 0xfc, 0xa2, 0x58,
-	0x25, 0xb6, 0x06, 0xab, 0x47, 0x57, 0x41, 0x1f, 0x29, 0x3c, 0xad, 0x46, 0xbe, 0x0e, 0x35, 0xe5,
-	0xc0, 0xe4, 0xc2, 0xeb, 0x96, 0xfe, 0x89, 0xf4, 0x5a, 0x72, 0xbb, 0x50, 0x55, 0xed, 0x7d, 0x0a,
-	0x2d, 0x03, 0xa5, 0x1b, 0x73, 0x2d, 0x6e, 0xcc, 0x3d, 0xd0, 0x8d, 0xb9, 0x54, 0x26, 0x8a, 0xcf,
-	0x74, 0xe3, 0xee, 0xb7, 0xa1, 0x26, 0x87, 0xc6, 0x58, 0xe3, 0xc5, 0xfe, 0xa7, 0xfb, 0x07, 0x2f,
-	0xf7, 0xdd, 0xa3, 0xef, 0xee, 0x6f, 0x76, 0x6e, 0x90, 0x39, 0x68, 0xac, 0x6f, 0x22, 0xb7, 0x21,
-	0xc0, 0x62, 0x55, 0x0e, 0xd7, 0x8f, 0x8e, 0x14, 0xa4, 0x64, 0x13, 0xe8, 0x30, 0xc9, 0xcc, 0x46,
-	0xac, 0x42, 0x14, 0x1f, 0xc1, 0xbc, 0x06, 0x4b, 0xed, 0x9d, 0x31, 0x03, 0x64, 0xec, 0x1d, 0x54,
-	0x6e, 0x39, 0xc6, 0x5e, 0x86, 0x9b, 0xac, 0xb8, 0x7d, 0x41, 0x83, 0xe4, 0x68, 0x72, 0xc2, 0x23,
-	0x53, 0x7e, 0x18, 0xd8, 0x7f, 0xdd, 0x82, 0xba, 0xc2, 0x5c, 0x43, 0x4f, 0x32, 0x98, 0x56, 0xc2,
-	0x0d, 0xe8, 0x69, 0x5d, 0xe0, 0x97, 0xab, 0xf8, 0xaf, 0x61, 0x23, 0xd5, 0x15, 0x88, 0x4d, 0xf6,
-	0x70, 0x7b, 0xdb, 0x71, 0x0f, 0xf6, 0xf7, 0x76, 0xf7, 0x99, 0x64, 0x61, 0x93, 0x45, 0xc0, 0xd3,
-	0xa7, 0x08, 0xb1, 0xec, 0x0e, 0xb4, 0x9f, 0xd1, 0x64, 0x37, 0x38, 0x0d, 0xe5, 0x54, 0xff, 0x5f,
-	0x15, 0xe6, 0x14, 0x28, 0xb5, 0xb1, 0x2e, 0x68, 0x14, 0xfb, 0x61, 0x80, 0xda, 0x51, 0xdd, 0x91,
-	0x45, 0x26, 0x76, 0xfd, 0x01, 0x0d, 0x12, 0x3f, 0xb9, 0x72, 0x0d, 0xa7, 0x4c, 0x16, 0xcc, 0xec,
-	0x19, 0x6f, 0xe8, 0x7b, 0x32, 0xc8, 0xc7, 0x0b, 0x0c, 0xda, 0x0f, 0x87, 0x61, 0x84, 0x6a, 0x50,
-	0xdd, 0xe1, 0x05, 0xb2, 0x06, 0x8b, 0x4c, 0xfd, 0xd2, 0x5d, 0x66, 0xc8, 0xac, 0xdc, 0x43, 0x54,
-	0x88, 0x63, 0x62, 0x9d, 0xc1, 0xc5, 0xd9, 0xad, 0x3e, 0xe1, 0xda, 0x7e, 0x11, 0x8a, 0x7c, 0x0d,
-	0x6e, 0x32, 0xb0, 0x3a, 0xef, 0xd5, 0x37, 0x73, 0xf8, 0x4d, 0x31, 0x92, 0x71, 0x0d, 0xef, 0x9f,
-	0xed, 0x7c, 0x95, 0x2b, 0x76, 0x0a, 0x90, 0x8b, 0xc8, 0xcd, 0xf0, 0xa3, 0x2a, 0x1b, 0x91, 0xd3,
-	0xa2, 0x7a, 0xb5, 0x5c, 0x54, 0xef, 0x6b, 0x70, 0xf3, 0x84, 0xc6, 0x89, 0x7b, 0x4e, 0xbd, 0x01,
-	0x8d, 0x90, 0x1b, 0x79, 0xf0, 0x8e, 0xeb, 0xb1, 0xc5, 0x48, 0x3c, 0x00, 0xaf, 0x82, 0x3e, 0x1d,
-	0xb8, 0x49, 0xe8, 0xe2, 0x41, 0x8d, 0x3c, 0x5d, 0x73, 0xb2, 0x60, 0xb3, 0xe6, 0x59, 0xe4, 0x8d,
-	0xcf, 0x85, 0xa2, 0x99, 0x05, 0x33, 0x15, 0x21, 0xa1, 0x71, 0x12, 0x50, 0x1e, 0x3a, 0xa9, 0xa1,
-	0x5b, 0x5c, 0x82, 0xc8, 0x03, 0x98, 0xc1, 0x06, 0xe3, 0x6e, 0x07, 0x19, 0xa0, 0x99, 0x0a, 0x51,
-	0x3f, 0x70, 0x04, 0x8e, 0x99, 0x95, 0x93, 0xc8, 0x8f, 0xbb, 0x4d, 0x8c, 0x1a, 0xe2, 0xdf, 0xe4,
-	0x9b, 0x9a, 0x9c, 0x58, 0xc0, 0x6f, 0x1f, 0x88, 0x6f, 0x33, 0x94, 0xf7, 0x6b, 0x11, 0x19, 0xdf,
-	0xaa, 0xd4, 0x1a, 0x9d, 0xa6, 0xfd, 0x1b, 0x50, 0xc5, 0x91, 0x23, 0x4d, 0xe2, 0xfa, 0x59, 0x82,
-	0x26, 0x11, 0xda, 0x85, 0xd9, 0x80, 0x26, 0x97, 0x61, 0xf4, 0x4a, 0x86, 0xa9, 0x45, 0xd1, 0xfe,
-	0x31, 0xda, 0xde, 0x2a, 0x6c, 0xfb, 0x02, 0x8d, 0x06, 0x72, 0x1b, 0xea, 0x7c, 0x4f, 0xe3, 0x73,
-	0x4f, 0xb8, 0x03, 0x6a, 0x08, 0x38, 0x3a, 0xf7, 0xd8, 0xf9, 0x68, 0x90, 0x09, 0xf7, 0xb0, 0x34,
-	0x10, 0xb6, 0xc3, 0xa9, 0xe4, 0x01, 0xb4, 0x65, 0x40, 0x38, 0x76, 0x87, 0xf4, 0x34, 0x91, 0xfe,
-	0xd1, 0x60, 0x32, 0x42, 0x37, 0xcc, 0x1e, 0x3d, 0x4d, 0xec, 0x7d, 0x98, 0x17, 0x67, 0xd6, 0xc1,
-	0x98, 0xca, 0xae, 0x7f, 0xb3, 0x48, 0xff, 0x6b, 0xac, 0x2d, 0x98, 0x87, 0x1c, 0x0f, 0x81, 0x9b,
-	0x35, 0x6d, 0x07, 0x88, 0x7e, 0x06, 0x8a, 0x06, 0x85, 0x02, 0x26, 0x3d, 0xc0, 0x62, 0x3a, 0x06,
-	0x8c, 0xad, 0x4f, 0x3c, 0xe9, 0xf7, 0x65, 0x18, 0xbf, 0xe6, 0xc8, 0xa2, 0xfd, 0x9f, 0x2d, 0x58,
-	0xc0, 0xd6, 0xa4, 0x06, 0x2b, 0xf4, 0x8c, 0x8f, 0x3f, 0xc7, 0x30, 0xa5, 0xff, 0x9d, 0x7b, 0x9d,
-	0x17, 0xa1, 0xaa, 0x6b, 0x1e, 0xbc, 0xf0, 0xf9, 0xbd, 0x6d, 0x95, 0x9c, 0xb7, 0x6d, 0x05, 0x3a,
-	0x03, 0x3a, 0xf4, 0x31, 0x95, 0x43, 0x9e, 0xe3, 0x5c, 0x5d, 0xcd, 0xc1, 0xed, 0xbf, 0x6b, 0xc1,
-	0x3c, 0x57, 0x14, 0xd0, 0xe6, 0x12, 0x4b, 0xf5, 0x97, 0xa4, 0x7d, 0x22, 0x04, 0x94, 0x98, 0x54,
-	0x7a, 0x74, 0x22, 0x94, 0x57, 0xde, 0xb9, 0xe1, 0x98, 0x95, 0xc9, 0x13, 0xd4, 0xba, 0x03, 0x17,
-	0xa1, 0x05, 0xc9, 0x21, 0xe6, 0xbe, 0xec, 0xdc, 0x70, 0xb4, 0xea, 0x1b, 0x35, 0x66, 0x32, 0x31,
-	0xb8, 0xfd, 0x0c, 0x5a, 0x46, 0x47, 0x86, 0x57, 0xb0, 0xc9, 0xbd, 0x82, 0x39, 0xf7, 0x7b, 0xa9,
-	0xc0, 0xfd, 0xfe, 0xfb, 0x15, 0x20, 0x8c, 0xb0, 0x32, 0x3b, 0x77, 0xdf, 0x8c, 0x61, 0xc9, 0x3c,
-	0x91, 0x14, 0x44, 0xd6, 0x80, 0x68, 0x45, 0x19, 0x5b, 0x2b, 0xab, 0xd8, 0x5a, 0x01, 0x96, 0x49,
-	0x7d, 0xa1, 0x55, 0xaa, 0xb8, 0x15, 0x7a, 0x7c, 0xf8, 0x36, 0x15, 0xe2, 0x98, 0xe6, 0x83, 0x41,
-	0x2c, 0x66, 0x9b, 0x0a, 0x2f, 0x89, 0x2c, 0x67, 0xe9, 0x61, 0xe6, 0x8d, 0xf4, 0x30, 0x9b, 0xa3,
-	0x07, 0xcd, 0x4e, 0xaf, 0x99, 0x76, 0xfa, 0x03, 0x68, 0xc9, 0x58, 0x15, 0x0f, 0xd3, 0x0b, 0xa7,
-	0x88, 0x01, 0x64, 0xf4, 0x24, 0x4d, 0x65, 0xe5, 0x0c, 0xe0, 0x41, 0xe8, 0x1c, 0x9c, 0x1d, 0x2c,
-	0xa9, 0x3f, 0xb6, 0x81, 0x83, 0x4d, 0x01, 0x68, 0x59, 0x33, 0x2a, 0x71, 0x27, 0x81, 0xc8, 0x11,
-	0xa1, 0x03, 0x74, 0x87, 0x30, 0xcb, 0x3a, 0x8b, 0xc8, 0x5b, 0xc9, 0xad, 0x02, 0x2b, 0x99, 0x7c,
-	0x94, 0x06, 0x76, 0xe2, 0x73, 0x7f, 0x84, 0x67, 0x7b, 0x9a, 0x62, 0xf1, 0x94, 0xa3, 0x8e, 0xce,
-	0xfd, 0x91, 0x63, 0xd4, 0xb3, 0x7f, 0x6e, 0x41, 0x87, 0x51, 0x85, 0x41, 0xf8, 0x9f, 0x00, 0xf2,
-	0xe8, 0x5b, 0xd2, 0xbd, 0x51, 0x97, 0x7c, 0x0c, 0x75, 0x2c, 0x87, 0x63, 0x1a, 0x08, 0xaa, 0xef,
-	0x9a, 0x54, 0x9f, 0x4a, 0xb7, 0x9d, 0x1b, 0x4e, 0x5a, 0x99, 0x9d, 0x65, 0xd9, 0xc0, 0x1a, 0x8f,
-	0x12, 0x67, 0xc1, 0x1a, 0x77, 0xec, 0x00, 0x7c, 0x4a, 0xaf, 0xf6, 0xc2, 0x3e, 0xba, 0x54, 0xee,
-	0x02, 0x30, 0x1a, 0x3c, 0xf5, 0x46, 0xbe, 0xf0, 0x08, 0x54, 0x9d, 0xfa, 0x2b, 0x7a, 0xf5, 0x14,
-	0x01, 0x4c, 0x8c, 0x33, 0x74, 0xca, 0x22, 0x55, 0xa7, 0xf6, 0x8a, 0x5e, 0xed, 0x22, 0x7b, 0xb8,
-	0xd0, 0xfa, 0x94, 0x5e, 0x6d, 0x51, 0xae, 0xd7, 0x85, 0x11, 0xb1, 0xa1, 0x15, 0x79, 0x97, 0x4c,
-	0x73, 0x33, 0x22, 0x62, 0x8d, 0xc8, 0xbb, 0xfc, 0x94, 0x5e, 0x6d, 0x60, 0x48, 0x6c, 0x05, 0x66,
-	0x19, 0x7e, 0x18, 0xf6, 0xc5, 0xc9, 0x24, 0x83, 0xfc, 0xe9, 0xa0, 0x9c, 0x99, 0x57, 0xf8, 0xb7,
-	0xfd, 0x1f, 0x2d, 0x68, 0xb1, 0x15, 0x40, 0xb1, 0xc7, 0x76, 0x42, 0xe6, 0x8a, 0x58, 0x69, 0xae,
-	0xc8, 0x9a, 0x90, 0x19, 0x5c, 0x86, 0x96, 0xa6, 0xcb, 0x50, 0x5c, 0x36, 0x2e, 0x40, 0x3f, 0x84,
-	0x3a, 0x67, 0x27, 0xc6, 0xbe, 0x65, 0x63, 0xa7, 0x8c, 0x09, 0x39, 0x35, 0xac, 0xf6, 0x29, 0x0f,
-	0x4b, 0x6b, 0x3e, 0x1d, 0xbe, 0xc8, 0x75, 0x0e, 0x61, 0xe8, 0x82, 0x08, 0x67, 0xb5, 0x28, 0xc2,
-	0xf9, 0x02, 0x1a, 0x1a, 0x61, 0x91, 0x6f, 0xf0, 0xd8, 0x30, 0x1f, 0x3c, 0xa7, 0x42, 0x93, 0x70,
-	0x8c, 0xd9, 0xa3, 0xc0, 0xd4, 0x01, 0x1b, 0x33, 0x50, 0x41, 0x92, 0x7c, 0x02, 0xf3, 0x5a, 0xb3,
-	0xdc, 0x42, 0x2c, 0x1a, 0x93, 0x55, 0x34, 0xa6, 0x3f, 0xb0, 0x60, 0x51, 0x7c, 0x8d, 0x79, 0x45,
-	0x3e, 0x3b, 0xc6, 0x9f, 0xc7, 0x67, 0xec, 0x20, 0x65, 0xad, 0xbb, 0x11, 0x3d, 0xf3, 0xe3, 0x84,
-	0x4a, 0x47, 0x7a, 0x01, 0x87, 0x30, 0x92, 0x66, 0x55, 0x1d, 0x51, 0x93, 0x3c, 0x81, 0x06, 0x7e,
-	0xca, 0x6d, 0x58, 0xb1, 0x2d, 0xdd, 0xfc, 0x87, 0x7c, 0xa8, 0x4c, 0x92, 0xc7, 0xaa, 0xb4, 0x51,
-	0x87, 0xd9, 0x24, 0xf2, 0xcf, 0xce, 0x68, 0x64, 0x2f, 0xa9, 0xa1, 0x31, 0x6e, 0xa3, 0x47, 0x09,
-	0x1d, 0x33, 0xe5, 0x88, 0x51, 0x46, 0x43, 0x30, 0xd5, 0x2f, 0xec, 0x3c, 0xef, 0x69, 0x19, 0x72,
-	0xdc, 0x5a, 0x4d, 0x13, 0xe2, 0x1e, 0xc2, 0xdc, 0x88, 0x29, 0x4a, 0x4c, 0x83, 0x37, 0x1c, 0xe7,
-	0x59, 0x30, 0x53, 0xbc, 0x51, 0x6f, 0x89, 0xdd, 0xc4, 0x1f, 0xba, 0x12, 0x2b, 0x72, 0xd1, 0x8a,
-	0x50, 0xec, 0xf8, 0x8e, 0x13, 0xef, 0x8c, 0x0a, 0xed, 0x98, 0x17, 0xec, 0x2e, 0x2c, 0x1d, 0xa6,
-	0xdb, 0xa2, 0x39, 0x24, 0xec, 0x7f, 0xde, 0x82, 0xe5, 0x1c, 0x4a, 0x65, 0xce, 0x0a, 0x6f, 0xf0,
-	0xd0, 0x1f, 0x9d, 0x84, 0xca, 0x9b, 0x63, 0xe9, 0x8e, 0x62, 0x03, 0x45, 0xce, 0xe0, 0xa6, 0xa4,
-	0x0a, 0x26, 0x42, 0x52, 0xb5, 0xbf, 0x84, 0x9a, 0xe8, 0x87, 0xa6, 0xc4, 0xca, 0x76, 0x28, 0xe1,
-	0xfa, 0xa9, 0x58, 0xdc, 0x1e, 0x39, 0x87, 0xae, 0x22, 0x3f, 0xa1, 0x29, 0x69, 0x96, 0x0c, 0xeb,
-	0xeb, 0x83, 0x37, 0xf4, 0x65, 0xf8, 0x2f, 0x9c, 0xa9, 0xad, 0x91, 0x2b, 0xb8, 0x27, 0x71, 0xa8,
-	0x0a, 0xe5, 0xfb, 0xab, 0xbc, 0xd5, 0xdc, 0xd0, 0x33, 0x63, 0x76, 0xfa, 0x86, 0x86, 0xc9, 0x0f,
-	0x61, 0xe9, 0xd2, 0xf3, 0x13, 0x39, 0x2c, 0xcd, 0x8a, 0xaa, 0x62, 0x97, 0x6b, 0x6f, 0xe8, 0xf2,
-	0x25, 0xff, 0xd8, 0xd0, 0x0f, 0xa7, 0xb4, 0xd8, 0xfb, 0x79, 0x09, 0xda, 0x66, 0x3b, 0x8c, 0x4c,
-	0x85, 0x54, 0x92, 0x0a, 0x85, 0xb4, 0x3f, 0x33, 0xe0, 0xbc, 0x53, 0xb4, 0x54, 0xe4, 0x14, 0xd5,
-	0xdd, 0x90, 0xe5, 0x37, 0x45, 0x5d, 0x2a, 0x6f, 0x17, 0x75, 0xa9, 0x16, 0x46, 0x5d, 0xa6, 0x3b,
-	0xe7, 0x67, 0x7e, 0x51, 0xe7, 0xfc, 0xec, 0xb5, 0xce, 0xf9, 0xde, 0xff, 0xb5, 0x80, 0xe4, 0xa9,
-	0x97, 0x3c, 0xe3, 0x7e, 0xe0, 0x80, 0x0e, 0x85, 0x78, 0xfb, 0xca, 0xdb, 0x71, 0x80, 0xdc, 0x2d,
-	0xf9, 0x35, 0x63, 0x45, 0x3d, 0x7d, 0x55, 0xb7, 0x6d, 0x5a, 0x4e, 0x11, 0x2a, 0x13, 0x79, 0xaa,
-	0xbc, 0x39, 0xf2, 0x54, 0x7d, 0x73, 0xe4, 0x69, 0x26, 0x1b, 0x79, 0xea, 0xfd, 0x35, 0x0b, 0x16,
-	0x0a, 0xc8, 0xec, 0x57, 0x37, 0x71, 0x46, 0x18, 0x86, 0xf4, 0x29, 0x09, 0xc2, 0xd0, 0x81, 0xbd,
-	0xbf, 0x0c, 0x2d, 0x83, 0xb5, 0x7e, 0x75, 0xfd, 0x67, 0xcd, 0x33, 0x4e, 0xd9, 0x06, 0xac, 0xf7,
-	0xbf, 0x4a, 0x40, 0xf2, 0xec, 0xfd, 0x6b, 0x1d, 0x43, 0x7e, 0x9d, 0xca, 0x05, 0xeb, 0xf4, 0x17,
-	0x7a, 0xf2, 0x7c, 0x00, 0xf3, 0x22, 0x27, 0x5f, 0xf3, 0xfc, 0x73, 0x8a, 0xc9, 0x23, 0x98, 0x81,
-	0x6a, 0x86, 0xfd, 0x6a, 0x46, 0x0e, 0xb2, 0x76, 0xfc, 0x66, 0xa2, 0x7f, 0x76, 0x0f, 0xba, 0x62,
-	0x85, 0xf2, 0xae, 0xbf, 0x7f, 0x59, 0x56, 0x36, 0x36, 0x22, 0x85, 0xfe, 0xfc, 0x35, 0x68, 0xea,
-	0xc7, 0x87, 0xd8, 0x8e, 0x4c, 0xf0, 0x87, 0xa9, 0x19, 0x7a, 0x2d, 0xb2, 0x05, 0x6d, 0x14, 0x92,
-	0x03, 0xf5, 0x1d, 0xd7, 0x34, 0xae, 0x71, 0x68, 0xef, 0xdc, 0x70, 0x32, 0xdf, 0x90, 0xdf, 0x82,
-	0xb6, 0xe9, 0xe6, 0x12, 0x3a, 0x61, 0x91, 0x1a, 0xc9, 0x3e, 0x37, 0x2b, 0x93, 0x75, 0xe8, 0x64,
-	0xfd, 0x64, 0x22, 0x41, 0x72, 0x4a, 0x03, 0xb9, 0xea, 0xe4, 0x63, 0xe1, 0xe7, 0xac, 0xa2, 0x9f,
-	0xf3, 0x81, 0xf9, 0x99, 0xb6, 0x4c, 0xab, 0xfc, 0x3f, 0xcd, 0xe3, 0xf9, 0xbb, 0x00, 0x29, 0x8c,
-	0x74, 0xa0, 0x79, 0x70, 0xb8, 0xbd, 0xef, 0x6e, 0xee, 0xac, 0xef, 0xef, 0x6f, 0xef, 0x75, 0x6e,
-	0x10, 0x02, 0x6d, 0x8c, 0x8b, 0x6c, 0x29, 0x98, 0xc5, 0x60, 0xc2, 0x0b, 0x2c, 0x61, 0x25, 0xb2,
-	0x08, 0x9d, 0xdd, 0xfd, 0x0c, 0xb4, 0xcc, 0x34, 0x31, 0x31, 0x44, 0xa6, 0x89, 0xf1, 0x3b, 0x17,
-	0x1b, 0x9c, 0x3c, 0xa4, 0x76, 0xf2, 0x0f, 0x2c, 0xb8, 0x99, 0x41, 0xa4, 0x59, 0xb4, 0x5c, 0x01,
-	0x31, 0xb5, 0x12, 0x13, 0x88, 0x31, 0x5d, 0x69, 0xb8, 0x65, 0x24, 0x48, 0x1e, 0xc1, 0x68, 0x5e,
-	0x33, 0xf4, 0x32, 0x9c, 0x54, 0x84, 0xb2, 0x97, 0x55, 0xb2, 0x62, 0x66, 0xe0, 0xa7, 0xfc, 0x2e,
-	0x87, 0x8e, 0x48, 0xfd, 0xbd, 0xe6, 0x90, 0x65, 0x91, 0xd9, 0xe8, 0x86, 0xb2, 0x63, 0x8e, 0xb7,
-	0x10, 0x67, 0xff, 0xb3, 0x19, 0x20, 0xdf, 0x9e, 0xd0, 0xe8, 0x0a, 0xd3, 0x64, 0x55, 0x98, 0x69,
-	0x39, 0xeb, 0xf4, 0x9e, 0x19, 0x4f, 0x4e, 0x98, 0x29, 0x21, 0x4c, 0x9c, 0xd2, 0x5b, 0xa5, 0xc3,
-	0x17, 0xa5, 0xa3, 0x57, 0xde, 0x9c, 0x8e, 0x5e, 0x7d, 0x53, 0x3a, 0xfa, 0x17, 0xa0, 0xe5, 0x9f,
-	0x05, 0x21, 0x13, 0x07, 0x4c, 0x85, 0x88, 0xbb, 0x33, 0xf7, 0xcb, 0x0f, 0x9b, 0x4e, 0x53, 0x00,
-	0xf7, 0x19, 0x8c, 0x3c, 0x49, 0x2b, 0xd1, 0xc1, 0x19, 0x5e, 0x9f, 0xd0, 0x05, 0xc4, 0xf6, 0xe0,
-	0x8c, 0x0a, 0x8b, 0x0e, 0x9d, 0x1e, 0xf2, 0x63, 0x06, 0x8f, 0xc9, 0x03, 0x68, 0xc7, 0xe1, 0x84,
-	0x29, 0x55, 0x72, 0x19, 0xb8, 0x2b, 0xb8, 0xc9, 0xa1, 0x87, 0x7c, 0x31, 0x56, 0x61, 0x61, 0x12,
-	0x53, 0x77, 0xe4, 0xc7, 0x31, 0x3b, 0x38, 0xfb, 0x61, 0x90, 0x44, 0xe1, 0x50, 0xb8, 0x76, 0xe7,
-	0x27, 0x31, 0x7d, 0xce, 0x31, 0x9b, 0x1c, 0x41, 0xbe, 0x96, 0x0e, 0x69, 0xec, 0xf9, 0x51, 0xdc,
-	0x05, 0x1c, 0x92, 0x9c, 0x29, 0x1b, 0xf7, 0xa1, 0xe7, 0x47, 0x6a, 0x2c, 0xac, 0x10, 0x67, 0xd2,
-	0xe4, 0x1b, 0xd9, 0x34, 0xf9, 0x1f, 0x14, 0xa7, 0xc9, 0xb7, 0xb0, 0xe9, 0xc7, 0xa2, 0xe9, 0xfc,
-	0x16, 0x7f, 0xae, 0x6c, 0xf9, 0x7c, 0xf6, 0x7f, 0xfb, 0xf3, 0x64, 0xff, 0xcf, 0x15, 0x65, 0xff,
-	0x7f, 0x08, 0x0d, 0xcc, 0xc9, 0x76, 0xcf, 0xfd, 0x20, 0x91, 0x6e, 0xea, 0x8e, 0x9e, 0xb4, 0xbd,
-	0xc3, 0x0c, 0x63, 0x88, 0xe4, 0x9f, 0x71, 0x3e, 0x11, 0x7f, 0xfe, 0xd7, 0x98, 0x88, 0x2f, 0x72,
-	0xc7, 0x57, 0xa1, 0x26, 0xf7, 0x89, 0x10, 0xa8, 0x9c, 0x46, 0xe1, 0x48, 0x7a, 0xee, 0xd8, 0xdf,
-	0xa4, 0x0d, 0xa5, 0x24, 0x14, 0x1f, 0x97, 0x92, 0xd0, 0xfe, 0x3d, 0x68, 0x68, 0xa4, 0x46, 0xde,
-	0xe5, 0x0e, 0x01, 0xa6, 0xd4, 0x0a, 0x8b, 0x97, 0xaf, 0x62, 0x5d, 0x40, 0x77, 0x07, 0xe4, 0xcb,
-	0x30, 0x3f, 0xf0, 0x23, 0x8a, 0x57, 0x66, 0xdc, 0x88, 0x5e, 0xd0, 0x28, 0x96, 0xce, 0xd4, 0x8e,
-	0x42, 0x38, 0x1c, 0x6e, 0xbb, 0xb0, 0x60, 0xec, 0xad, 0x92, 0x6e, 0x33, 0xb8, 0x6e, 0x32, 0xfe,
-	0x65, 0x26, 0xc3, 0x0b, 0x1c, 0xd3, 0x0b, 0x84, 0x1f, 0xd8, 0x1d, 0x47, 0xe1, 0x09, 0x76, 0x62,
-	0x39, 0x06, 0xcc, 0xfe, 0x9f, 0x65, 0x28, 0xef, 0x84, 0x63, 0x3d, 0x23, 0xc1, 0xca, 0x67, 0x24,
-	0x08, 0x05, 0xde, 0x55, 0xfa, 0xb9, 0xd0, 0xb2, 0x0c, 0x20, 0x59, 0x81, 0x36, 0x13, 0x15, 0x49,
-	0xc8, 0x0c, 0x96, 0x4b, 0x2f, 0xe2, 0xd9, 0xf1, 0x65, 0xe4, 0xbf, 0x0c, 0x86, 0x2c, 0x42, 0x59,
-	0xe9, 0x9d, 0x58, 0x81, 0x15, 0x99, 0xb5, 0x8c, 0xb9, 0x61, 0x57, 0x22, 0xba, 0x23, 0x4a, 0x4c,
-	0xf2, 0x9a, 0xdf, 0x73, 0x79, 0xc4, 0xb5, 0x87, 0x22, 0x14, 0x33, 0x26, 0x98, 0xc4, 0x19, 0xa5,
-	0xba, 0xb9, 0x2a, 0xeb, 0x21, 0xbf, 0x9a, 0x19, 0xf2, 0xbb, 0x0f, 0x8d, 0x64, 0x78, 0xe1, 0x8e,
-	0xbd, 0xab, 0x61, 0xe8, 0x0d, 0x04, 0xa7, 0xeb, 0x20, 0xf2, 0x18, 0x60, 0x34, 0x1e, 0x0b, 0x36,
-	0x44, 0x7f, 0x62, 0x4a, 0xd5, 0xcf, 0x0f, 0x0f, 0x39, 0xf5, 0x39, 0x5a, 0x1d, 0xb2, 0x0d, 0xed,
-	0xc2, 0x2b, 0x2e, 0x77, 0x65, 0x06, 0x53, 0x38, 0x5e, 0x2d, 0x60, 0xd4, 0xcc, 0x47, 0xbd, 0x6f,
-	0x02, 0xf9, 0x25, 0x6f, 0x9a, 0xbc, 0x84, 0xba, 0x1a, 0xa1, 0x7e, 0xbf, 0x03, 0xd3, 0x14, 0x1b,
-	0xe6, 0xfd, 0x0e, 0xcc, 0x4a, 0x7c, 0x0f, 0xda, 0xfc, 0xb8, 0x54, 0x07, 0x00, 0x4f, 0x2d, 0xcb,
-	0x40, 0xed, 0x3f, 0xb7, 0xa0, 0x8a, 0x94, 0xc7, 0xf4, 0x47, 0x8e, 0x53, 0xa9, 0x1c, 0x22, 0x2a,
-	0x94, 0x05, 0x13, 0xdb, 0xb8, 0xfa, 0x56, 0x52, 0x64, 0xa0, 0x5f, 0x7f, 0xbb, 0x0f, 0x75, 0xd5,
-	0x93, 0x46, 0x4a, 0x29, 0x90, 0xdc, 0x83, 0xca, 0x79, 0x38, 0x96, 0x26, 0x36, 0xa4, 0x2b, 0xea,
-	0x20, 0x3c, 0x1d, 0x0f, 0x6b, 0x8f, 0x4f, 0x81, 0x9b, 0x31, 0x59, 0x70, 0xc1, 0x5c, 0x67, 0x0a,
-	0xe7, 0xfa, 0x02, 0xe6, 0x98, 0x7c, 0xd0, 0xa2, 0xb6, 0xd3, 0x0f, 0xd3, 0x2f, 0x31, 0xdd, 0xac,
-	0x3f, 0x9c, 0x0c, 0xa8, 0xee, 0xe8, 0xc0, 0x68, 0x9f, 0x80, 0x4b, 0x15, 0xdf, 0xfe, 0x17, 0x16,
-	0x97, 0x3b, 0xac, 0x5d, 0xf2, 0x10, 0x2a, 0xec, 0xdc, 0xcb, 0x78, 0xe3, 0x54, 0xea, 0x28, 0xab,
-	0xe7, 0x60, 0x0d, 0xb6, 0x8b, 0x18, 0xa8, 0xd2, 0x5b, 0xe7, 0x61, 0xaa, 0xd4, 0x4b, 0xa0, 0x66,
-	0x96, 0x31, 0xae, 0x33, 0x50, 0xb2, 0xaa, 0x65, 0x66, 0x54, 0x8c, 0xb3, 0x54, 0xaa, 0x82, 0x83,
-	0x33, 0xaa, 0x65, 0x64, 0xfc, 0xab, 0x12, 0xb4, 0x8c, 0x31, 0x31, 0xee, 0xc1, 0xa3, 0x81, 0xfb,
-	0x7a, 0xc5, 0xce, 0xeb, 0x20, 0x9d, 0xf3, 0x4a, 0x26, 0xe7, 0xa9, 0x10, 0x75, 0x59, 0x0f, 0x51,
-	0x3f, 0x86, 0x7a, 0x7a, 0xf7, 0xd1, 0x1c, 0x14, 0xeb, 0x51, 0x26, 0xd1, 0xa6, 0x95, 0xd2, 0xa0,
-	0x76, 0x55, 0x0f, 0x6a, 0x7f, 0x43, 0x0b, 0x7a, 0xce, 0x60, 0x33, 0x76, 0xd1, 0xaa, 0xfe, 0x7a,
-	0xb2, 0x24, 0x9e, 0x40, 0x43, 0x1b, 0xbc, 0x1e, 0xdc, 0xb4, 0x8c, 0xe0, 0xa6, 0x4a, 0x77, 0x2f,
-	0xa5, 0xe9, 0xee, 0xf6, 0x4f, 0x4b, 0xd0, 0x62, 0xbc, 0xe6, 0x07, 0x67, 0x87, 0xe1, 0xd0, 0xef,
-	0x5f, 0x21, 0x8d, 0x4b, 0xb6, 0x12, 0x4a, 0x98, 0xe4, 0x39, 0x13, 0xcc, 0x64, 0xa2, 0xba, 0xe3,
-	0xc3, 0x05, 0xb8, 0x2a, 0x33, 0x09, 0xcf, 0xe4, 0xe3, 0x89, 0x17, 0x53, 0xed, 0x66, 0xa6, 0x63,
-	0x02, 0x99, 0x1c, 0x66, 0x00, 0xbc, 0xbc, 0x30, 0xf2, 0x87, 0x43, 0x9f, 0xd7, 0xe5, 0xde, 0x83,
-	0x22, 0x14, 0xeb, 0x73, 0xe0, 0xc7, 0xde, 0x49, 0x9a, 0x4a, 0xa4, 0xca, 0x18, 0xc7, 0xf1, 0x5e,
-	0x6b, 0x71, 0x1c, 0x7e, 0xdb, 0xc9, 0x04, 0x66, 0xa9, 0x6a, 0x36, 0x47, 0x55, 0xf6, 0xbf, 0x2b,
-	0x41, 0x43, 0xa3, 0x51, 0x26, 0x5b, 0x0a, 0x0f, 0x61, 0x0d, 0x2a, 0x72, 0xec, 0x02, 0xc3, 0x1f,
-	0xa5, 0x41, 0xc8, 0x03, 0xb3, 0x57, 0x8c, 0xff, 0xa2, 0xf4, 0x31, 0xe8, 0xf9, 0x0e, 0xd4, 0x19,
-	0x1f, 0x7e, 0x88, 0xce, 0x2f, 0x71, 0x0b, 0x5a, 0x01, 0x24, 0x76, 0x0d, 0xb1, 0xd5, 0x14, 0x8b,
-	0x80, 0x6b, 0xb3, 0xee, 0x3e, 0x86, 0xa6, 0x68, 0x06, 0xf7, 0x18, 0x27, 0x9d, 0x4a, 0x02, 0x63,
-	0xff, 0x1d, 0xa3, 0xa6, 0xfc, 0x72, 0x4d, 0x7e, 0x59, 0x7b, 0xd3, 0x97, 0xb2, 0xa6, 0xfd, 0x4c,
-	0x25, 0x34, 0x3e, 0x8b, 0xbc, 0xf1, 0xb9, 0x94, 0x6e, 0x8f, 0x61, 0x41, 0x0a, 0xb1, 0x49, 0xe0,
-	0x05, 0x41, 0x38, 0x09, 0xfa, 0x54, 0x66, 0xc6, 0x17, 0xa1, 0xec, 0x81, 0xba, 0x47, 0x85, 0x0d,
-	0x91, 0x15, 0xa8, 0x72, 0x35, 0x9e, 0xeb, 0x2a, 0xc5, 0xf2, 0x8c, 0x57, 0x21, 0x0f, 0xa1, 0xca,
-	0xb5, 0xf9, 0xd2, 0x54, 0x09, 0xc4, 0x2b, 0xd8, 0xab, 0x30, 0x87, 0x1a, 0xa9, 0x26, 0x88, 0x6f,
-	0x17, 0xe9, 0x30, 0x33, 0x7d, 0x1e, 0x68, 0x58, 0x04, 0xb2, 0xcf, 0xf9, 0x4a, 0xcf, 0xb8, 0xf9,
-	0xf3, 0x32, 0x34, 0x34, 0x30, 0x13, 0x96, 0x98, 0x7e, 0xe1, 0x0e, 0x7c, 0x6f, 0x44, 0x65, 0xd8,
-	0xa1, 0xe5, 0x64, 0xa0, 0xac, 0x9e, 0x77, 0x71, 0xe6, 0x86, 0x93, 0xc4, 0x1d, 0xd0, 0xb3, 0x88,
-	0x52, 0xa1, 0x5c, 0x65, 0xa0, 0xac, 0x1e, 0xa3, 0x66, 0xad, 0x1e, 0xcf, 0x24, 0xc8, 0x40, 0x65,
-	0x66, 0x0b, 0x5f, 0xa7, 0x4a, 0x9a, 0xd9, 0xc2, 0x57, 0x25, 0x2b, 0xe6, 0xab, 0x05, 0x62, 0xfe,
-	0x23, 0x58, 0xe2, 0x02, 0x5d, 0x48, 0x0f, 0x37, 0x43, 0x5c, 0x53, 0xb0, 0x64, 0x05, 0x3a, 0x6c,
-	0xcc, 0x92, 0x35, 0x62, 0xff, 0xc7, 0x9c, 0xc7, 0x2c, 0x27, 0x07, 0x67, 0x75, 0x31, 0x2a, 0xaa,
-	0xd7, 0xe5, 0x99, 0x9e, 0x39, 0x38, 0xd6, 0xf5, 0x5e, 0x9b, 0x75, 0xeb, 0xa2, 0x6e, 0x06, 0x4e,
-	0x3e, 0x86, 0xe5, 0x11, 0x1d, 0xf8, 0x9e, 0xd9, 0x84, 0x9b, 0x6a, 0x1c, 0xd3, 0xd0, 0xac, 0x17,
-	0xb6, 0x0a, 0x3f, 0x0e, 0x47, 0x27, 0x3e, 0x3f, 0x65, 0x79, 0xfc, 0xb6, 0xe2, 0xe4, 0xe0, 0x76,
-	0x0b, 0x1a, 0x47, 0x49, 0x38, 0x96, 0x5b, 0xdf, 0x86, 0x26, 0x2f, 0x8a, 0xbb, 0x10, 0xb7, 0xe1,
-	0x16, 0xd2, 0xeb, 0x71, 0x38, 0x0e, 0x87, 0xe1, 0xd9, 0x95, 0xe1, 0x38, 0xfa, 0x0f, 0x16, 0x2c,
-	0x18, 0xd8, 0xd4, 0x73, 0x84, 0x5e, 0x6e, 0x99, 0xc0, 0xce, 0x49, 0x7c, 0x5e, 0x3b, 0xa3, 0x78,
-	0x45, 0x1e, 0xa1, 0x7f, 0x21, 0x72, 0xda, 0xd7, 0xd3, 0x5b, 0x99, 0xf2, 0x43, 0x4e, 0xef, 0xdd,
-	0x3c, 0xbd, 0x8b, 0xef, 0xe5, 0x7d, 0x4d, 0xd9, 0xc4, 0x6f, 0x89, 0xbc, 0xdc, 0x81, 0x98, 0x74,
-	0xd9, 0xcc, 0xa5, 0xd4, 0x1d, 0x8d, 0x72, 0x04, 0x7d, 0x05, 0x8c, 0xed, 0x9f, 0x59, 0x00, 0xe9,
-	0xe8, 0x30, 0x9b, 0x53, 0x9d, 0xb3, 0xfc, 0xe1, 0x13, 0xed, 0x4c, 0x7d, 0x17, 0x9a, 0x2a, 0xa3,
-	0x2c, 0x3d, 0xba, 0x1b, 0x12, 0xc6, 0x54, 0x9d, 0xf7, 0x61, 0xee, 0x6c, 0x18, 0x9e, 0xa0, 0x4a,
-	0x25, 0xce, 0x59, 0x7e, 0x23, 0xa4, 0xcd, 0xc1, 0xf2, 0xf4, 0x4c, 0xcf, 0xf9, 0x4a, 0x61, 0x2a,
-	0x9a, 0x7e, 0x6a, 0xb3, 0xb3, 0x6e, 0x3e, 0xb7, 0x12, 0xd7, 0x72, 0xf9, 0x2f, 0x14, 0x90, 0xbd,
-	0x2e, 0xee, 0xf0, 0x04, 0xda, 0x11, 0x97, 0x99, 0x52, 0xa0, 0x56, 0xae, 0x11, 0xa8, 0xad, 0xc8,
-	0x38, 0x99, 0xbf, 0x04, 0x1d, 0x6f, 0x70, 0x41, 0xa3, 0xc4, 0x47, 0x3f, 0x2c, 0xea, 0x74, 0x7c,
-	0x82, 0x73, 0x1a, 0x1c, 0x55, 0xa7, 0xf7, 0x61, 0x4e, 0xdc, 0xcf, 0x51, 0x35, 0xc5, 0x13, 0x00,
-	0x29, 0x98, 0x55, 0xb4, 0xff, 0xb1, 0x4c, 0xe8, 0x31, 0x77, 0xf7, 0xfa, 0x55, 0xd1, 0x67, 0x58,
-	0xca, 0xcc, 0xf0, 0x0b, 0x22, 0x5d, 0x61, 0x20, 0x1d, 0xbe, 0x65, 0x2d, 0xc3, 0x7b, 0x20, 0x12,
-	0xa2, 0xcc, 0x65, 0xad, 0xbc, 0xcd, 0xb2, 0xda, 0xff, 0xc5, 0x82, 0xd9, 0x9d, 0x70, 0xcc, 0x4c,
-	0x7b, 0xd4, 0x71, 0x18, 0x9b, 0xa8, 0xcb, 0x71, 0xb2, 0xf8, 0x86, 0x4c, 0xf8, 0x42, 0xad, 0xa4,
-	0x95, 0xd5, 0x4a, 0xbe, 0x09, 0xb7, 0x31, 0xe4, 0x10, 0x85, 0xe3, 0x30, 0x62, 0xec, 0xea, 0x0d,
-	0xb9, 0x0a, 0x12, 0x06, 0xc9, 0xb9, 0x14, 0xa7, 0xd7, 0x55, 0x41, 0x3f, 0xe0, 0x30, 0xb9, 0x70,
-	0xb9, 0xb9, 0x29, 0xb4, 0x28, 0x2e, 0x65, 0xf3, 0x08, 0xfb, 0x37, 0xa1, 0xae, 0x1c, 0x18, 0xe4,
-	0x03, 0xa8, 0x9f, 0x87, 0x63, 0xe1, 0xe5, 0xb0, 0x8c, 0x5b, 0x03, 0x62, 0xf6, 0x4e, 0x5a, 0xc1,
-	0xfe, 0xdf, 0xb3, 0x30, 0xbb, 0x1b, 0x5c, 0x84, 0x7e, 0x1f, 0x13, 0x83, 0x46, 0x74, 0x14, 0xca,
-	0xeb, 0x82, 0xec, 0x6f, 0x7c, 0xc9, 0x23, 0xbd, 0xd0, 0xcf, 0x59, 0x48, 0x83, 0x30, 0x03, 0x39,
-	0xd2, 0x2f, 0xe4, 0x8b, 0x52, 0x6a, 0xf5, 0x55, 0xb5, 0x0b, 0x97, 0xac, 0x35, 0x7e, 0x51, 0x1c,
-	0xd7, 0x8e, 0x5f, 0xf3, 0xd0, 0x20, 0x6c, 0xf1, 0x45, 0x86, 0x3e, 0x4f, 0xe1, 0xe6, 0x39, 0x86,
-	0x02, 0x84, 0x46, 0x7f, 0x44, 0x79, 0xd0, 0x48, 0xa9, 0x5e, 0xcc, 0xe8, 0xd7, 0x81, 0x4c, 0x3d,
-	0xe3, 0x1f, 0xf0, 0x3a, 0xfc, 0x38, 0xd0, 0x41, 0x98, 0x27, 0x92, 0x79, 0xde, 0x82, 0x3f, 0x51,
-	0x92, 0x05, 0xf3, 0x14, 0x30, 0x25, 0x74, 0xf9, 0x3c, 0x81, 0x3f, 0x6a, 0x90, 0x85, 0x6b, 0xae,
-	0x02, 0x7e, 0x91, 0x49, 0xba, 0x0a, 0x18, 0xc9, 0x78, 0xc3, 0xe1, 0x89, 0xd7, 0x7f, 0xc5, 0x2d,
-	0xdb, 0x26, 0x8f, 0x35, 0x1a, 0x40, 0xcc, 0xb3, 0x4f, 0xf7, 0x15, 0x53, 0x74, 0x2a, 0x8e, 0x0e,
-	0x22, 0x6b, 0xa6, 0xff, 0xaa, 0x3d, 0xc5, 0x7f, 0xa5, 0x57, 0xd2, 0x53, 0x96, 0xe6, 0x72, 0x57,
-	0x8b, 0xbc, 0xc1, 0x40, 0xa4, 0xb2, 0x74, 0xf8, 0xa5, 0x7e, 0x05, 0x40, 0x47, 0x0d, 0x5f, 0x30,
-	0x5e, 0x61, 0x1e, 0x2b, 0x18, 0x30, 0x72, 0x8f, 0xfb, 0x61, 0xc7, 0x9e, 0x3f, 0xc0, 0x94, 0x51,
-	0x6e, 0x0b, 0x2b, 0x18, 0x6b, 0x43, 0xfe, 0x8d, 0x07, 0xe7, 0x02, 0xae, 0x8a, 0x01, 0x63, 0x6b,
-	0xa3, 0xca, 0xa3, 0xf4, 0x2e, 0x92, 0x09, 0x24, 0x1f, 0x62, 0x8a, 0x40, 0x42, 0xf1, 0xc2, 0x51,
-	0x7b, 0xed, 0xb6, 0x98, 0xb3, 0x20, 0x5b, 0xf9, 0x3f, 0xa6, 0x44, 0x38, 0xbc, 0x26, 0x53, 0xdb,
-	0x78, 0x94, 0x66, 0xc9, 0x50, 0xdb, 0x44, 0x55, 0x8c, 0xd2, 0xf0, 0x0a, 0xe4, 0x63, 0xcd, 0x12,
-	0xeb, 0x62, 0xe5, 0x3b, 0x99, 0xf6, 0xa7, 0xd8, 0x60, 0x6c, 0xcb, 0xfc, 0x18, 0xd3, 0x7b, 0x62,
-	0x1a, 0x0c, 0xf0, 0xee, 0x51, 0xcd, 0xd1, 0x41, 0xbf, 0x5a, 0x2b, 0x6d, 0x1d, 0x9a, 0xfa, 0x4c,
-	0x49, 0x0d, 0x2a, 0x07, 0x87, 0xdb, 0xfb, 0x9d, 0x1b, 0xa4, 0x01, 0xb3, 0x47, 0xdb, 0xc7, 0xc7,
-	0x7b, 0xdb, 0x5b, 0x1d, 0x8b, 0x34, 0xa1, 0xa6, 0xee, 0x79, 0x94, 0x58, 0x69, 0x7d, 0x73, 0x73,
-	0xfb, 0xf0, 0x78, 0x7b, 0xab, 0x53, 0xfe, 0x56, 0xa5, 0x56, 0xea, 0x94, 0x51, 0xc5, 0xd4, 0x16,
-	0xe2, 0x0d, 0x9e, 0xb6, 0x7b, 0x00, 0x68, 0xfa, 0xa4, 0x49, 0x4f, 0x15, 0x47, 0x83, 0x30, 0x51,
-	0xae, 0x3c, 0x14, 0x65, 0xfe, 0x14, 0x83, 0x2c, 0xe3, 0xf6, 0xe2, 0x9b, 0x07, 0x7a, 0xec, 0xae,
-	0xea, 0x98, 0x40, 0xb6, 0x8e, 0x02, 0x80, 0x97, 0x0f, 0xb8, 0xc0, 0xd0, 0x41, 0x8c, 0x94, 0x22,
-	0x1a, 0x87, 0xc3, 0x0b, 0xca, 0xab, 0x70, 0x05, 0xd2, 0x80, 0xb1, 0xbe, 0x84, 0x4c, 0xd4, 0x2e,
-	0x06, 0x55, 0x1d, 0x13, 0x48, 0xbe, 0x22, 0x49, 0xa9, 0x86, 0xa4, 0xb4, 0x9c, 0xa7, 0x0b, 0x83,
-	0x8c, 0x9e, 0xe7, 0x5c, 0x65, 0x75, 0x24, 0x91, 0x2f, 0xe6, 0xbf, 0x7b, 0x0b, 0x97, 0x19, 0x59,
-	0x05, 0x32, 0x1a, 0x8f, 0xdd, 0x02, 0x1f, 0x56, 0xc5, 0x29, 0xc0, 0xfc, 0x0a, 0x5c, 0x6c, 0x09,
-	0x90, 0xf5, 0xc1, 0x40, 0x0c, 0x53, 0x7f, 0x99, 0x22, 0xd2, 0x9f, 0x42, 0x91, 0x42, 0xbb, 0x40,
-	0x30, 0x96, 0x8a, 0x05, 0xe3, 0xb5, 0xe2, 0xc3, 0xde, 0x85, 0xc6, 0xa1, 0xf6, 0xb8, 0x8a, 0xcd,
-	0xce, 0x10, 0xf9, 0xac, 0x0a, 0x3f, 0x5d, 0xb8, 0x6b, 0x2d, 0x85, 0x6a, 0x43, 0x2a, 0xe9, 0x43,
-	0xb2, 0xff, 0xa1, 0xc5, 0xef, 0xab, 0xab, 0x29, 0xf0, 0xfe, 0x6d, 0x68, 0xaa, 0xf0, 0x52, 0x7a,
-	0x79, 0xcf, 0x80, 0xb1, 0x3a, 0x38, 0x1c, 0x37, 0x3c, 0x3d, 0x8d, 0xa9, 0xbc, 0x66, 0x63, 0xc0,
-	0xa4, 0xba, 0xce, 0x0c, 0x00, 0x9f, 0xf7, 0x10, 0x8b, 0xeb, 0x36, 0x39, 0x38, 0xa3, 0x74, 0xe1,
-	0x1d, 0x97, 0x17, 0x8c, 0x54, 0x59, 0xdd, 0x31, 0xcc, 0xae, 0xf4, 0x0a, 0xd4, 0x54, 0xbb, 0xe6,
-	0x59, 0x2c, 0x6b, 0x2a, 0x3c, 0x3b, 0xf3, 0xd1, 0x94, 0x37, 0x06, 0xcd, 0x19, 0x2e, 0x8f, 0x60,
-	0xb4, 0x74, 0xea, 0x47, 0xd9, 0xea, 0x9c, 0x03, 0x0b, 0x30, 0xf6, 0x4b, 0x58, 0x90, 0xe2, 0x43,
-	0xb3, 0x23, 0xcc, 0x8d, 0xb4, 0xde, 0x74, 0x0e, 0x94, 0xf2, 0xe7, 0x80, 0xfd, 0x6f, 0x2b, 0x30,
-	0x2b, 0x5f, 0x2e, 0xb2, 0x0b, 0x5e, 0xda, 0xa9, 0x9b, 0x8f, 0xf4, 0x90, 0xae, 0xf1, 0x14, 0x03,
-	0x12, 0x82, 0xd0, 0x0e, 0x1e, 0x66, 0xcf, 0xf7, 0xd4, 0xc5, 0x9a, 0x39, 0xe3, 0x97, 0xa0, 0x32,
-	0xf6, 0x92, 0x73, 0xf4, 0xc0, 0x71, 0x5a, 0xc2, 0xb2, 0x74, 0xe2, 0x57, 0x4d, 0x27, 0x7e, 0xd1,
-	0xd3, 0x44, 0x5c, 0x99, 0xcd, 0x3f, 0x4d, 0x74, 0x07, 0xea, 0x5c, 0x1f, 0x49, 0xfd, 0xf4, 0x29,
-	0x20, 0xa3, 0xbf, 0xd4, 0x72, 0xfa, 0xcb, 0xdb, 0x6b, 0x16, 0x5f, 0x83, 0x19, 0x7e, 0x3d, 0x57,
-	0x5c, 0xa7, 0x92, 0x87, 0x8e, 0x58, 0x49, 0xf9, 0x3f, 0xcf, 0xaa, 0x75, 0x44, 0x5d, 0xfd, 0x81,
-	0x8f, 0x86, 0xf9, 0xc0, 0x87, 0x1e, 0x5e, 0x68, 0x66, 0xc2, 0x0b, 0x2b, 0xd0, 0x51, 0xcb, 0x87,
-	0x2e, 0xb8, 0x20, 0x16, 0xd7, 0x47, 0x72, 0xf0, 0xf4, 0xe0, 0x6c, 0x1b, 0x07, 0x27, 0x93, 0x70,
-	0xeb, 0x49, 0x42, 0x47, 0xe3, 0x44, 0x1c, 0x9c, 0xf6, 0x53, 0x68, 0x19, 0x83, 0x64, 0xc7, 0x90,
-	0xb8, 0x60, 0xd5, 0xb9, 0x41, 0x5a, 0x50, 0xdf, 0xdd, 0x77, 0x9f, 0xee, 0xed, 0x3e, 0xdb, 0x39,
-	0xee, 0x58, 0xac, 0x78, 0xf4, 0x62, 0x73, 0x73, 0x7b, 0x7b, 0x0b, 0x8f, 0x25, 0x80, 0x99, 0xa7,
-	0xeb, 0xbb, 0xec, 0x88, 0x2a, 0xdb, 0xff, 0xc7, 0x82, 0x86, 0xd6, 0x3c, 0xf9, 0xba, 0x5a, 0x19,
-	0xfe, 0x06, 0xc4, 0xdd, 0xfc, 0x10, 0x56, 0xa5, 0xa0, 0xd6, 0x96, 0x46, 0xbd, 0xc6, 0x54, 0x9a,
-	0xfa, 0x1a, 0x13, 0xdb, 0x1e, 0x8f, 0xb7, 0xa0, 0xd6, 0x81, 0xdb, 0x57, 0x59, 0x30, 0x4f, 0x25,
-	0x4b, 0x4f, 0x17, 0x56, 0x93, 0xfb, 0x14, 0xb3, 0x60, 0xfb, 0x23, 0x80, 0x74, 0x34, 0xe6, 0xb4,
-	0x6f, 0x98, 0xd3, 0xb6, 0xb4, 0x69, 0x97, 0xec, 0x2d, 0x2e, 0x30, 0xc4, 0x12, 0xaa, 0x40, 0xf8,
-	0x57, 0x80, 0x48, 0x17, 0x16, 0xa6, 0x6c, 0x8e, 0x87, 0x34, 0x91, 0xd7, 0x2e, 0xe7, 0x05, 0x66,
-	0x57, 0x21, 0xe4, 0xcd, 0xe1, 0xb4, 0x95, 0x54, 0xee, 0x08, 0x8a, 0xcb, 0xca, 0x1d, 0x51, 0xd5,
-	0x51, 0x78, 0xbb, 0x07, 0xdd, 0x2d, 0xca, 0x5a, 0x5b, 0x1f, 0x0e, 0x33, 0xc3, 0xb1, 0x6f, 0xc3,
-	0xad, 0x02, 0x9c, 0x70, 0x50, 0x7c, 0x1b, 0x6e, 0xae, 0xf3, 0x1b, 0x96, 0xbf, 0xaa, 0xcb, 0x1c,
-	0x76, 0x17, 0x96, 0xb2, 0x4d, 0x8a, 0xce, 0x9e, 0xc2, 0xfc, 0x16, 0x3d, 0x99, 0x9c, 0xed, 0xd1,
-	0x8b, 0xb4, 0x23, 0x02, 0x95, 0xf8, 0x3c, 0xbc, 0x14, 0xeb, 0x83, 0x7f, 0x93, 0xbb, 0x00, 0x43,
-	0x56, 0xc7, 0x8d, 0xc7, 0xb4, 0x2f, 0xdf, 0xd8, 0x40, 0xc8, 0xd1, 0x98, 0xf6, 0xed, 0x8f, 0x80,
-	0xe8, 0xed, 0x88, 0xf5, 0x62, 0x46, 0xc3, 0xe4, 0xc4, 0x8d, 0xaf, 0xe2, 0x84, 0x8e, 0xe4, 0xe3,
-	0x21, 0x3a, 0xc8, 0x7e, 0x1f, 0x9a, 0x87, 0xde, 0x95, 0x43, 0x7f, 0x24, 0x5e, 0xff, 0x5a, 0x86,
-	0xd9, 0xb1, 0x77, 0xc5, 0xf8, 0x59, 0x05, 0x59, 0x10, 0x6d, 0xff, 0x71, 0x05, 0x66, 0x78, 0x4d,
-	0xd6, 0xea, 0x80, 0xc6, 0x89, 0x1f, 0x20, 0x8f, 0xc9, 0x56, 0x35, 0x50, 0x4e, 0x60, 0x96, 0x0a,
-	0x04, 0xa6, 0x70, 0xb6, 0xc9, 0xb7, 0x0a, 0x04, 0xc9, 0x1a, 0x30, 0x26, 0xb6, 0xd2, 0xab, 0x61,
-	0x9c, 0x52, 0x53, 0x40, 0x26, 0x8a, 0x99, 0x9a, 0x26, 0x7c, 0x7c, 0xf2, 0x2c, 0x10, 0x32, 0x51,
-	0x07, 0x15, 0x1a, 0x40, 0xb3, 0xf2, 0x0e, 0x4c, 0xc6, 0x00, 0xca, 0x19, 0x3a, 0xb5, 0xb7, 0x30,
-	0x74, 0xb8, 0x07, 0xee, 0x3a, 0x43, 0x07, 0xde, 0xc6, 0xd0, 0x79, 0x9b, 0xe8, 0x61, 0x0f, 0x6a,
-	0x78, 0xa6, 0x6b, 0x22, 0x52, 0x96, 0xc9, 0x6f, 0x68, 0x56, 0x00, 0xcf, 0x64, 0xb8, 0x9d, 0xf2,
-	0x8b, 0x43, 0x7f, 0xf4, 0xeb, 0x09, 0xc4, 0x7c, 0x1f, 0x66, 0x05, 0x94, 0x51, 0x76, 0xe0, 0x8d,
-	0xe4, 0x1b, 0x31, 0xf8, 0xb7, 0x30, 0x38, 0xd8, 0x09, 0xe2, 0x47, 0x74, 0x20, 0xef, 0x51, 0x6b,
-	0x20, 0x4c, 0xfc, 0x8e, 0xdd, 0x57, 0x41, 0x78, 0x19, 0x88, 0x9b, 0xd4, 0xaa, 0x6c, 0x13, 0xe8,
-	0xe0, 0x5b, 0x51, 0xe3, 0x30, 0x92, 0xcf, 0xfe, 0xd8, 0x7f, 0x60, 0x41, 0x47, 0x30, 0x9a, 0xc2,
-	0xc9, 0x94, 0x81, 0xeb, 0x9e, 0x0b, 0x78, 0x00, 0x2d, 0xf4, 0x76, 0xa8, 0x23, 0x47, 0x84, 0xdf,
-	0x0d, 0x20, 0x1b, 0xaf, 0xcc, 0xbc, 0x1c, 0xf9, 0x43, 0x41, 0xb7, 0x3a, 0x48, 0x9e, 0x5a, 0x91,
-	0x27, 0x2e, 0x60, 0x59, 0x8e, 0x2a, 0xdb, 0x3f, 0xb7, 0x60, 0x5e, 0x1b, 0xb0, 0x60, 0xd4, 0x27,
-	0xd0, 0x54, 0x4f, 0xb2, 0x51, 0xa5, 0x54, 0x2d, 0x9b, 0x92, 0x25, 0xfd, 0xcc, 0xa8, 0x8c, 0xf4,
-	0xee, 0x5d, 0xe1, 0x00, 0xe3, 0xc9, 0x48, 0x68, 0x33, 0x3a, 0x88, 0xd1, 0xd1, 0x25, 0xa5, 0xaf,
-	0x54, 0x15, 0xae, 0x4f, 0x19, 0x30, 0x8c, 0x12, 0x85, 0x41, 0x72, 0xae, 0x2a, 0x55, 0x44, 0x94,
-	0x48, 0x07, 0xda, 0xff, 0xad, 0x04, 0x0b, 0xdc, 0xed, 0x26, 0xdc, 0x9d, 0xea, 0x55, 0x9c, 0x19,
-	0xee, 0x81, 0xe4, 0x42, 0x6b, 0xe7, 0x86, 0x23, 0xca, 0xe4, 0xeb, 0x6f, 0xe9, 0x2a, 0x54, 0x37,
-	0xbd, 0xa6, 0xec, 0x45, 0xb9, 0x68, 0x2f, 0xae, 0x59, 0xe9, 0xa2, 0x80, 0x5d, 0xb5, 0x38, 0x60,
-	0xf7, 0x76, 0x01, 0xb2, 0xdc, 0x75, 0xa8, 0x59, 0x51, 0xcb, 0xb8, 0x0e, 0xb5, 0x06, 0xcb, 0x06,
-	0x00, 0xe5, 0xb5, 0x7f, 0xea, 0x53, 0x79, 0x37, 0x7d, 0x3e, 0xa6, 0x89, 0x6b, 0x54, 0xd9, 0x98,
-	0x85, 0x6a, 0xdc, 0x0f, 0xc7, 0xd4, 0x5e, 0x82, 0x45, 0x73, 0x71, 0xc5, 0x29, 0xf1, 0x33, 0x0b,
-	0xba, 0x4f, 0x79, 0xda, 0x85, 0x1f, 0x9c, 0xed, 0xf8, 0x71, 0x12, 0x46, 0xea, 0xf1, 0xb2, 0x7b,
-	0x00, 0x71, 0xe2, 0x45, 0xc2, 0xce, 0xe4, 0xca, 0xae, 0x06, 0x61, 0x6b, 0x44, 0x83, 0x01, 0xc7,
-	0x72, 0xda, 0x50, 0xe5, 0x9c, 0x31, 0x21, 0x9c, 0x92, 0x86, 0x4a, 0xfe, 0x1e, 0xbf, 0xa5, 0xc9,
-	0x16, 0x83, 0x5e, 0xe0, 0xd1, 0xcb, 0x3d, 0x7d, 0x19, 0xa8, 0xfd, 0x87, 0x25, 0x98, 0x4b, 0x07,
-	0xc9, 0x6f, 0x7d, 0x1b, 0x02, 0x5c, 0xe8, 0xe1, 0xa9, 0x00, 0x17, 0x01, 0x44, 0xd7, 0x67, 0x8a,
-	0xb9, 0xe6, 0x97, 0xd4, 0xa0, 0xe4, 0x01, 0x34, 0x64, 0x29, 0x9c, 0x24, 0xda, 0x2b, 0x42, 0x3a,
-	0x98, 0x5f, 0xff, 0x60, 0xa6, 0x81, 0x30, 0x73, 0x44, 0x09, 0xdf, 0x2a, 0x18, 0x25, 0xf8, 0x25,
-	0xdf, 0x53, 0x59, 0x64, 0x02, 0x8d, 0xe9, 0xd4, 0x7c, 0x0f, 0x51, 0x9f, 0xd6, 0x75, 0xcd, 0x9a,
-	0x7a, 0x7d, 0x51, 0xf1, 0x3c, 0x6f, 0x31, 0xbd, 0x08, 0x57, 0x71, 0x74, 0x90, 0xf4, 0x0b, 0x85,
-	0x13, 0xc3, 0xfc, 0x35, 0x60, 0xf6, 0xdf, 0xb6, 0xe0, 0x56, 0xc1, 0x36, 0x0a, 0x19, 0xb0, 0x05,
-	0xf3, 0xa7, 0x0a, 0x29, 0x97, 0x9a, 0x0b, 0x82, 0x25, 0x29, 0x5c, 0xcd, 0xe5, 0x75, 0xf2, 0x1f,
-	0x28, 0x73, 0x8b, 0x6f, 0x9e, 0x71, 0xef, 0x31, 0x8f, 0xb0, 0x0f, 0xa1, 0xb7, 0xfd, 0x9a, 0x89,
-	0x94, 0x4d, 0xfd, 0x09, 0x6e, 0x49, 0x59, 0x6b, 0x39, 0x91, 0xf9, 0x66, 0x77, 0xf4, 0x29, 0xbf,
-	0xcd, 0xa5, 0xda, 0x22, 0x5f, 0x7d, 0xdb, 0x46, 0x74, 0xee, 0xbf, 0x2f, 0x76, 0x9d, 0xbf, 0x21,
-	0x2e, 0x6f, 0x5f, 0x6a, 0x20, 0xfb, 0x02, 0xe6, 0x9e, 0x4f, 0x86, 0x89, 0x9f, 0xbe, 0x27, 0x4e,
-	0xbe, 0x2e, 0x3e, 0xc2, 0x26, 0xe4, 0xd2, 0x15, 0x76, 0xa5, 0xd7, 0x63, 0x2b, 0x36, 0x62, 0x2d,
-	0xb9, 0xf9, 0x1e, 0xf3, 0x08, 0xfb, 0x16, 0x2c, 0xa7, 0x5d, 0xf2, 0xb5, 0x93, 0xc7, 0xce, 0x1f,
-	0x59, 0x3c, 0xeb, 0xd9, 0x7c, 0xde, 0x9c, 0x3c, 0x83, 0x85, 0xd8, 0x0f, 0xce, 0x86, 0x54, 0x6f,
-	0x27, 0x16, 0x2b, 0x71, 0xd3, 0x1c, 0x9e, 0x78, 0x02, 0xdd, 0x29, 0xfa, 0x82, 0x11, 0x48, 0xf1,
-	0x40, 0x53, 0x02, 0xc9, 0x2c, 0x49, 0xd1, 0x04, 0xbe, 0x05, 0x6d, 0xb3, 0x33, 0xf2, 0xb1, 0xb8,
-	0xd6, 0x98, 0x8e, 0xac, 0x9c, 0xb9, 0x9d, 0x96, 0x52, 0x86, 0x51, 0xd3, 0xfe, 0xa9, 0x05, 0x5d,
-	0x87, 0x32, 0x32, 0xa6, 0x5a, 0xa7, 0x82, 0x7a, 0x9e, 0xe4, 0x9a, 0x9d, 0x3e, 0x61, 0x75, 0x5d,
-	0x52, 0xce, 0x75, 0x75, 0xea, 0xa6, 0xec, 0xdc, 0x28, 0x98, 0xd5, 0x46, 0x0d, 0x66, 0xc4, 0xfc,
-	0x96, 0xe1, 0xa6, 0x18, 0x92, 0x1c, 0x4e, 0x1a, 0x78, 0x34, 0x3a, 0x35, 0x02, 0x8f, 0x3d, 0xe8,
-	0xf2, 0x37, 0xea, 0xf4, 0x79, 0x88, 0x0f, 0xb7, 0x80, 0x3c, 0xf7, 0xfa, 0x5e, 0x14, 0x86, 0xc1,
-	0x21, 0x8d, 0x44, 0x9a, 0x2a, 0x6a, 0x9f, 0x18, 0x97, 0x93, 0x8a, 0x32, 0x2f, 0xc9, 0x67, 0xd5,
-	0xc2, 0x40, 0x3e, 0x5f, 0xc7, 0x4b, 0xb6, 0x03, 0x0b, 0x1b, 0xde, 0x2b, 0x2a, 0x5b, 0x4a, 0x57,
-	0xa9, 0x31, 0x56, 0x8d, 0xca, 0xb5, 0x97, 0xf7, 0xa1, 0xf3, 0xdd, 0x3a, 0x7a, 0x6d, 0x7b, 0x0d,
-	0x16, 0xcd, 0x36, 0x85, 0x28, 0xe9, 0x41, 0x6d, 0x24, 0x60, 0x62, 0x74, 0xaa, 0xbc, 0xf2, 0x19,
-	0x34, 0xb4, 0x77, 0x07, 0xc9, 0x32, 0x2c, 0xbc, 0xdc, 0x3d, 0xde, 0xdf, 0x3e, 0x3a, 0x72, 0x0f,
-	0x5f, 0x6c, 0x7c, 0xba, 0xfd, 0x5d, 0x77, 0x67, 0xfd, 0x68, 0xa7, 0x73, 0x83, 0x2c, 0x01, 0xd9,
-	0xdf, 0x3e, 0x3a, 0xde, 0xde, 0x32, 0xe0, 0x16, 0xb9, 0x07, 0xbd, 0x17, 0xfb, 0x2f, 0x8e, 0xb6,
-	0xb7, 0xdc, 0xa2, 0xef, 0x4a, 0xe4, 0x2e, 0xdc, 0x12, 0xf8, 0x82, 0xcf, 0xcb, 0x2b, 0x4f, 0xa0,
-	0x93, 0x75, 0x4b, 0x1a, 0xee, 0xdc, 0xeb, 0xfc, 0xbe, 0x2b, 0xff, 0xa8, 0x0c, 0x90, 0xa6, 0xa7,
-	0x92, 0x2e, 0x2c, 0x6e, 0xad, 0x1f, 0xaf, 0xef, 0x1d, 0xb0, 0x41, 0x38, 0x07, 0xc7, 0xdb, 0x9b,
-	0xc7, 0xae, 0xb3, 0xfd, 0xed, 0xce, 0x8d, 0x42, 0xcc, 0xc1, 0x21, 0x33, 0xd9, 0x97, 0x61, 0x61,
-	0x77, 0x7f, 0xf7, 0x78, 0x77, 0x7d, 0xcf, 0x75, 0x0e, 0x5e, 0xec, 0xee, 0x3f, 0xe3, 0x6f, 0xa2,
-	0x94, 0xc9, 0x3b, 0x70, 0xfb, 0xc5, 0xe1, 0x53, 0xe7, 0x60, 0xff, 0xd8, 0x3d, 0xda, 0x79, 0x71,
-	0xbc, 0x85, 0x2f, 0xaa, 0x6c, 0x3a, 0xbb, 0x87, 0xbc, 0xcd, 0xca, 0x75, 0x15, 0x58, 0xd3, 0x55,
-	0xb6, 0x62, 0xcf, 0x0e, 0x8e, 0x8e, 0x76, 0x0f, 0xdd, 0x6f, 0xbf, 0xd8, 0x76, 0x76, 0xb7, 0x8f,
-	0xf0, 0xc3, 0x99, 0x02, 0x38, 0xab, 0x3f, 0x4b, 0xe6, 0xa1, 0x75, 0xbc, 0xf7, 0x1d, 0xf7, 0x60,
-	0x7f, 0xf7, 0x60, 0x1f, 0xab, 0xd6, 0x4c, 0x10, 0xab, 0x55, 0x27, 0x3d, 0x58, 0xda, 0xfe, 0x9d,
-	0x63, 0xb7, 0xa0, 0x65, 0x98, 0x82, 0x63, 0xdf, 0x35, 0xc8, 0x2d, 0xb8, 0x79, 0x74, 0xbc, 0x7e,
-	0xbc, 0xbb, 0xe9, 0x8a, 0x27, 0x95, 0xd8, 0x26, 0xb0, 0xcf, 0x9a, 0xc5, 0x28, 0xf6, 0x55, 0x8b,
-	0x2c, 0x42, 0xe7, 0x70, 0xfd, 0xbb, 0xcf, 0xb7, 0xf7, 0x8f, 0xdd, 0xf5, 0xad, 0x2d, 0x07, 0x3f,
-	0x68, 0xe7, 0xa0, 0xac, 0xee, 0x1c, 0xdb, 0xa8, 0xe7, 0x87, 0x87, 0x58, 0xa5, 0x23, 0x0b, 0x0c,
-	0x33, 0xbf, 0xf6, 0xd3, 0x32, 0xb4, 0xf9, 0x7d, 0x01, 0xfe, 0x43, 0x0e, 0x34, 0x22, 0xcf, 0x61,
-	0x56, 0xfc, 0x22, 0x08, 0xb9, 0xa9, 0x1e, 0xc2, 0xd0, 0x7f, 0x83, 0xa4, 0xb7, 0x94, 0x05, 0x0b,
-	0xf6, 0x5b, 0xf8, 0xab, 0xff, 0xe9, 0x7f, 0xfc, 0x7e, 0xa9, 0x45, 0x1a, 0x8f, 0x2e, 0x3e, 0x7c,
-	0x74, 0x46, 0x83, 0x98, 0xb5, 0xf1, 0xbb, 0x00, 0xe9, 0xef, 0x5c, 0x90, 0xae, 0xf2, 0x3e, 0x66,
-	0x7e, 0x04, 0xa4, 0x77, 0xab, 0x00, 0x23, 0xda, 0xbd, 0x85, 0xed, 0x2e, 0xd8, 0x6d, 0xd6, 0xae,
-	0x1f, 0xf8, 0x09, 0xff, 0xcd, 0x8b, 0x4f, 0xac, 0x15, 0x32, 0x80, 0xa6, 0xfe, 0x0b, 0x14, 0x44,
-	0xc6, 0xfb, 0x0b, 0x7e, 0x43, 0xa3, 0x77, 0xbb, 0x10, 0x27, 0x65, 0x0e, 0xf6, 0x71, 0xd3, 0xee,
-	0xb0, 0x3e, 0x26, 0x58, 0x23, 0xed, 0x65, 0xc8, 0x25, 0x71, 0xfa, 0x43, 0x13, 0xe4, 0x8e, 0x26,
-	0x1c, 0x73, 0x3f, 0x73, 0xd1, 0xbb, 0x3b, 0x05, 0x2b, 0xfa, 0xba, 0x8b, 0x7d, 0x2d, 0xdb, 0x84,
-	0xf5, 0xd5, 0xc7, 0x3a, 0xf2, 0x67, 0x2e, 0x3e, 0xb1, 0x56, 0xd6, 0xfe, 0xf4, 0x21, 0xd4, 0x55,
-	0x2e, 0x10, 0xf9, 0x21, 0xb4, 0x8c, 0x0b, 0x1d, 0x44, 0x4e, 0xa3, 0xe8, 0xfe, 0x47, 0xef, 0x4e,
-	0x31, 0x52, 0x74, 0x7c, 0x0f, 0x3b, 0xee, 0x92, 0x25, 0xd6, 0xb1, 0xb8, 0x11, 0xf1, 0x08, 0xaf,
-	0x26, 0xf1, 0x67, 0x45, 0x5e, 0x69, 0x27, 0x0e, 0xef, 0xec, 0x4e, 0xf6, 0x10, 0x30, 0x7a, 0xbb,
-	0x3b, 0x05, 0x2b, 0xba, 0xbb, 0x83, 0xdd, 0x2d, 0x91, 0x45, 0xbd, 0x3b, 0x95, 0x9f, 0x43, 0xf1,
-	0x69, 0x1f, 0xfd, 0x37, 0x18, 0xc8, 0xdd, 0xf4, 0xe1, 0x95, 0x82, 0xdf, 0x66, 0x50, 0x24, 0x92,
-	0xff, 0x81, 0x06, 0xbb, 0x8b, 0x5d, 0x11, 0x82, 0xdb, 0xa7, 0xff, 0x04, 0x03, 0x39, 0x81, 0x86,
-	0xf6, 0x54, 0x31, 0xb9, 0x35, 0xf5, 0x59, 0xe5, 0x5e, 0xaf, 0x08, 0x55, 0x34, 0x15, 0xbd, 0xfd,
-	0x47, 0x4c, 0x21, 0xfd, 0x3e, 0xd4, 0xd5, 0xe3, 0xb7, 0x64, 0x59, 0x7b, 0x8c, 0x58, 0x7f, 0xac,
-	0xb7, 0xd7, 0xcd, 0x23, 0x8a, 0x88, 0x4f, 0x6f, 0x9d, 0x11, 0xdf, 0x4b, 0x68, 0x68, 0x0f, 0xdc,
-	0xaa, 0x09, 0xe4, 0x1f, 0xd1, 0x55, 0x13, 0x28, 0x78, 0x0f, 0xd7, 0x9e, 0xc7, 0x2e, 0x1a, 0xa4,
-	0x8e, 0xf4, 0x9d, 0xbc, 0x0e, 0x63, 0xb2, 0x07, 0x37, 0xc5, 0xc9, 0x7a, 0x42, 0x3f, 0xcf, 0x36,
-	0x14, 0xfc, 0xec, 0xc5, 0x63, 0x8b, 0x3c, 0x81, 0x9a, 0x7c, 0xc7, 0x98, 0x2c, 0x15, 0xbf, 0xc7,
-	0xdc, 0x5b, 0xce, 0xc1, 0xc5, 0x31, 0xf8, 0x5d, 0x80, 0xf4, 0x35, 0x5d, 0x25, 0x24, 0x72, 0xaf,
-	0xf3, 0x2a, 0x0a, 0xc8, 0x3f, 0xbd, 0x6b, 0x2f, 0xe1, 0x04, 0x3b, 0x04, 0x85, 0x44, 0x40, 0x2f,
-	0xe5, 0xbb, 0x12, 0x3f, 0x80, 0x86, 0xf6, 0xa0, 0xae, 0x5a, 0xbe, 0xfc, 0x63, 0xbc, 0x6a, 0xf9,
-	0x0a, 0xde, 0xdf, 0xb5, 0x7b, 0xd8, 0xfa, 0xa2, 0x3d, 0xc7, 0x5a, 0x8f, 0xfd, 0xb3, 0x60, 0xc4,
-	0x2b, 0xb0, 0x0d, 0x3a, 0x87, 0x96, 0xf1, 0x6a, 0xae, 0xe2, 0xd0, 0xa2, 0x37, 0x79, 0x15, 0x87,
-	0x16, 0x3e, 0xb4, 0x2b, 0xe9, 0xcc, 0x9e, 0x67, 0xfd, 0x5c, 0x60, 0x15, 0xad, 0xa7, 0xef, 0x41,
-	0x43, 0x7b, 0x01, 0x57, 0xcd, 0x25, 0xff, 0xd8, 0xae, 0x9a, 0x4b, 0xd1, 0x83, 0xb9, 0x8b, 0xd8,
-	0x47, 0xdb, 0x46, 0x52, 0xc0, 0x97, 0xa2, 0x58, 0xdb, 0x3f, 0x84, 0xb6, 0xf9, 0x26, 0xae, 0xe2,
-	0xfd, 0xc2, 0xd7, 0x75, 0x15, 0xef, 0x4f, 0x79, 0x48, 0x57, 0x90, 0xf4, 0xca, 0x82, 0xea, 0xe4,
-	0xd1, 0x4f, 0x44, 0x6a, 0xf3, 0x67, 0xe4, 0xdb, 0x4c, 0xc0, 0x89, 0x17, 0xcc, 0xc8, 0xb2, 0x46,
-	0xb5, 0xfa, 0x3b, 0x67, 0x8a, 0x5f, 0x72, 0x8f, 0x9d, 0x99, 0xc4, 0xcc, 0xdf, 0xba, 0x7a, 0x06,
-	0x0b, 0x8a, 0x98, 0xd5, 0x8b, 0x64, 0xb1, 0x9a, 0x43, 0xe1, 0xc3, 0x67, 0xbd, 0x4e, 0x16, 0xfb,
-	0xd8, 0xe2, 0xc7, 0x1f, 0xbe, 0xfb, 0xa4, 0x1d, 0x7f, 0xfa, 0xa3, 0x64, 0xda, 0xf1, 0x67, 0x3c,
-	0x0f, 0x95, 0x3d, 0xfe, 0x12, 0x9f, 0xb5, 0x11, 0xc0, 0x5c, 0xe6, 0xf6, 0xaa, 0x62, 0xaf, 0xe2,
-	0x07, 0x06, 0x7a, 0xf7, 0xae, 0xbf, 0xf4, 0x6a, 0x8a, 0x22, 0x29, 0x4d, 0x1f, 0xc9, 0xd7, 0x4b,
-	0x7e, 0x0f, 0x9a, 0xfa, 0x53, 0x9e, 0x44, 0x97, 0x09, 0xd9, 0x9e, 0x6e, 0x17, 0xe2, 0x4c, 0x2a,
-	0x21, 0x4d, 0xbd, 0x1b, 0xf2, 0x1d, 0x58, 0x52, 0xcb, 0xac, 0x5f, 0x88, 0x8c, 0xc9, 0x3b, 0x05,
-	0xd7, 0x24, 0x8d, 0xc5, 0xbe, 0x35, 0xf5, 0x1e, 0xe5, 0x63, 0x8b, 0x51, 0x9f, 0xf9, 0x3e, 0x62,
-	0x7a, 0xf2, 0x14, 0x3d, 0x0b, 0x99, 0x9e, 0x3c, 0x85, 0x8f, 0x2a, 0x4a, 0xea, 0x23, 0x0b, 0xc6,
-	0x1a, 0xf1, 0x0c, 0x2e, 0xf2, 0x3d, 0x98, 0xd3, 0xae, 0x9c, 0x1f, 0x5d, 0x05, 0x7d, 0xc5, 0x49,
-	0xf9, 0xe7, 0x85, 0x7a, 0x45, 0x66, 0xa9, 0xbd, 0x8c, 0xed, 0xcf, 0xdb, 0xc6, 0xe2, 0x30, 0x2e,
-	0xda, 0x84, 0x86, 0x7e, 0x9d, 0xfd, 0x9a, 0x76, 0x97, 0x35, 0x94, 0xfe, 0x76, 0xcd, 0x63, 0x8b,
-	0xec, 0x41, 0x27, 0xfb, 0xcc, 0x86, 0x92, 0x29, 0x45, 0x4f, 0x83, 0xf4, 0x32, 0x48, 0xe3, 0x71,
-	0x0e, 0x72, 0xc8, 0xf3, 0x82, 0xd5, 0xef, 0x43, 0x84, 0x51, 0xf6, 0x54, 0x37, 0x7f, 0x37, 0x42,
-	0xb5, 0x56, 0xf4, 0x8b, 0x21, 0x0f, 0xad, 0xc7, 0x16, 0xf9, 0x7b, 0x16, 0x34, 0x8d, 0xcb, 0xeb,
-	0x46, 0x96, 0x65, 0x66, 0x9e, 0x5d, 0x1d, 0xa7, 0x4f, 0xd4, 0x76, 0x70, 0x11, 0xf7, 0x56, 0xbe,
-	0x65, 0x6c, 0xd2, 0x4f, 0x0c, 0x4f, 0xef, 0x6a, 0xf6, 0x47, 0x22, 0x3e, 0xcb, 0x56, 0xd0, 0x9f,
-	0x88, 0xfa, 0xec, 0xb1, 0x45, 0xfe, 0x89, 0x05, 0x6d, 0x33, 0x84, 0xa3, 0xa6, 0x5b, 0x18, 0x2c,
-	0x52, 0xa4, 0x34, 0x25, 0xee, 0xf3, 0x3d, 0x1c, 0xe5, 0xf1, 0x8a, 0x63, 0x8c, 0x52, 0xbc, 0xec,
-	0xf9, 0xcb, 0x8d, 0x96, 0x7c, 0xc2, 0x7f, 0xb3, 0x49, 0x46, 0xaf, 0x49, 0xfe, 0x37, 0x7e, 0x14,
-	0xf9, 0xe9, 0xbf, 0x88, 0x83, 0x9b, 0xf0, 0x03, 0xfe, 0xe3, 0x08, 0x32, 0x04, 0xca, 0xa8, 0xf8,
-	0x6d, 0xbf, 0xb7, 0x1f, 0xe0, 0x9c, 0xee, 0xd9, 0xb7, 0x8c, 0x39, 0x65, 0x15, 0x8f, 0x75, 0x3e,
-	0x3a, 0xf1, 0x63, 0x36, 0xe9, 0xc9, 0x99, 0xfb, 0x81, 0x9b, 0xe9, 0x83, 0x1c, 0xf1, 0x41, 0x8a,
-	0xea, 0x06, 0xab, 0xbd, 0x65, 0x33, 0xf6, 0x0a, 0x8e, 0xf5, 0x81, 0xfd, 0xce, 0xd4, 0xb1, 0x3e,
-	0xc2, 0x40, 0x0c, 0x1b, 0xf1, 0x21, 0x40, 0x9a, 0x6d, 0x42, 0x32, 0x99, 0x0e, 0x4a, 0x00, 0xe5,
-	0x13, 0x52, 0x4c, 0x7e, 0x96, 0x09, 0x11, 0xac, 0xc5, 0xef, 0x73, 0x71, 0xba, 0x2b, 0x73, 0x24,
-	0x74, 0xed, 0xcb, 0x4c, 0x09, 0x31, 0xb4, 0xaf, 0x6c, 0xfb, 0x86, 0x30, 0x55, 0x09, 0x17, 0x2f,
-	0xa0, 0xb5, 0x17, 0x86, 0xaf, 0x26, 0x63, 0x95, 0x00, 0x69, 0xc6, 0x48, 0x77, 0xbc, 0xf8, 0xbc,
-	0x97, 0x99, 0x85, 0x7d, 0x1f, 0x9b, 0xea, 0x91, 0xae, 0xd6, 0xd4, 0xa3, 0x9f, 0xa4, 0x99, 0x2c,
-	0x9f, 0x11, 0x0f, 0xe6, 0x95, 0x8c, 0x56, 0x03, 0xef, 0x99, 0xcd, 0x18, 0x92, 0x39, 0xdb, 0x85,
-	0x61, 0x26, 0xc8, 0xd1, 0x3e, 0x8a, 0x65, 0x9b, 0x8f, 0x2d, 0x72, 0x08, 0xcd, 0x2d, 0xda, 0xc7,
-	0x6b, 0xa1, 0x18, 0x68, 0x5c, 0x30, 0x82, 0x55, 0x3c, 0x42, 0xd9, 0x6b, 0x19, 0x40, 0xf3, 0xdc,
-	0x1a, 0x7b, 0x57, 0x11, 0xfd, 0xd1, 0xa3, 0x9f, 0x88, 0x10, 0xe6, 0x67, 0xf2, 0xdc, 0x92, 0x31,
-	0x5e, 0xe3, 0xdc, 0xca, 0x04, 0x85, 0x8d, 0x73, 0x2b, 0x17, 0x14, 0x36, 0x96, 0x5a, 0xc6, 0x98,
-	0xc9, 0x10, 0xe6, 0x73, 0x71, 0x64, 0x75, 0x64, 0x4d, 0x8b, 0x3e, 0xf7, 0xee, 0x4f, 0xaf, 0x60,
-	0xf6, 0xb6, 0x62, 0xf6, 0x76, 0x04, 0x2d, 0xfe, 0x6c, 0xd5, 0x09, 0xe5, 0x37, 0x3e, 0x32, 0x2f,
-	0x20, 0xe8, 0xf7, 0x49, 0xb2, 0x07, 0x0c, 0xe2, 0x4c, 0x0d, 0x87, 0xbf, 0x7f, 0xf9, 0x7d, 0x68,
-	0x3c, 0xa3, 0x89, 0xbc, 0xe2, 0xa1, 0x74, 0xec, 0xcc, 0x9d, 0x8f, 0x5e, 0xc1, 0x0d, 0x11, 0x93,
-	0x66, 0xb0, 0xb5, 0x47, 0x74, 0x70, 0x46, 0xb9, 0x70, 0x72, 0xfd, 0xc1, 0x67, 0xe4, 0x77, 0xb0,
-	0x71, 0x75, 0xe1, 0x6e, 0x49, 0xcb, 0xd7, 0xd7, 0x1b, 0x9f, 0xcb, 0xc0, 0x8b, 0x5a, 0x0e, 0xc2,
-	0x01, 0xd5, 0x74, 0xbd, 0x00, 0x1a, 0xda, 0x85, 0x5d, 0xc5, 0x40, 0xf9, 0x0b, 0xda, 0x8a, 0x81,
-	0x0a, 0xee, 0xf7, 0xda, 0x0f, 0xb1, 0x1f, 0x9b, 0xdc, 0x4f, 0xfb, 0xe1, 0x77, 0x7a, 0xd3, 0x9e,
-	0x1e, 0xfd, 0xc4, 0x1b, 0x25, 0x9f, 0x91, 0x97, 0xf8, 0x88, 0xac, 0x7e, 0x85, 0x25, 0x35, 0x1a,
-	0xb2, 0xb7, 0x5d, 0xd4, 0x62, 0x69, 0x28, 0xd3, 0x90, 0xe0, 0x5d, 0xa1, 0x26, 0xf7, 0x75, 0x80,
-	0xa3, 0x24, 0x1c, 0x6f, 0x79, 0x74, 0x14, 0x06, 0xa9, 0xac, 0x4d, 0x2f, 0x50, 0xa4, 0xf2, 0x4b,
-	0xbb, 0x45, 0x41, 0x5e, 0x6a, 0x56, 0x96, 0x71, 0x0b, 0x48, 0x12, 0xd7, 0xd4, 0x3b, 0x16, 0x6a,
-	0x41, 0x0a, 0xee, 0x59, 0x3c, 0xb6, 0xc8, 0x3a, 0x40, 0x9a, 0x48, 0xa0, 0x6c, 0xa6, 0x5c, 0x8e,
-	0x82, 0x12, 0x7b, 0x05, 0x59, 0x07, 0x87, 0x50, 0x4f, 0xc3, 0xae, 0xcb, 0xe9, 0xfb, 0x03, 0x46,
-	0x90, 0x56, 0x9d, 0xe0, 0xb9, 0x60, 0xa8, 0xdd, 0xc1, 0xa5, 0x02, 0x52, 0x63, 0x4b, 0x85, 0x11,
-	0x4e, 0x1f, 0x16, 0xf8, 0x00, 0x95, 0xba, 0x84, 0x89, 0xff, 0xea, 0xad, 0xe0, 0x7c, 0x40, 0x52,
-	0x71, 0x73, 0x61, 0x3c, 0xcd, 0x70, 0xfd, 0x30, 0x6a, 0xe5, 0x97, 0x0e, 0x98, 0x68, 0x1e, 0xc1,
-	0x7c, 0x2e, 0x44, 0xa3, 0x58, 0x7a, 0x5a, 0x0c, 0x4e, 0xb1, 0xf4, 0xd4, 0xe8, 0x8e, 0x7d, 0x13,
-	0xbb, 0x9c, 0xb3, 0x01, 0x4d, 0xbd, 0x4b, 0x3f, 0xe9, 0x9f, 0xb3, 0xee, 0xfe, 0xc8, 0x82, 0x85,
-	0x82, 0x08, 0x0c, 0x79, 0x57, 0x7a, 0x0d, 0xa6, 0x46, 0x67, 0x7a, 0x85, 0x0e, 0x7a, 0xfb, 0x08,
-	0xfb, 0x79, 0x4e, 0x3e, 0x35, 0x0e, 0x36, 0xee, 0x1b, 0x17, 0x9c, 0x79, 0xad, 0x52, 0x51, 0xa8,
-	0x51, 0xfc, 0x08, 0x96, 0xf9, 0x40, 0xd6, 0x87, 0xc3, 0x4c, 0xf0, 0xe0, 0x5e, 0xee, 0x77, 0x5d,
-	0x8d, 0xa0, 0x48, 0x6f, 0xfa, 0xef, 0xbe, 0x4e, 0x51, 0xa7, 0xf9, 0x50, 0xc9, 0x04, 0x3a, 0x59,
-	0x87, 0x3c, 0x99, 0xde, 0x56, 0xef, 0x1d, 0xc3, 0xfe, 0x2d, 0x70, 0xe2, 0x7f, 0x11, 0x3b, 0x7b,
-	0xc7, 0xee, 0x15, 0xad, 0x0b, 0x37, 0x89, 0xd9, 0x7e, 0xfc, 0x15, 0x15, 0x3d, 0xc8, 0xcc, 0x53,
-	0x76, 0x30, 0x2d, 0xdc, 0xa1, 0x2c, 0xf0, 0xe2, 0xe0, 0xc3, 0x7b, 0xd8, 0xfd, 0x7d, 0xfb, 0x76,
-	0x51, 0xf7, 0x11, 0xff, 0x84, 0xdb, 0xe2, 0xcb, 0x59, 0xbe, 0x96, 0x23, 0xb8, 0x5f, 0xb4, 0xdf,
-	0x53, 0x6d, 0xa1, 0xcc, 0x5a, 0xdf, 0x40, 0xdd, 0xae, 0xa9, 0x47, 0x0b, 0x14, 0xfb, 0x14, 0x84,
-	0x25, 0x14, 0xfb, 0x14, 0x85, 0x17, 0x4c, 0xbd, 0x46, 0x06, 0x16, 0x3e, 0xb1, 0x56, 0x36, 0xde,
-	0xff, 0xde, 0x17, 0xcf, 0xfc, 0xe4, 0x7c, 0x72, 0xb2, 0xda, 0x0f, 0x47, 0x8f, 0x86, 0xd2, 0xdb,
-	0x28, 0x2e, 0xc3, 0x3d, 0x1a, 0x06, 0x83, 0x47, 0xd8, 0xec, 0xc9, 0x0c, 0xfe, 0x10, 0xf5, 0x57,
-	0xff, 0x7f, 0x00, 0x00, 0x00, 0xff, 0xff, 0xcb, 0x57, 0x38, 0x06, 0xba, 0x7a, 0x00, 0x00,
+	0xa9, 0xd6, 0x4c, 0xab, 0x35, 0x62, 0xf7, 0x50, 0xd2, 0x6c, 0xef, 0xb4, 0x57, 0x2b, 0xfe, 0xba,
+	0x49, 0x0d, 0x9b, 0xa4, 0x92, 0x6c, 0xf5, 0x4a, 0xda, 0x45, 0x2a, 0x59, 0x15, 0x24, 0x53, 0x5d,
+	0x95, 0x59, 0xca, 0xcc, 0x22, 0x9b, 0x1a, 0x8f, 0x0f, 0x86, 0x6d, 0x18, 0xbe, 0x18, 0xc2, 0xc2,
+	0x80, 0xd7, 0xb0, 0xb1, 0x80, 0xd6, 0x86, 0x61, 0xf8, 0x60, 0x5f, 0x6c, 0xac, 0x0d, 0xf9, 0xe4,
+	0xc3, 0xfa, 0x62, 0xf8, 0x60, 0x03, 0x06, 0x6c, 0xc0, 0xc0, 0x62, 0x7d, 0xf0, 0xc2, 0x30, 0xe0,
+	0x83, 0xed, 0xb3, 0x11, 0x2f, 0x3e, 0x19, 0x91, 0x99, 0xc5, 0xee, 0x91, 0x66, 0x75, 0xe9, 0x66,
+	0xbc, 0xf7, 0x32, 0xbe, 0xef, 0xbd, 0x78, 0x9f, 0x88, 0x28, 0xa8, 0x47, 0xe3, 0xfe, 0xca, 0x38,
+	0x0a, 0x93, 0x90, 0x54, 0x87, 0x41, 0x34, 0xee, 0xf7, 0x6e, 0x9d, 0x86, 0xe1, 0xe9, 0x90, 0x3e,
+	0xf4, 0xc6, 0xfe, 0x43, 0x2f, 0x08, 0xc2, 0xc4, 0x4b, 0xfc, 0x30, 0x88, 0x39, 0x91, 0xfd, 0x23,
+	0x68, 0x3f, 0xa3, 0xc1, 0x21, 0xa5, 0x03, 0x87, 0xfe, 0x64, 0x42, 0xe3, 0x84, 0x7c, 0x15, 0xe6,
+	0x3d, 0xfa, 0x53, 0x4a, 0x07, 0xee, 0xd8, 0x8b, 0xe3, 0xf1, 0x59, 0xe4, 0xc5, 0xb4, 0x6b, 0xdd,
+	0xb5, 0xee, 0x37, 0x9d, 0x0e, 0x47, 0x1c, 0x28, 0x38, 0x79, 0x17, 0x9a, 0x31, 0x23, 0xa5, 0x41,
+	0x12, 0x85, 0xe3, 0xcb, 0x6e, 0x09, 0xe9, 0x1a, 0x0c, 0xb6, 0xc5, 0x41, 0xf6, 0x10, 0xe6, 0x54,
+	0x0b, 0xf1, 0x38, 0x0c, 0x62, 0x4a, 0x1e, 0xc1, 0x62, 0xdf, 0x1f, 0x9f, 0xd1, 0xc8, 0xc5, 0x8f,
+	0x47, 0x01, 0x1d, 0x85, 0x81, 0xdf, 0xef, 0x5a, 0x77, 0xcb, 0xf7, 0xeb, 0x0e, 0xe1, 0x38, 0xf6,
+	0xc5, 0x73, 0x81, 0x21, 0xef, 0xc3, 0x1c, 0x0d, 0x38, 0x9c, 0x0e, 0xf0, 0x2b, 0xd1, 0x54, 0x3b,
+	0x05, 0xb3, 0x0f, 0xec, 0xbf, 0x59, 0x82, 0xf9, 0x9d, 0xc0, 0x4f, 0x5e, 0x7a, 0xc3, 0x21, 0x4d,
+	0xe4, 0x98, 0xde, 0x87, 0xb9, 0x0b, 0x04, 0xe0, 0x98, 0x2e, 0xc2, 0x68, 0x20, 0x46, 0xd4, 0xe6,
+	0xe0, 0x03, 0x01, 0x9d, 0xda, 0xb3, 0xd2, 0xd4, 0x9e, 0x15, 0x4e, 0x57, 0x79, 0xca, 0x74, 0xbd,
+	0x0f, 0x73, 0x11, 0xed, 0x87, 0xe7, 0x34, 0xba, 0x74, 0x2f, 0xfc, 0x60, 0x10, 0x5e, 0x74, 0x2b,
+	0x77, 0xad, 0xfb, 0x55, 0xa7, 0x2d, 0xc1, 0x2f, 0x11, 0x4a, 0xd6, 0x61, 0xae, 0x7f, 0xe6, 0x05,
+	0x01, 0x1d, 0xba, 0xc7, 0x5e, 0xff, 0xd5, 0x64, 0x1c, 0x77, 0xab, 0x77, 0xad, 0xfb, 0x8d, 0xd5,
+	0x1b, 0x2b, 0xb8, 0xaa, 0x2b, 0x1b, 0x67, 0x5e, 0xb0, 0x8e, 0x98, 0xc3, 0xc0, 0x1b, 0xc7, 0x67,
+	0x61, 0xe2, 0xb4, 0xc5, 0x17, 0x1c, 0x1c, 0xdb, 0x8b, 0x40, 0xf4, 0x99, 0xe0, 0x73, 0x6f, 0xff,
+	0x53, 0x0b, 0x16, 0x5e, 0x04, 0xc3, 0xb0, 0xff, 0xea, 0x97, 0x9c, 0xa2, 0x82, 0x31, 0x94, 0xde,
+	0x76, 0x0c, 0xe5, 0xcf, 0x3b, 0x86, 0x25, 0x58, 0x34, 0x3b, 0x2b, 0x46, 0x41, 0xe1, 0x3a, 0xfb,
+	0xfa, 0x94, 0xca, 0x6e, 0xc9, 0x61, 0x7c, 0x05, 0x3a, 0xfd, 0x49, 0x14, 0xd1, 0x20, 0x37, 0x8e,
+	0x39, 0x01, 0x57, 0x03, 0x79, 0x17, 0x9a, 0x01, 0xbd, 0x48, 0xc9, 0x04, 0xef, 0x06, 0xf4, 0x42,
+	0x92, 0xd8, 0x5d, 0x58, 0xca, 0x36, 0x23, 0x3a, 0xf0, 0xa7, 0x16, 0x54, 0x5e, 0x24, 0xaf, 0x43,
+	0xb2, 0x02, 0x95, 0xe4, 0x72, 0xcc, 0x25, 0xa4, 0xbd, 0x4a, 0xc4, 0xd0, 0xd6, 0x06, 0x83, 0x88,
+	0xc6, 0xf1, 0xd1, 0xe5, 0x98, 0x3a, 0x4d, 0x8f, 0x17, 0x5c, 0x46, 0x47, 0xba, 0x30, 0x2b, 0xca,
+	0xd8, 0x60, 0xdd, 0x91, 0x45, 0x72, 0x07, 0xc0, 0x1b, 0x85, 0x93, 0x20, 0x71, 0x63, 0x2f, 0xc1,
+	0xa9, 0x2a, 0x3b, 0x1a, 0x84, 0xdc, 0x82, 0xfa, 0xf8, 0x95, 0x1b, 0xf7, 0x23, 0x7f, 0x9c, 0x20,
+	0xdb, 0xd4, 0x9d, 0x14, 0x40, 0xbe, 0x0a, 0xb5, 0x70, 0x92, 0x8c, 0x43, 0x3f, 0x48, 0x04, 0xab,
+	0xcc, 0x89, 0xbe, 0xec, 0x4f, 0x92, 0x03, 0x06, 0x76, 0x14, 0x01, 0xb9, 0x07, 0xad, 0x7e, 0x18,
+	0x9c, 0xf8, 0xd1, 0x88, 0x2b, 0x83, 0xee, 0x0c, 0xb6, 0x66, 0x02, 0xed, 0x7f, 0x55, 0x82, 0xc6,
+	0x51, 0xe4, 0x05, 0xb1, 0xd7, 0x67, 0x00, 0xd6, 0xf5, 0xe4, 0xb5, 0x7b, 0xe6, 0xc5, 0x67, 0x38,
+	0xda, 0xba, 0x23, 0x8b, 0x64, 0x09, 0x66, 0x78, 0x47, 0x71, 0x4c, 0x65, 0x47, 0x94, 0xc8, 0x07,
+	0x30, 0x1f, 0x4c, 0x46, 0xae, 0xd9, 0x56, 0x19, 0xb9, 0x25, 0x8f, 0x60, 0x13, 0x70, 0xcc, 0xd6,
+	0x9a, 0x37, 0xc1, 0x47, 0xa8, 0x41, 0x88, 0x0d, 0x4d, 0x51, 0xa2, 0xfe, 0xe9, 0x19, 0x1f, 0x66,
+	0xd5, 0x31, 0x60, 0xac, 0x8e, 0xc4, 0x1f, 0x51, 0x37, 0x4e, 0xbc, 0xd1, 0x58, 0x0c, 0x4b, 0x83,
+	0x20, 0x3e, 0x4c, 0xbc, 0xa1, 0x7b, 0x42, 0x69, 0xdc, 0x9d, 0x15, 0x78, 0x05, 0x21, 0xef, 0x41,
+	0x7b, 0x40, 0xe3, 0xc4, 0x15, 0x8b, 0x42, 0xe3, 0x6e, 0x0d, 0x45, 0x3f, 0x03, 0x65, 0xf5, 0x44,
+	0xde, 0x85, 0xcb, 0x26, 0x80, 0xbe, 0xee, 0xd6, 0x79, 0x5f, 0x53, 0x08, 0xe3, 0x9c, 0x67, 0x34,
+	0xd1, 0x66, 0x2f, 0x16, 0x1c, 0x6a, 0xef, 0x02, 0xd1, 0xc0, 0x9b, 0x34, 0xf1, 0xfc, 0x61, 0x4c,
+	0x3e, 0x82, 0x66, 0xa2, 0x11, 0xa3, 0x2a, 0x6c, 0x28, 0x76, 0xd2, 0x3e, 0x70, 0x0c, 0x3a, 0xfb,
+	0x0c, 0x6a, 0x4f, 0x29, 0xdd, 0xf5, 0x47, 0x7e, 0x42, 0x96, 0xa0, 0x7a, 0xe2, 0xbf, 0xa6, 0x9c,
+	0xe1, 0xcb, 0xdb, 0xd7, 0x1c, 0x5e, 0x24, 0xef, 0x00, 0xe0, 0x1f, 0xee, 0x48, 0x31, 0xd6, 0xf6,
+	0x35, 0xa7, 0x8e, 0xb0, 0xe7, 0x8c, 0xb3, 0x7a, 0x30, 0x3b, 0xa6, 0x51, 0x9f, 0xca, 0xf5, 0xdb,
+	0xbe, 0xe6, 0x48, 0xc0, 0xfa, 0x2c, 0x54, 0x87, 0xac, 0x76, 0xfb, 0x4f, 0xaa, 0xd0, 0x38, 0xa4,
+	0x81, 0x92, 0x34, 0x02, 0x15, 0x36, 0x27, 0x42, 0xba, 0xf0, 0x6f, 0xf2, 0x25, 0x68, 0xe0, 0x3c,
+	0xc5, 0x49, 0xe4, 0x07, 0xa7, 0x9c, 0xc1, 0xd7, 0x4b, 0x5d, 0xcb, 0x01, 0x06, 0x3e, 0x44, 0x28,
+	0xe9, 0x40, 0xd9, 0x1b, 0x49, 0x06, 0x67, 0x7f, 0x92, 0x1b, 0x50, 0xf3, 0x46, 0x09, 0xef, 0x5e,
+	0x13, 0xc1, 0xb3, 0xde, 0x28, 0xc1, 0xae, 0xbd, 0x0b, 0xcd, 0xb1, 0x77, 0x39, 0x62, 0xf2, 0xac,
+	0xb8, 0xa2, 0xe9, 0x34, 0x04, 0x6c, 0x9b, 0xb1, 0xc5, 0x2a, 0x2c, 0xe8, 0x24, 0xb2, 0xf1, 0xaa,
+	0x6a, 0x7c, 0x5e, 0xa3, 0x16, 0x7d, 0x78, 0x1f, 0xe6, 0xe4, 0x37, 0x11, 0x1f, 0x0f, 0xf2, 0x4a,
+	0xdd, 0x69, 0x0b, 0xb0, 0x1c, 0xe5, 0x7d, 0xe8, 0x9c, 0xf8, 0x81, 0x37, 0x74, 0xfb, 0xc3, 0xe4,
+	0xdc, 0x1d, 0xd0, 0x61, 0xe2, 0x21, 0xd7, 0x54, 0x9d, 0x36, 0xc2, 0x37, 0x86, 0xc9, 0xf9, 0x26,
+	0x83, 0x92, 0x0f, 0xa0, 0x7e, 0x42, 0xa9, 0x8b, 0x93, 0xd5, 0xad, 0x19, 0x12, 0x28, 0x57, 0xc8,
+	0xa9, 0x9d, 0xc8, 0xb5, 0xfa, 0x00, 0x3a, 0xe1, 0x24, 0x39, 0x0d, 0xfd, 0xe0, 0xd4, 0x65, 0x3a,
+	0xcf, 0xf5, 0x07, 0xc8, 0x45, 0x95, 0xf5, 0xd2, 0x23, 0xcb, 0x69, 0x4b, 0x1c, 0xd3, 0x3e, 0x3b,
+	0x03, 0xf2, 0x1e, 0xcc, 0x0d, 0xbd, 0x38, 0x71, 0xcf, 0xc2, 0xb1, 0x3b, 0x9e, 0x1c, 0xbf, 0xa2,
+	0x97, 0xdd, 0x16, 0x4e, 0x44, 0x8b, 0x81, 0xb7, 0xc3, 0xf1, 0x01, 0x02, 0xc9, 0x6d, 0x00, 0xec,
+	0x27, 0xef, 0x04, 0xdc, 0xb5, 0xee, 0xb7, 0x9c, 0x3a, 0x83, 0xf0, 0x46, 0xbf, 0x0f, 0x0b, 0xb8,
+	0x3c, 0xfd, 0x49, 0x9c, 0x84, 0x23, 0x97, 0xe9, 0xeb, 0x68, 0x10, 0x77, 0x1b, 0xc8, 0x6b, 0x5f,
+	0x11, 0x9d, 0xd5, 0xd6, 0x78, 0x65, 0x93, 0xc6, 0xc9, 0x06, 0x12, 0x3b, 0x9c, 0x96, 0x6d, 0xea,
+	0x97, 0xce, 0xfc, 0x20, 0x0b, 0x27, 0x1f, 0x00, 0xf1, 0x86, 0xc3, 0xf0, 0xc2, 0x8d, 0xe9, 0xf0,
+	0xc4, 0x15, 0x93, 0xd8, 0x6d, 0xdf, 0xb5, 0xee, 0xd7, 0x9c, 0x0e, 0x62, 0x0e, 0xe9, 0xf0, 0xe4,
+	0x80, 0xc3, 0xc9, 0x47, 0xd0, 0xc2, 0x8e, 0x9c, 0x50, 0x2f, 0x99, 0x44, 0x34, 0xee, 0xce, 0xdd,
+	0x2d, 0xdf, 0x6f, 0xaf, 0xce, 0xab, 0xf9, 0x42, 0xf0, 0xba, 0x9f, 0x38, 0x4d, 0x46, 0x27, 0xca,
+	0x71, 0x6f, 0x13, 0x96, 0x8a, 0xbb, 0xc4, 0x98, 0x8a, 0xcd, 0x0a, 0x63, 0xc6, 0x8a, 0xc3, 0xfe,
+	0x24, 0x8b, 0x50, 0x3d, 0xf7, 0x86, 0x13, 0x2a, 0xf4, 0x3a, 0x2f, 0x7c, 0x5c, 0x7a, 0x6c, 0xd9,
+	0x7f, 0x6c, 0x41, 0x93, 0x8f, 0x52, 0xd8, 0x23, 0xf7, 0xa0, 0x25, 0xb9, 0x81, 0x46, 0x51, 0x18,
+	0x09, 0xf5, 0x66, 0x02, 0xc9, 0x03, 0xe8, 0x48, 0xc0, 0x38, 0xa2, 0xfe, 0xc8, 0x3b, 0x95, 0x75,
+	0xe7, 0xe0, 0x64, 0x35, 0xad, 0x31, 0x0a, 0x27, 0x09, 0x15, 0x3b, 0x5f, 0x53, 0x0c, 0xd0, 0x61,
+	0x30, 0xc7, 0x24, 0x61, 0xea, 0xad, 0x80, 0xd5, 0x0d, 0x98, 0xfd, 0x77, 0x2c, 0x20, 0xac, 0xeb,
+	0x47, 0x21, 0xaf, 0x42, 0x70, 0x69, 0x56, 0x4a, 0xac, 0xb7, 0x96, 0x92, 0xd2, 0x55, 0x52, 0x62,
+	0x43, 0x95, 0xf7, 0xbe, 0x52, 0xd0, 0x7b, 0x8e, 0xfa, 0x4e, 0xa5, 0x56, 0xee, 0x54, 0xec, 0xff,
+	0x52, 0x86, 0xc5, 0x0d, 0xbe, 0x75, 0xaf, 0xf5, 0xfb, 0x74, 0xac, 0xe4, 0xe7, 0x1d, 0x68, 0x04,
+	0xe1, 0x80, 0x4a, 0xae, 0xe5, 0x1d, 0x03, 0x06, 0xd2, 0x58, 0xf6, 0xcc, 0xf3, 0x03, 0xde, 0x71,
+	0x3e, 0x9f, 0x75, 0x84, 0x60, 0xb7, 0xdf, 0x83, 0xb9, 0x31, 0x0d, 0x06, 0xba, 0x98, 0x70, 0xe3,
+	0xaa, 0x25, 0xc0, 0x42, 0x42, 0xde, 0x81, 0xc6, 0xc9, 0x84, 0xd3, 0x31, 0xe5, 0x52, 0x41, 0x3e,
+	0x00, 0x01, 0x5a, 0xe3, 0x3a, 0x66, 0x3c, 0x89, 0xcf, 0x10, 0x5b, 0x45, 0xec, 0x2c, 0x2b, 0x33,
+	0xd4, 0x6d, 0x80, 0xc1, 0x24, 0x4e, 0x84, 0xd4, 0xcc, 0x20, 0xb2, 0xce, 0x20, 0x5c, 0x6a, 0xbe,
+	0x06, 0x0b, 0x23, 0xef, 0xb5, 0x8b, 0xfc, 0xe3, 0xfa, 0x81, 0x7b, 0x32, 0xc4, 0xdd, 0x67, 0x16,
+	0xe9, 0x3a, 0x23, 0xef, 0xf5, 0xf7, 0x18, 0x66, 0x27, 0x78, 0x8a, 0x70, 0xa6, 0x5a, 0xa4, 0xd9,
+	0x13, 0xd1, 0x98, 0x46, 0xe7, 0x14, 0xb5, 0x41, 0x45, 0xd9, 0x36, 0x0e, 0x87, 0xb2, 0x1e, 0x8d,
+	0xd8, 0xb8, 0x93, 0x61, 0x9f, 0x8b, 0xbe, 0x33, 0x3b, 0xf2, 0x83, 0xed, 0x64, 0xd8, 0x27, 0xb7,
+	0x00, 0x98, 0x2e, 0x19, 0xd3, 0xc8, 0x7d, 0x75, 0x81, 0x72, 0x5c, 0x41, 0xdd, 0x71, 0x40, 0xa3,
+	0x4f, 0x2e, 0xc8, 0x4d, 0xa8, 0xf7, 0x63, 0x54, 0x46, 0xde, 0x65, 0xb7, 0x81, 0x42, 0x5e, 0xeb,
+	0xc7, 0x4c, 0x0d, 0x79, 0x97, 0x4c, 0x10, 0x59, 0x6f, 0x3d, 0x5c, 0x05, 0x3a, 0xc0, 0xea, 0x63,
+	0xd4, 0xaa, 0x2d, 0xec, 0xec, 0x9a, 0x40, 0xb0, 0x76, 0x62, 0xf2, 0x25, 0x68, 0xc9, 0xce, 0x9e,
+	0x0c, 0xbd, 0xd3, 0x18, 0xd5, 0x4a, 0xcb, 0x69, 0x0a, 0xe0, 0x53, 0x06, 0xb3, 0x5f, 0x72, 0x63,
+	0x4b, 0x5b, 0x5b, 0x21, 0x37, 0x6c, 0xdb, 0x47, 0x08, 0xae, 0x6b, 0xcd, 0x11, 0xa5, 0xa2, 0x45,
+	0x2b, 0x15, 0x2c, 0x9a, 0xfd, 0x73, 0x0b, 0x9a, 0xa2, 0x66, 0xb4, 0x50, 0xc8, 0x23, 0x20, 0x72,
+	0x15, 0x93, 0xd7, 0xfe, 0xc0, 0x3d, 0xbe, 0x4c, 0x68, 0xcc, 0x99, 0x66, 0xfb, 0x9a, 0x53, 0x80,
+	0x63, 0x7a, 0xd4, 0x80, 0xc6, 0x49, 0xc4, 0x79, 0x7a, 0xfb, 0x9a, 0x93, 0xc3, 0x30, 0x11, 0x63,
+	0x36, 0xd0, 0x24, 0x71, 0xfd, 0x60, 0x40, 0x5f, 0x23, 0x2b, 0xb5, 0x1c, 0x03, 0xb6, 0xde, 0x86,
+	0xa6, 0xfe, 0x9d, 0xfd, 0x63, 0xa8, 0x49, 0x0b, 0x0a, 0xad, 0x87, 0x4c, 0xbf, 0x1c, 0x0d, 0x42,
+	0x7a, 0x50, 0x33, 0x7b, 0xe1, 0xd4, 0x3e, 0x4f, 0xdb, 0xf6, 0xb7, 0xa0, 0xb3, 0xcb, 0x98, 0x28,
+	0x60, 0x4c, 0x2b, 0xcc, 0xc2, 0x25, 0x98, 0xd1, 0x84, 0xa7, 0xee, 0x88, 0x12, 0xdb, 0x7f, 0xcf,
+	0xc2, 0x38, 0x11, 0xed, 0xe0, 0xdf, 0xf6, 0x9f, 0x58, 0x40, 0xb6, 0xe2, 0xc4, 0x1f, 0x79, 0x09,
+	0x7d, 0x4a, 0x95, 0x7a, 0xd8, 0x87, 0x26, 0xab, 0xed, 0x28, 0x5c, 0xe3, 0x46, 0x1a, 0x37, 0x2e,
+	0xbe, 0x2a, 0xc4, 0x39, 0xff, 0xc1, 0x8a, 0x4e, 0xcd, 0x55, 0xbe, 0x51, 0x01, 0x93, 0xb6, 0xc4,
+	0x8b, 0x4e, 0x69, 0x82, 0x16, 0x9c, 0xb0, 0xff, 0x81, 0x83, 0x36, 0xc2, 0xe0, 0xa4, 0xf7, 0xdb,
+	0x30, 0x9f, 0xab, 0x43, 0xd7, 0xd1, 0xf5, 0x02, 0x1d, 0x5d, 0xd6, 0x75, 0x74, 0x1f, 0x16, 0x8c,
+	0x7e, 0x09, 0x8e, 0xeb, 0xc2, 0x2c, 0x13, 0x0c, 0x66, 0x28, 0x58, 0xdc, 0x50, 0x10, 0x45, 0xb2,
+	0x0a, 0x8b, 0x27, 0x94, 0x46, 0x5e, 0x82, 0x45, 0x14, 0x1d, 0xb6, 0x26, 0xa2, 0xe6, 0x42, 0x9c,
+	0xfd, 0x67, 0x16, 0xcc, 0x31, 0x6d, 0xfa, 0xdc, 0x0b, 0x2e, 0xe5, 0x5c, 0xed, 0x16, 0xce, 0xd5,
+	0x7d, 0x6d, 0x73, 0xd4, 0xa8, 0x3f, 0xef, 0x44, 0x95, 0xb3, 0x13, 0x45, 0xee, 0x42, 0xd3, 0xe8,
+	0x6e, 0x95, 0x5b, 0xa4, 0xb1, 0x97, 0x1c, 0xd0, 0x68, 0xfd, 0x32, 0xa1, 0xbf, 0xfa, 0x54, 0xbe,
+	0x07, 0x9d, 0xb4, 0xdb, 0x62, 0x1e, 0x09, 0x54, 0x18, 0x63, 0x8a, 0x0a, 0xf0, 0x6f, 0xfb, 0xef,
+	0x5b, 0x9c, 0x70, 0x23, 0xf4, 0x95, 0xb5, 0xca, 0x08, 0x99, 0xd1, 0x2b, 0x09, 0xd9, 0xdf, 0x53,
+	0xad, 0xfd, 0x5f, 0x7d, 0xb0, 0x4c, 0x27, 0xc6, 0x34, 0x18, 0xb8, 0xde, 0x70, 0x88, 0x8a, 0xb8,
+	0xe6, 0xcc, 0xb2, 0xf2, 0xda, 0x70, 0x68, 0xbf, 0x0f, 0xf3, 0x5a, 0xef, 0xae, 0x18, 0xc7, 0x1e,
+	0x90, 0x5d, 0x3f, 0x4e, 0x5e, 0x04, 0xf1, 0x58, 0x33, 0xe4, 0x6e, 0x42, 0x9d, 0x69, 0x5b, 0xd6,
+	0x33, 0x2e, 0xb9, 0x55, 0x87, 0xa9, 0x5f, 0xd6, 0xaf, 0x18, 0x91, 0xde, 0x6b, 0x81, 0x2c, 0x09,
+	0xa4, 0xf7, 0x1a, 0x91, 0xf6, 0x63, 0x58, 0x30, 0xea, 0x13, 0x4d, 0xbf, 0x0b, 0xd5, 0x49, 0xf2,
+	0x3a, 0x94, 0xa6, 0x7a, 0x43, 0x70, 0x08, 0x73, 0x0a, 0x1d, 0x8e, 0xb1, 0x9f, 0xc0, 0xfc, 0x1e,
+	0xbd, 0x10, 0x82, 0x2c, 0x3b, 0xf2, 0xde, 0x1b, 0x1d, 0x46, 0xc4, 0xdb, 0x2b, 0x40, 0xf4, 0x8f,
+	0x53, 0x01, 0x90, 0xee, 0xa3, 0x65, 0xb8, 0x8f, 0xf6, 0x7b, 0x40, 0x0e, 0xfd, 0xd3, 0xe0, 0x39,
+	0x8d, 0x63, 0xef, 0x54, 0x89, 0x7e, 0x07, 0xca, 0xa3, 0xf8, 0x54, 0xa8, 0x2a, 0xf6, 0xa7, 0xfd,
+	0x75, 0x58, 0x30, 0xe8, 0x44, 0xc5, 0xb7, 0xa0, 0x1e, 0xfb, 0xa7, 0x01, 0x1a, 0x5a, 0xa2, 0xea,
+	0x14, 0x60, 0x3f, 0x85, 0xc5, 0xef, 0xd1, 0xc8, 0x3f, 0xb9, 0x7c, 0x53, 0xf5, 0x66, 0x3d, 0xa5,
+	0x6c, 0x3d, 0x5b, 0x70, 0x3d, 0x53, 0x8f, 0x68, 0x9e, 0xb3, 0xaf, 0x58, 0xc9, 0x9a, 0xc3, 0x0b,
+	0x9a, 0xee, 0x2b, 0xe9, 0xba, 0xcf, 0x7e, 0x01, 0x64, 0x23, 0x0c, 0x02, 0xda, 0x4f, 0x0e, 0x28,
+	0x8d, 0xd2, 0xc8, 0x55, 0xca, 0xab, 0x8d, 0xd5, 0x65, 0x31, 0xb3, 0x59, 0x85, 0x2a, 0x98, 0x98,
+	0x40, 0x65, 0x4c, 0xa3, 0x11, 0x56, 0x5c, 0x73, 0xf0, 0x6f, 0xfb, 0x3a, 0x2c, 0x18, 0xd5, 0x0a,
+	0x5f, 0xff, 0x43, 0xb8, 0xbe, 0xe9, 0xc7, 0xfd, 0x7c, 0x83, 0x5d, 0x98, 0x1d, 0x4f, 0x8e, 0xdd,
+	0x54, 0x12, 0x65, 0x91, 0xb9, 0x7f, 0xd9, 0x4f, 0x44, 0x65, 0x7f, 0xc3, 0x82, 0xca, 0xf6, 0xd1,
+	0xee, 0x06, 0xdb, 0x2b, 0xfc, 0xa0, 0x1f, 0x8e, 0x98, 0x15, 0xc6, 0x07, 0xad, 0xca, 0x53, 0x25,
+	0xec, 0x16, 0xd4, 0xd1, 0x78, 0x63, 0x1e, 0xaf, 0xb0, 0x83, 0x52, 0x00, 0xf3, 0xb6, 0xe9, 0xeb,
+	0xb1, 0x1f, 0xa1, 0x3b, 0x2d, 0x9d, 0xe4, 0x0a, 0x6e, 0x33, 0x79, 0x84, 0xfd, 0xef, 0x66, 0x61,
+	0x56, 0x6c, 0xbe, 0x7c, 0x23, 0x4f, 0xfc, 0x73, 0x9a, 0x6e, 0xe4, 0xac, 0xc4, 0x0c, 0xe3, 0x88,
+	0x8e, 0xc2, 0x44, 0xd9, 0x6f, 0x7c, 0x19, 0x4c, 0x20, 0x46, 0x13, 0x84, 0x11, 0xc1, 0xe3, 0x0f,
+	0x65, 0x4e, 0x65, 0x00, 0xc9, 0x2d, 0x98, 0x95, 0xc6, 0x40, 0x45, 0x39, 0x3a, 0x12, 0xc4, 0x66,
+	0xa3, 0xef, 0x8d, 0xbd, 0xbe, 0x9f, 0x5c, 0x0a, 0xb5, 0xa0, 0xca, 0xac, 0xfe, 0x61, 0xd8, 0xf7,
+	0x86, 0xee, 0xb1, 0x37, 0xf4, 0x82, 0x3e, 0x95, 0xd1, 0x0a, 0x03, 0xc8, 0x3c, 0x77, 0xd1, 0x2d,
+	0x49, 0xc6, 0xbd, 0xfb, 0x0c, 0x94, 0xed, 0xe1, 0xfd, 0x70, 0x34, 0xf2, 0x99, 0xf7, 0xc1, 0x4d,
+	0xb3, 0xb2, 0xa3, 0x41, 0x78, 0x6c, 0x04, 0x4b, 0x17, 0x7c, 0x06, 0xeb, 0x32, 0x36, 0xa2, 0x01,
+	0x59, 0x2d, 0x19, 0x0b, 0xad, 0xec, 0x68, 0x10, 0xb6, 0x16, 0x93, 0x20, 0xa6, 0x49, 0x32, 0xa4,
+	0x03, 0xd5, 0xa1, 0x06, 0x92, 0xe5, 0x11, 0xe4, 0x11, 0x2c, 0xf0, 0x18, 0x44, 0xec, 0x25, 0x61,
+	0x7c, 0xe6, 0xc7, 0x6e, 0xcc, 0xdc, 0x27, 0xee, 0x0b, 0x17, 0xa1, 0xc8, 0x63, 0x58, 0xce, 0x80,
+	0x23, 0xda, 0xa7, 0xfe, 0x39, 0x1d, 0xa0, 0x09, 0x57, 0x76, 0xa6, 0xa1, 0xc9, 0x5d, 0x68, 0x04,
+	0x93, 0x91, 0x3b, 0x19, 0x0f, 0x3c, 0x66, 0xc4, 0xb4, 0xd1, 0xb8, 0xd4, 0x41, 0xe4, 0x43, 0x90,
+	0x76, 0x9a, 0xb0, 0x1e, 0xe7, 0x0c, 0x0d, 0xc7, 0xb8, 0xd7, 0x31, 0x29, 0x18, 0x63, 0xa6, 0x26,
+	0x69, 0x47, 0xf8, 0x9d, 0x12, 0x80, 0x72, 0x12, 0xf9, 0xe7, 0x5e, 0x42, 0xbb, 0xf3, 0x5c, 0xa9,
+	0x8b, 0x22, 0xfb, 0xce, 0x0f, 0xfc, 0xc4, 0xf7, 0x92, 0x30, 0xea, 0x12, 0xc4, 0xa5, 0x00, 0x36,
+	0x89, 0xc8, 0x1f, 0x71, 0xe2, 0x25, 0x93, 0x58, 0x58, 0xa8, 0x0b, 0xc8, 0x5c, 0x79, 0x04, 0xf9,
+	0x08, 0x96, 0x38, 0x47, 0x20, 0x4a, 0xd8, 0xde, 0x68, 0x2a, 0x2c, 0xe2, 0x8c, 0x4c, 0xc1, 0xb2,
+	0xa9, 0x14, 0x2c, 0x92, 0xfb, 0xf0, 0x3a, 0x9f, 0xca, 0x29, 0x68, 0xd6, 0x3f, 0xd6, 0x03, 0xbf,
+	0xef, 0x0a, 0x0a, 0x26, 0x22, 0x4b, 0x38, 0x8a, 0x3c, 0x82, 0xb1, 0xf8, 0xd0, 0x3f, 0xa1, 0x89,
+	0x3f, 0xa2, 0xdd, 0x65, 0xce, 0xe2, 0xb2, 0xcc, 0x04, 0x70, 0x32, 0x46, 0x4c, 0x97, 0x0b, 0x3c,
+	0x2f, 0x21, 0x33, 0x0e, 0xc3, 0x98, 0xca, 0xc8, 0x53, 0xf7, 0x86, 0x10, 0x2d, 0x1d, 0x68, 0xff,
+	0xa1, 0xc5, 0xb7, 0x28, 0x21, 0xce, 0xb1, 0xe6, 0x7c, 0x71, 0x41, 0x76, 0xc3, 0x60, 0x78, 0x29,
+	0x64, 0x1b, 0x38, 0x68, 0x3f, 0x18, 0x5e, 0x32, 0xf3, 0xdf, 0x0f, 0x74, 0x12, 0xae, 0x0d, 0x9b,
+	0x12, 0x88, 0x44, 0xef, 0x40, 0x63, 0x3c, 0x39, 0x1e, 0xfa, 0x7d, 0x4e, 0x52, 0xe6, 0xb5, 0x70,
+	0x10, 0x12, 0x30, 0xef, 0x93, 0xaf, 0x27, 0xa7, 0xa8, 0x20, 0x45, 0x43, 0xc0, 0x18, 0x89, 0xbd,
+	0x0e, 0x8b, 0x66, 0x07, 0x85, 0xda, 0x7f, 0x00, 0x35, 0xa1, 0x25, 0x64, 0x18, 0xa2, 0xad, 0x05,
+	0x87, 0x99, 0xb3, 0xa4, 0xf0, 0xf6, 0xbf, 0xae, 0xc0, 0x82, 0x80, 0x6e, 0xb0, 0xe1, 0x1f, 0x4e,
+	0x46, 0x23, 0x2f, 0x2a, 0x50, 0x3f, 0xd6, 0x1b, 0xd4, 0x4f, 0x29, 0xaf, 0x7e, 0xee, 0x18, 0x5e,
+	0x28, 0xd7, 0x5f, 0x1a, 0x84, 0xdc, 0x87, 0x39, 0x36, 0xe5, 0xdc, 0x29, 0xd0, 0xe3, 0x93, 0x59,
+	0x70, 0x5e, 0x65, 0x56, 0x8b, 0x54, 0xa6, 0xae, 0xee, 0x66, 0x32, 0xea, 0xce, 0x86, 0x26, 0x5f,
+	0x5e, 0xa1, 0xc1, 0x67, 0x85, 0x4b, 0xa6, 0xc1, 0x58, 0x7f, 0xb2, 0xca, 0x85, 0x6b, 0xb2, 0xb9,
+	0x22, 0xd5, 0xe2, 0x8f, 0x28, 0xee, 0x10, 0x1a, 0x75, 0x5d, 0xa8, 0x96, 0x3c, 0x8a, 0x3c, 0x05,
+	0xe0, 0x6d, 0xa1, 0x99, 0x02, 0x68, 0xa6, 0xbc, 0x67, 0xae, 0x8a, 0x3e, 0xff, 0x2b, 0xac, 0x30,
+	0x89, 0x28, 0x9a, 0x2e, 0xda, 0x97, 0xf6, 0xdf, 0xb2, 0xa0, 0xa1, 0xe1, 0xc8, 0x75, 0x98, 0xdf,
+	0xd8, 0xdf, 0x3f, 0xd8, 0x72, 0xd6, 0x8e, 0x76, 0xbe, 0xb7, 0xe5, 0x6e, 0xec, 0xee, 0x1f, 0x6e,
+	0x75, 0xae, 0x31, 0xf0, 0xee, 0xfe, 0xc6, 0xda, 0xae, 0xfb, 0x74, 0xdf, 0xd9, 0x90, 0x60, 0x8b,
+	0x2c, 0x01, 0x71, 0xb6, 0x9e, 0xef, 0x1f, 0x6d, 0x19, 0xf0, 0x12, 0xe9, 0x40, 0x73, 0xdd, 0xd9,
+	0x5a, 0xdb, 0xd8, 0x16, 0x90, 0x32, 0x59, 0x84, 0xce, 0xd3, 0x17, 0x7b, 0x9b, 0x3b, 0x7b, 0xcf,
+	0xdc, 0x8d, 0xb5, 0xbd, 0x8d, 0xad, 0xdd, 0xad, 0xcd, 0x4e, 0x85, 0xb4, 0xa0, 0xbe, 0xb6, 0xbe,
+	0xb6, 0xb7, 0xb9, 0xbf, 0xb7, 0xb5, 0xd9, 0xa9, 0xda, 0xff, 0xcd, 0x82, 0xeb, 0xd8, 0xeb, 0x41,
+	0x56, 0x48, 0xee, 0x42, 0xa3, 0x1f, 0x86, 0x63, 0xe6, 0x1e, 0xa4, 0x1b, 0xa0, 0x0e, 0x62, 0x02,
+	0xc0, 0x55, 0xc7, 0x49, 0x18, 0xf5, 0xa9, 0x90, 0x11, 0x40, 0xd0, 0x53, 0x06, 0x61, 0x02, 0x20,
+	0x96, 0x97, 0x53, 0x70, 0x11, 0x69, 0x70, 0x18, 0x27, 0x59, 0x82, 0x99, 0xe3, 0x88, 0x7a, 0xfd,
+	0x33, 0x21, 0x1d, 0xa2, 0x44, 0xbe, 0x92, 0xfa, 0xaf, 0x7d, 0x36, 0xfb, 0x43, 0x3a, 0x40, 0x8e,
+	0xa9, 0x39, 0x73, 0x02, 0xbe, 0x21, 0xc0, 0x4c, 0x57, 0x7a, 0xc7, 0x5e, 0x30, 0x08, 0x03, 0x3a,
+	0x10, 0xc6, 0x71, 0x0a, 0xb0, 0x0f, 0x60, 0x29, 0x3b, 0x3e, 0x21, 0x63, 0x1f, 0x69, 0x32, 0xc6,
+	0x6d, 0xd5, 0xde, 0xf4, 0xd5, 0xd4, 0xe4, 0xed, 0xcf, 0xca, 0x50, 0x61, 0xa6, 0xcb, 0x74, 0x33,
+	0x47, 0xb7, 0x46, 0xcb, 0xb9, 0x64, 0x06, 0xba, 0xc4, 0x7c, 0x23, 0x13, 0xe1, 0x98, 0x14, 0x92,
+	0xe2, 0x23, 0xda, 0x3f, 0x17, 0x01, 0x19, 0x0d, 0xc2, 0x04, 0x84, 0xb9, 0x0a, 0xf8, 0xb5, 0x10,
+	0x10, 0x59, 0x96, 0x38, 0xfc, 0x72, 0x36, 0xc5, 0xe1, 0x77, 0x5d, 0x98, 0xf5, 0x83, 0xe3, 0x70,
+	0x12, 0x0c, 0x50, 0x20, 0x6a, 0x8e, 0x2c, 0x62, 0xfa, 0x04, 0x05, 0x95, 0x69, 0x59, 0xce, 0xfe,
+	0x29, 0x80, 0xac, 0x42, 0x3d, 0xbe, 0x0c, 0xfa, 0x3a, 0xcf, 0x2f, 0x8a, 0x59, 0x62, 0x73, 0xb0,
+	0x72, 0x78, 0x19, 0xf4, 0x91, 0xc3, 0x53, 0x32, 0xf2, 0x4d, 0xa8, 0xa9, 0x00, 0x26, 0x57, 0x5e,
+	0x37, 0xf4, 0x4f, 0x64, 0xd4, 0x92, 0xfb, 0x85, 0x8a, 0xb4, 0xf7, 0x09, 0xb4, 0x0c, 0x94, 0xee,
+	0xcc, 0xb5, 0xb8, 0x33, 0x77, 0x4f, 0x77, 0xe6, 0x52, 0x9d, 0x28, 0x3e, 0xd3, 0x9d, 0xbb, 0xdf,
+	0x86, 0x9a, 0xec, 0x1a, 0x13, 0x8d, 0x17, 0x7b, 0x9f, 0xec, 0xed, 0xbf, 0xdc, 0x73, 0x0f, 0xbf,
+	0xbf, 0xb7, 0xd1, 0xb9, 0x46, 0xe6, 0xa0, 0xb1, 0xb6, 0x81, 0xd2, 0x86, 0x00, 0x8b, 0x91, 0x1c,
+	0xac, 0x1d, 0x1e, 0x2a, 0x48, 0xc9, 0x26, 0xd0, 0x61, 0x9a, 0x99, 0xf5, 0x58, 0xa5, 0x28, 0x3e,
+	0x82, 0x79, 0x0d, 0x96, 0xfa, 0x3b, 0x63, 0x06, 0xc8, 0xf8, 0x3b, 0x68, 0xdc, 0x72, 0x8c, 0xbd,
+	0x0c, 0xd7, 0x59, 0x71, 0xeb, 0x9c, 0x06, 0xc9, 0xe1, 0xe4, 0x98, 0x67, 0xa6, 0xfc, 0x30, 0xb0,
+	0xff, 0xba, 0x05, 0x75, 0x85, 0xb9, 0x82, 0x9f, 0x64, 0x32, 0xad, 0x84, 0x0b, 0xd0, 0xd3, 0x9a,
+	0xc0, 0x2f, 0x57, 0xf0, 0x5f, 0xc3, 0x47, 0xaa, 0x2b, 0x10, 0x1b, 0xec, 0xc1, 0xd6, 0x96, 0xe3,
+	0xee, 0xef, 0xed, 0xee, 0xec, 0x31, 0xcd, 0xc2, 0x06, 0x8b, 0x80, 0xa7, 0x4f, 0x11, 0x62, 0xd9,
+	0x1d, 0x68, 0x3f, 0xa3, 0xc9, 0x4e, 0x70, 0x12, 0xca, 0xa1, 0xfe, 0xbf, 0x2a, 0xcc, 0x29, 0x50,
+	0xea, 0x63, 0x9d, 0xd3, 0x28, 0xf6, 0xc3, 0x00, 0xad, 0xa3, 0xba, 0x23, 0x8b, 0x4c, 0xed, 0xfa,
+	0x03, 0x1a, 0x24, 0x7e, 0x72, 0xe9, 0x1a, 0x41, 0x99, 0x2c, 0x98, 0xf9, 0x33, 0xde, 0xd0, 0xf7,
+	0x64, 0x92, 0x8f, 0x17, 0x18, 0xb4, 0x1f, 0x0e, 0xc3, 0x08, 0xcd, 0xa0, 0xba, 0xc3, 0x0b, 0x64,
+	0x15, 0x16, 0x99, 0xf9, 0xa5, 0x87, 0xcc, 0x50, 0x58, 0x79, 0x84, 0xa8, 0x10, 0xc7, 0xd4, 0x3a,
+	0x83, 0x8b, 0xbd, 0x5b, 0x7d, 0xc2, 0xad, 0xfd, 0x22, 0x14, 0xf9, 0x06, 0x5c, 0x67, 0x60, 0xb5,
+	0xdf, 0xab, 0x6f, 0xe6, 0xf0, 0x9b, 0x62, 0x24, 0x93, 0x1a, 0xde, 0x3e, 0x5b, 0xf9, 0x2a, 0x37,
+	0xec, 0x14, 0x20, 0x97, 0x91, 0x9b, 0xe1, 0x5b, 0x55, 0x36, 0x23, 0xa7, 0x65, 0xf5, 0x6a, 0xb9,
+	0xac, 0xde, 0x37, 0xe0, 0xfa, 0x31, 0x8d, 0x13, 0xf7, 0x8c, 0x7a, 0x03, 0x1a, 0xa1, 0x34, 0xf2,
+	0xe4, 0x1d, 0xb7, 0x63, 0x8b, 0x91, 0xb8, 0x01, 0x5e, 0x06, 0x7d, 0x3a, 0x70, 0x93, 0xd0, 0xc5,
+	0x8d, 0x1a, 0x65, 0xba, 0xe6, 0x64, 0xc1, 0x26, 0xe5, 0x69, 0xe4, 0x8d, 0xcf, 0x84, 0xa1, 0x99,
+	0x05, 0x33, 0x13, 0x21, 0xa1, 0x71, 0x12, 0x50, 0x9e, 0x3a, 0xa9, 0x61, 0x58, 0x5c, 0x82, 0xc8,
+	0x3d, 0x98, 0xc1, 0x0a, 0xe3, 0x6e, 0x07, 0x05, 0xa0, 0x99, 0x2a, 0x51, 0x3f, 0x70, 0x04, 0x8e,
+	0xb9, 0x95, 0x93, 0xc8, 0x8f, 0xbb, 0x4d, 0xcc, 0x1a, 0xe2, 0xdf, 0xe4, 0xdb, 0x9a, 0x9e, 0x58,
+	0xc0, 0x6f, 0xef, 0x89, 0x6f, 0x33, 0x9c, 0xf7, 0x6b, 0x51, 0x19, 0xdf, 0xa9, 0xd4, 0x1a, 0x9d,
+	0xa6, 0xfd, 0x1b, 0x50, 0xc5, 0x9e, 0x23, 0x4f, 0xe2, 0xfc, 0x59, 0x82, 0x27, 0x11, 0xda, 0x85,
+	0xd9, 0x80, 0x26, 0x17, 0x61, 0xf4, 0x4a, 0xa6, 0xa9, 0x45, 0xd1, 0xfe, 0x29, 0xfa, 0xde, 0x2a,
+	0x6d, 0xfb, 0x02, 0x9d, 0x06, 0x72, 0x13, 0xea, 0x7c, 0x4d, 0xe3, 0x33, 0x4f, 0x84, 0x03, 0x6a,
+	0x08, 0x38, 0x3c, 0xf3, 0xd8, 0xfe, 0x68, 0xb0, 0x09, 0x8f, 0xb0, 0x34, 0x10, 0xb6, 0xcd, 0xb9,
+	0xe4, 0x1e, 0xb4, 0x65, 0x42, 0x38, 0x76, 0x87, 0xf4, 0x24, 0x91, 0xf1, 0xd1, 0x60, 0x32, 0xc2,
+	0x30, 0xcc, 0x2e, 0x3d, 0x49, 0xec, 0x3d, 0x98, 0x17, 0x7b, 0xd6, 0xfe, 0x98, 0xca, 0xa6, 0x7f,
+	0xb3, 0xc8, 0xfe, 0x6b, 0xac, 0x2e, 0x98, 0x9b, 0x1c, 0x4f, 0x81, 0x9b, 0x94, 0xb6, 0x03, 0x44,
+	0xdf, 0x03, 0x45, 0x85, 0xc2, 0x00, 0x93, 0x11, 0x60, 0x31, 0x1c, 0x03, 0xc6, 0xe6, 0x27, 0x9e,
+	0xf4, 0xfb, 0x32, 0x8d, 0x5f, 0x73, 0x64, 0xd1, 0xfe, 0x4f, 0x16, 0x2c, 0x60, 0x6d, 0xd2, 0x82,
+	0x15, 0x76, 0xc6, 0xe3, 0xcf, 0xd1, 0x4d, 0x19, 0x7f, 0xe7, 0x51, 0xe7, 0x45, 0xa8, 0xea, 0x96,
+	0x07, 0x2f, 0x7c, 0xfe, 0x68, 0x5b, 0x25, 0x17, 0x6d, 0x7b, 0x00, 0x9d, 0x01, 0x1d, 0xfa, 0x78,
+	0x94, 0x43, 0xee, 0xe3, 0xdc, 0x5c, 0xcd, 0xc1, 0xed, 0xbf, 0x6b, 0xc1, 0x3c, 0x37, 0x14, 0xd0,
+	0xe7, 0x12, 0x53, 0xf5, 0x97, 0xa4, 0x7f, 0x22, 0x14, 0x94, 0x18, 0x54, 0xba, 0x75, 0x22, 0x94,
+	0x13, 0x6f, 0x5f, 0x73, 0x4c, 0x62, 0xf2, 0x04, 0xad, 0xee, 0xc0, 0x45, 0x68, 0xc1, 0xe1, 0x10,
+	0x73, 0x5d, 0xb6, 0xaf, 0x39, 0x1a, 0xf9, 0x7a, 0x8d, 0xb9, 0x4c, 0x0c, 0x6e, 0x3f, 0x83, 0x96,
+	0xd1, 0x90, 0x11, 0x15, 0x6c, 0xf2, 0xa8, 0x60, 0x2e, 0xfc, 0x5e, 0x2a, 0x08, 0xbf, 0xff, 0x7e,
+	0x05, 0x08, 0x63, 0xac, 0xcc, 0xca, 0xdd, 0x35, 0x73, 0x58, 0xf2, 0x9c, 0x48, 0x0a, 0x22, 0xab,
+	0x40, 0xb4, 0xa2, 0xcc, 0xad, 0x95, 0x55, 0x6e, 0xad, 0x00, 0xcb, 0xb4, 0xbe, 0xb0, 0x2a, 0x55,
+	0xde, 0x0a, 0x23, 0x3e, 0x7c, 0x99, 0x0a, 0x71, 0xcc, 0xf2, 0xc1, 0x24, 0x16, 0xf3, 0x4d, 0x45,
+	0x94, 0x44, 0x96, 0xb3, 0xfc, 0x30, 0xf3, 0x46, 0x7e, 0x98, 0xcd, 0xf1, 0x83, 0xe6, 0xa7, 0xd7,
+	0x4c, 0x3f, 0xfd, 0x1e, 0xb4, 0x64, 0xae, 0x8a, 0xa7, 0xe9, 0x45, 0x50, 0xc4, 0x00, 0x32, 0x7e,
+	0x92, 0xae, 0xb2, 0x0a, 0x06, 0xf0, 0x24, 0x74, 0x0e, 0xce, 0x36, 0x96, 0x34, 0x1e, 0xdb, 0xc0,
+	0xce, 0xa6, 0x00, 0xf4, 0xac, 0x19, 0x97, 0xb8, 0x93, 0x40, 0x9c, 0x11, 0xa1, 0x03, 0x0c, 0x87,
+	0x30, 0xcf, 0x3a, 0x8b, 0xc8, 0x7b, 0xc9, 0xad, 0x02, 0x2f, 0x99, 0x7c, 0x94, 0x26, 0x76, 0xe2,
+	0x33, 0x7f, 0x84, 0x7b, 0x7b, 0x7a, 0xc4, 0xe2, 0x29, 0x47, 0x1d, 0x9e, 0xf9, 0x23, 0xc7, 0xa0,
+	0xb3, 0x7f, 0x61, 0x41, 0x87, 0x71, 0x85, 0xc1, 0xf8, 0x1f, 0x03, 0xca, 0xe8, 0x5b, 0xf2, 0xbd,
+	0x41, 0x4b, 0x1e, 0x43, 0x1d, 0xcb, 0xe1, 0x98, 0x06, 0x82, 0xeb, 0xbb, 0x26, 0xd7, 0xa7, 0xda,
+	0x6d, 0xfb, 0x9a, 0x93, 0x12, 0xb3, 0xbd, 0x2c, 0x9b, 0x58, 0xe3, 0x59, 0xe2, 0x2c, 0x58, 0x93,
+	0x8e, 0x6d, 0x80, 0x4f, 0xe8, 0xe5, 0x6e, 0xd8, 0xc7, 0x90, 0xca, 0x6d, 0x00, 0xc6, 0x83, 0x27,
+	0xde, 0xc8, 0x17, 0x11, 0x81, 0xaa, 0x53, 0x7f, 0x45, 0x2f, 0x9f, 0x22, 0x80, 0xa9, 0x71, 0x86,
+	0x4e, 0x45, 0xa4, 0xea, 0xd4, 0x5e, 0xd1, 0xcb, 0x1d, 0x14, 0x0f, 0x17, 0x5a, 0x9f, 0xd0, 0xcb,
+	0x4d, 0xca, 0xed, 0xba, 0x30, 0x22, 0x36, 0xb4, 0x22, 0xef, 0x82, 0x59, 0x6e, 0x46, 0x46, 0xac,
+	0x11, 0x79, 0x17, 0x9f, 0xd0, 0xcb, 0x75, 0x4c, 0x89, 0x3d, 0x80, 0x59, 0x86, 0x1f, 0x86, 0x7d,
+	0xb1, 0x33, 0xc9, 0x24, 0x7f, 0xda, 0x29, 0x67, 0xe6, 0x15, 0xfe, 0x6d, 0xff, 0x07, 0x0b, 0x5a,
+	0x6c, 0x06, 0x50, 0xed, 0xb1, 0x95, 0x90, 0x67, 0x45, 0xac, 0xf4, 0xac, 0xc8, 0xaa, 0xd0, 0x19,
+	0x5c, 0x87, 0x96, 0xa6, 0xeb, 0x50, 0x9c, 0x36, 0xae, 0x40, 0x3f, 0x84, 0x3a, 0x17, 0x27, 0x26,
+	0xbe, 0x65, 0x63, 0xa5, 0x8c, 0x01, 0x39, 0x35, 0x24, 0xfb, 0x84, 0xa7, 0xa5, 0xb5, 0x98, 0x0e,
+	0x9f, 0xe4, 0x3a, 0x87, 0x30, 0x74, 0x41, 0x86, 0xb3, 0x5a, 0x94, 0xe1, 0x7c, 0x01, 0x0d, 0x8d,
+	0xb1, 0xc8, 0xb7, 0x78, 0x6e, 0x98, 0x77, 0x9e, 0x73, 0xa1, 0xc9, 0x38, 0xc6, 0xe8, 0x51, 0x61,
+	0xea, 0x80, 0xf5, 0x19, 0xa8, 0x20, 0x4b, 0x3e, 0x81, 0x79, 0xad, 0x5a, 0xee, 0x21, 0x16, 0xf5,
+	0xc9, 0x2a, 0xea, 0xd3, 0x1f, 0x58, 0xb0, 0x28, 0xbe, 0xc6, 0x73, 0x45, 0x3e, 0xdb, 0xc6, 0x9f,
+	0xc7, 0xa7, 0x6c, 0x23, 0x65, 0xb5, 0xbb, 0x11, 0x3d, 0xf5, 0xe3, 0x84, 0xca, 0x40, 0x7a, 0x81,
+	0x84, 0x30, 0x96, 0x66, 0xa4, 0x8e, 0xa0, 0x24, 0x4f, 0xa0, 0x81, 0x9f, 0x72, 0x1f, 0x56, 0x2c,
+	0x4b, 0x37, 0xff, 0x21, 0xef, 0x2a, 0xd3, 0xe4, 0xb1, 0x2a, 0xad, 0xd7, 0x61, 0x36, 0x89, 0xfc,
+	0xd3, 0x53, 0x1a, 0xd9, 0x4b, 0xaa, 0x6b, 0x4c, 0xda, 0xe8, 0x61, 0x42, 0xc7, 0xcc, 0x38, 0x62,
+	0x9c, 0xd1, 0x10, 0x42, 0xf5, 0x4b, 0x07, 0xcf, 0x7b, 0xda, 0x09, 0x39, 0xee, 0xad, 0xa6, 0x07,
+	0xe2, 0xee, 0xc3, 0xdc, 0x88, 0x19, 0x4a, 0xcc, 0x82, 0x37, 0x02, 0xe7, 0x59, 0x30, 0x33, 0xbc,
+	0xd1, 0x6e, 0x89, 0xdd, 0xc4, 0x1f, 0xba, 0x12, 0x2b, 0xce, 0xa2, 0x15, 0xa1, 0xd8, 0xf6, 0x1d,
+	0x27, 0xde, 0x29, 0x15, 0xd6, 0x31, 0x2f, 0xd8, 0x5d, 0x58, 0x3a, 0x48, 0x97, 0x45, 0x0b, 0x48,
+	0xd8, 0xff, 0xac, 0x05, 0xcb, 0x39, 0x94, 0x3a, 0x39, 0x2b, 0xa2, 0xc1, 0x43, 0x7f, 0x74, 0x1c,
+	0xaa, 0x68, 0x8e, 0xa5, 0x07, 0x8a, 0x0d, 0x14, 0x39, 0x85, 0xeb, 0x92, 0x2b, 0x98, 0x0a, 0x49,
+	0xcd, 0xfe, 0x12, 0x5a, 0xa2, 0x1f, 0x9a, 0x1a, 0x2b, 0xdb, 0xa0, 0x84, 0xeb, 0xbb, 0x62, 0x71,
+	0x7d, 0xe4, 0x0c, 0xba, 0x8a, 0xfd, 0x84, 0xa5, 0xa4, 0x79, 0x32, 0xac, 0xad, 0x0f, 0xde, 0xd0,
+	0x96, 0x11, 0xbf, 0x70, 0xa6, 0xd6, 0x46, 0x2e, 0xe1, 0x8e, 0xc4, 0xa1, 0x29, 0x94, 0x6f, 0xaf,
+	0xf2, 0x56, 0x63, 0xc3, 0xc8, 0x8c, 0xd9, 0xe8, 0x1b, 0x2a, 0x26, 0x3f, 0x86, 0xa5, 0x0b, 0xcf,
+	0x4f, 0x64, 0xb7, 0x34, 0x2f, 0xaa, 0x8a, 0x4d, 0xae, 0xbe, 0xa1, 0xc9, 0x97, 0xfc, 0x63, 0xc3,
+	0x3e, 0x9c, 0x52, 0x63, 0xef, 0x17, 0x25, 0x68, 0x9b, 0xf5, 0x30, 0x36, 0x15, 0x5a, 0x49, 0x1a,
+	0x14, 0xd2, 0xff, 0xcc, 0x80, 0xf3, 0x41, 0xd1, 0x52, 0x51, 0x50, 0x54, 0x0f, 0x43, 0x96, 0xdf,
+	0x94, 0x75, 0xa9, 0xbc, 0x5d, 0xd6, 0xa5, 0x5a, 0x98, 0x75, 0x99, 0x1e, 0x9c, 0x9f, 0xf9, 0x65,
+	0x83, 0xf3, 0xb3, 0x57, 0x06, 0xe7, 0x7b, 0xff, 0xd7, 0x02, 0x92, 0xe7, 0x5e, 0xf2, 0x8c, 0xc7,
+	0x81, 0x03, 0x3a, 0x14, 0xea, 0xed, 0x6b, 0x6f, 0x27, 0x01, 0x72, 0xb5, 0xe4, 0xd7, 0x4c, 0x14,
+	0xf5, 0xe3, 0xab, 0xba, 0x6f, 0xd3, 0x72, 0x8a, 0x50, 0x99, 0xcc, 0x53, 0xe5, 0xcd, 0x99, 0xa7,
+	0xea, 0x9b, 0x33, 0x4f, 0x33, 0xd9, 0xcc, 0x53, 0xef, 0xaf, 0x59, 0xb0, 0x50, 0xc0, 0x66, 0x5f,
+	0xdc, 0xc0, 0x19, 0x63, 0x18, 0xda, 0xa7, 0x24, 0x18, 0x43, 0x07, 0xf6, 0xfe, 0x32, 0xb4, 0x0c,
+	0xd1, 0xfa, 0xe2, 0xda, 0xcf, 0xba, 0x67, 0x9c, 0xb3, 0x0d, 0x58, 0xef, 0x7f, 0x96, 0x80, 0xe4,
+	0xc5, 0xfb, 0xd7, 0xda, 0x87, 0xfc, 0x3c, 0x95, 0x0b, 0xe6, 0xe9, 0x2f, 0x74, 0xe7, 0xf9, 0x00,
+	0xe6, 0xc5, 0x99, 0x7c, 0x2d, 0xf2, 0xcf, 0x39, 0x26, 0x8f, 0x60, 0x0e, 0xaa, 0x99, 0xf6, 0xab,
+	0x19, 0x67, 0x90, 0xb5, 0xed, 0x37, 0x93, 0xfd, 0xb3, 0x7b, 0xd0, 0x15, 0x33, 0x94, 0x0f, 0xfd,
+	0xfd, 0x8b, 0xb2, 0xf2, 0xb1, 0x11, 0x29, 0xec, 0xe7, 0x6f, 0x40, 0x53, 0xdf, 0x3e, 0xc4, 0x72,
+	0x64, 0x92, 0x3f, 0xcc, 0xcc, 0xd0, 0xa9, 0xc8, 0x26, 0xb4, 0x51, 0x49, 0x0e, 0xd4, 0x77, 0xdc,
+	0xd2, 0xb8, 0x22, 0xa0, 0xbd, 0x7d, 0xcd, 0xc9, 0x7c, 0x43, 0x7e, 0x0b, 0xda, 0x66, 0x98, 0x4b,
+	0xd8, 0x84, 0x45, 0x66, 0x24, 0xfb, 0xdc, 0x24, 0x26, 0x6b, 0xd0, 0xc9, 0xc6, 0xc9, 0xc4, 0x01,
+	0xc9, 0x29, 0x15, 0xe4, 0xc8, 0xc9, 0x63, 0x11, 0xe7, 0xac, 0x62, 0x9c, 0xf3, 0x9e, 0xf9, 0x99,
+	0x36, 0x4d, 0x2b, 0xfc, 0x3f, 0x2d, 0xe2, 0xf9, 0xbb, 0x00, 0x29, 0x8c, 0x74, 0xa0, 0xb9, 0x7f,
+	0xb0, 0xb5, 0xe7, 0x6e, 0x6c, 0xaf, 0xed, 0xed, 0x6d, 0xed, 0x76, 0xae, 0x11, 0x02, 0x6d, 0xcc,
+	0x8b, 0x6c, 0x2a, 0x98, 0xc5, 0x60, 0x22, 0x0a, 0x2c, 0x61, 0x25, 0xb2, 0x08, 0x9d, 0x9d, 0xbd,
+	0x0c, 0xb4, 0xcc, 0x2c, 0x31, 0xd1, 0x45, 0x66, 0x89, 0xf1, 0x3b, 0x17, 0xeb, 0x9c, 0x3d, 0xa4,
+	0x75, 0xf2, 0x0f, 0x2c, 0xb8, 0x9e, 0x41, 0xa4, 0xa7, 0x68, 0xb9, 0x01, 0x62, 0x5a, 0x25, 0x26,
+	0x10, 0x73, 0xba, 0xd2, 0x71, 0xcb, 0x68, 0x90, 0x3c, 0x82, 0xf1, 0xbc, 0xe6, 0xe8, 0x65, 0x24,
+	0xa9, 0x08, 0x65, 0x2f, 0xab, 0xc3, 0x8a, 0x99, 0x8e, 0x9f, 0xf0, 0xbb, 0x1c, 0x3a, 0x22, 0x8d,
+	0xf7, 0x9a, 0x5d, 0x96, 0x45, 0xe6, 0xa3, 0x1b, 0xc6, 0x8e, 0xd9, 0xdf, 0x42, 0x9c, 0xfd, 0xbf,
+	0x2a, 0x40, 0xbe, 0x3b, 0xa1, 0xd1, 0x25, 0x1e, 0x93, 0x55, 0x69, 0xa6, 0xe5, 0x6c, 0xd0, 0x7b,
+	0x66, 0x3c, 0x39, 0x66, 0xae, 0x84, 0x70, 0x71, 0x4a, 0x6f, 0x75, 0x1c, 0xbe, 0xe8, 0x38, 0x7a,
+	0xe5, 0xcd, 0xc7, 0xd1, 0xab, 0x6f, 0x3a, 0x8e, 0xfe, 0x25, 0x68, 0xf9, 0xa7, 0x41, 0xc8, 0xd4,
+	0x01, 0x33, 0x21, 0xe2, 0xee, 0xcc, 0xdd, 0xf2, 0xfd, 0xa6, 0xd3, 0x14, 0xc0, 0x3d, 0x06, 0x23,
+	0x4f, 0x52, 0x22, 0x3a, 0x38, 0xc5, 0xeb, 0x13, 0xba, 0x82, 0xd8, 0x1a, 0x9c, 0x52, 0xe1, 0xd1,
+	0x61, 0xd0, 0x43, 0x7e, 0xcc, 0xe0, 0x31, 0xb9, 0x07, 0xed, 0x38, 0x9c, 0x30, 0xa3, 0x4a, 0x4e,
+	0x03, 0x0f, 0x05, 0x37, 0x39, 0xf4, 0x80, 0x4f, 0xc6, 0x0a, 0x2c, 0x4c, 0x62, 0xea, 0x8e, 0xfc,
+	0x38, 0x66, 0x1b, 0x67, 0x3f, 0x0c, 0x92, 0x28, 0x1c, 0x8a, 0xd0, 0xee, 0xfc, 0x24, 0xa6, 0xcf,
+	0x39, 0x66, 0x83, 0x23, 0xc8, 0x37, 0xd2, 0x2e, 0x8d, 0x3d, 0x3f, 0x8a, 0xbb, 0x80, 0x5d, 0x92,
+	0x23, 0x65, 0xfd, 0x3e, 0xf0, 0xfc, 0x48, 0xf5, 0x85, 0x15, 0xe2, 0xcc, 0x31, 0xf9, 0x46, 0xf6,
+	0x98, 0xfc, 0x8f, 0x8a, 0x8f, 0xc9, 0xb7, 0xb0, 0xea, 0x47, 0xa2, 0xea, 0xfc, 0x12, 0xbf, 0xfd,
+	0x69, 0xf9, 0x2f, 0xe6, 0x1c, 0xbb, 0x38, 0x7a, 0xbd, 0x02, 0x35, 0x39, 0x4c, 0x42, 0xa0, 0x72,
+	0x12, 0x85, 0x23, 0x19, 0xf8, 0x62, 0x7f, 0x93, 0x36, 0x94, 0x92, 0x50, 0x7c, 0x5c, 0x4a, 0x42,
+	0xfb, 0xf7, 0xa0, 0xa1, 0xad, 0x14, 0x79, 0x97, 0xfb, 0xd3, 0xcc, 0x26, 0x14, 0x0e, 0x23, 0x4f,
+	0x8d, 0xd7, 0x05, 0x74, 0x67, 0x40, 0xbe, 0x0a, 0xf3, 0x03, 0x3f, 0xa2, 0x78, 0xe3, 0xc4, 0x8d,
+	0xe8, 0x39, 0x8d, 0x62, 0x19, 0x8b, 0xec, 0x28, 0x84, 0xc3, 0xe1, 0xb6, 0x0b, 0x0b, 0xc6, 0xd4,
+	0x28, 0xe5, 0x30, 0x83, 0xe7, 0xc5, 0x65, 0xfa, 0xc8, 0x3c, 0x4b, 0x2e, 0x70, 0x6c, 0x5b, 0x15,
+	0x61, 0x54, 0x77, 0x1c, 0x85, 0xc7, 0xd8, 0x88, 0xe5, 0x18, 0x30, 0xfb, 0x7f, 0x94, 0xa1, 0xbc,
+	0x1d, 0x8e, 0xf5, 0x84, 0xbe, 0x95, 0x4f, 0xe8, 0x0b, 0xfb, 0xd7, 0x55, 0xe6, 0xad, 0x30, 0x52,
+	0x0c, 0x20, 0x79, 0x00, 0x6d, 0x26, 0x69, 0x49, 0xc8, 0xec, 0xfd, 0x0b, 0x2f, 0xe2, 0x87, 0xcb,
+	0xcb, 0xc8, 0xbe, 0x19, 0x0c, 0x59, 0x84, 0xb2, 0x32, 0xdb, 0x90, 0x80, 0x15, 0x99, 0xb3, 0x89,
+	0x47, 0xab, 0x2e, 0x45, 0x72, 0x44, 0x94, 0x98, 0xe2, 0x32, 0xbf, 0xe7, 0xe2, 0xcc, 0x37, 0xdf,
+	0x22, 0x14, 0xb3, 0xc5, 0x99, 0xc0, 0x8e, 0x52, 0xd3, 0x56, 0x95, 0xf5, 0x8c, 0x59, 0xcd, 0xcc,
+	0x98, 0xdd, 0x85, 0x46, 0x32, 0x3c, 0x77, 0xc7, 0xde, 0xe5, 0x30, 0xf4, 0x06, 0x42, 0x50, 0x74,
+	0x10, 0x79, 0x04, 0x30, 0x1a, 0x8f, 0x05, 0x17, 0x63, 0x38, 0xae, 0xb1, 0xda, 0x11, 0xb3, 0xff,
+	0xfc, 0xe0, 0x80, 0x73, 0x9f, 0xa3, 0xd1, 0x90, 0x2d, 0x68, 0x17, 0xde, 0x10, 0xb9, 0x2d, 0x0f,
+	0x00, 0x85, 0xe3, 0x95, 0x02, 0x3e, 0xcf, 0x7c, 0xd4, 0xfb, 0x36, 0x90, 0x5f, 0xf1, 0xa2, 0xc6,
+	0x4b, 0xa8, 0xab, 0x1e, 0xea, 0xd7, 0x23, 0xf0, 0x94, 0x5f, 0xc3, 0xbc, 0x1e, 0x81, 0x87, 0xfa,
+	0xde, 0x83, 0x36, 0xdf, 0x6d, 0x94, 0xfe, 0xe4, 0x27, 0xb3, 0x32, 0x50, 0xfb, 0xcf, 0x2d, 0xa8,
+	0x22, 0xe7, 0x31, 0xf3, 0x8b, 0xe3, 0xd4, 0x49, 0x08, 0x91, 0x54, 0xc9, 0x82, 0x89, 0x6d, 0xdc,
+	0x1c, 0x2b, 0x29, 0x36, 0xd0, 0x6f, 0x8f, 0xdd, 0x85, 0xba, 0x6a, 0x49, 0x63, 0xa5, 0x14, 0x48,
+	0xee, 0x40, 0xe5, 0x2c, 0x1c, 0x4b, 0x0f, 0x15, 0xd2, 0x19, 0x75, 0x10, 0x9e, 0xf6, 0x87, 0xd5,
+	0xc7, 0x87, 0xc0, 0xbd, 0x80, 0x2c, 0xb8, 0x60, 0xac, 0x33, 0x85, 0x63, 0x7d, 0x01, 0x73, 0x4c,
+	0x3f, 0x68, 0x49, 0xcf, 0xe9, 0x7b, 0xd1, 0x57, 0x98, 0x69, 0xd3, 0x1f, 0x4e, 0x06, 0x54, 0x8f,
+	0x13, 0x60, 0xb2, 0x4c, 0xc0, 0xa5, 0x85, 0x6c, 0xff, 0x73, 0x8b, 0xeb, 0x1d, 0x56, 0x2f, 0xb9,
+	0x0f, 0x15, 0xb6, 0x6d, 0x64, 0x82, 0x59, 0xea, 0xe4, 0x25, 0xa3, 0x73, 0x90, 0x82, 0xad, 0x22,
+	0xe6, 0x79, 0xf4, 0xda, 0x79, 0x96, 0x27, 0x75, 0xb2, 0xd5, 0xc8, 0x32, 0xbe, 0x69, 0x06, 0x4a,
+	0x56, 0xb4, 0x83, 0x0d, 0x15, 0x63, 0x2b, 0x92, 0x96, 0xd4, 0xe0, 0x94, 0x6a, 0x07, 0x1a, 0xfe,
+	0x65, 0x09, 0x5a, 0x46, 0x9f, 0x98, 0xf4, 0xe0, 0xbd, 0x2a, 0x1e, 0x2a, 0x15, 0x2b, 0xaf, 0x83,
+	0x74, 0xc9, 0x2b, 0x99, 0x92, 0xa7, 0x32, 0xbc, 0x65, 0x3d, 0xc3, 0xfb, 0x08, 0xea, 0xe9, 0xd5,
+	0x41, 0xb3, 0x53, 0xac, 0x45, 0x79, 0x06, 0x35, 0x25, 0x4a, 0x73, 0xc2, 0x55, 0x3d, 0x27, 0xfc,
+	0x2d, 0x2d, 0x67, 0x38, 0x83, 0xd5, 0xd8, 0x45, 0xb3, 0xfa, 0xeb, 0x39, 0x64, 0xf0, 0x04, 0x1a,
+	0x5a, 0xe7, 0xf5, 0xdc, 0xa0, 0x65, 0xe4, 0x06, 0xd5, 0x69, 0xf1, 0x52, 0x7a, 0x5a, 0xdc, 0xfe,
+	0x59, 0x09, 0x5a, 0x4c, 0xd6, 0xfc, 0xe0, 0xf4, 0x20, 0x1c, 0xfa, 0xfd, 0x4b, 0xe4, 0x71, 0x29,
+	0x56, 0xc2, 0x86, 0x91, 0x32, 0x67, 0x82, 0x99, 0x4e, 0x54, 0x57, 0x64, 0xb8, 0x02, 0x57, 0x65,
+	0xa6, 0xe1, 0x99, 0x7e, 0x3c, 0xf6, 0x62, 0xaa, 0x5d, 0x6c, 0x74, 0x4c, 0x20, 0xd3, 0xc3, 0x0c,
+	0x80, 0x67, 0xff, 0x47, 0xfe, 0x70, 0xe8, 0x73, 0x5a, 0xee, 0x7c, 0x17, 0xa1, 0x58, 0x9b, 0x03,
+	0x3f, 0xf6, 0x8e, 0xd3, 0x93, 0x38, 0xaa, 0x8c, 0x69, 0x10, 0xef, 0xb5, 0x96, 0x06, 0xe1, 0x97,
+	0x85, 0x4c, 0x60, 0x96, 0xab, 0x66, 0x73, 0x5c, 0x65, 0xff, 0xdb, 0x12, 0x34, 0x34, 0x1e, 0x65,
+	0xba, 0xa5, 0x70, 0x13, 0xd6, 0xa0, 0xe2, 0x88, 0x5a, 0x60, 0x84, 0x73, 0x34, 0x08, 0xb9, 0x67,
+	0xb6, 0x8a, 0xe9, 0x53, 0xd4, 0x3e, 0x06, 0x3f, 0xdf, 0x82, 0x3a, 0x93, 0xc3, 0x0f, 0x31, 0x76,
+	0x24, 0x2e, 0x11, 0x2b, 0x80, 0xc4, 0xae, 0x22, 0xb6, 0x9a, 0x62, 0x11, 0x70, 0xe5, 0xa1, 0xb5,
+	0xc7, 0xd0, 0x14, 0xd5, 0xe0, 0x1a, 0xe3, 0xa0, 0x53, 0x4d, 0x60, 0xac, 0xbf, 0x63, 0x50, 0xca,
+	0x2f, 0x57, 0xe5, 0x97, 0xb5, 0x37, 0x7d, 0x29, 0x29, 0xed, 0x67, 0xea, 0x3c, 0xe0, 0xb3, 0xc8,
+	0x1b, 0x9f, 0x49, 0xed, 0xf6, 0x08, 0x16, 0xa4, 0x12, 0x9b, 0x04, 0x5e, 0x10, 0x84, 0x93, 0xa0,
+	0x4f, 0xe5, 0xc1, 0xf2, 0x22, 0x94, 0x3d, 0x50, 0xd7, 0x90, 0xb0, 0x22, 0xf2, 0x00, 0xaa, 0xdc,
+	0x0a, 0xe6, 0xb6, 0x4a, 0xb1, 0x3e, 0xe3, 0x24, 0xe4, 0x3e, 0x54, 0xb9, 0x31, 0x5c, 0x9a, 0xaa,
+	0x81, 0x38, 0x81, 0xbd, 0x02, 0x73, 0x18, 0x81, 0xd7, 0x14, 0xf1, 0xcd, 0x22, 0x1b, 0x66, 0xa6,
+	0xcf, 0xe3, 0xf4, 0x8b, 0x40, 0xf6, 0xb8, 0x5c, 0xe9, 0x07, 0x56, 0xfe, 0xbc, 0x0c, 0x0d, 0x0d,
+	0xcc, 0x94, 0x25, 0x9e, 0x5e, 0x70, 0x07, 0xbe, 0x37, 0xa2, 0x32, 0x6a, 0xdf, 0x72, 0x32, 0x50,
+	0x46, 0xe7, 0x9d, 0x9f, 0xba, 0xe1, 0x24, 0x71, 0x07, 0xf4, 0x34, 0xa2, 0x54, 0x18, 0x57, 0x19,
+	0x28, 0xa3, 0x63, 0xdc, 0xac, 0xd1, 0xf1, 0x44, 0x7c, 0x06, 0x2a, 0x0f, 0x86, 0xf0, 0x79, 0xaa,
+	0xa4, 0x07, 0x43, 0xf8, 0xac, 0x64, 0xd5, 0x7c, 0xb5, 0x40, 0xcd, 0x7f, 0x04, 0x4b, 0x5c, 0xa1,
+	0x0b, 0xed, 0xe1, 0x66, 0x98, 0x6b, 0x0a, 0x96, 0x3c, 0x80, 0x0e, 0xeb, 0xb3, 0x14, 0x8d, 0xd8,
+	0xff, 0x29, 0x97, 0x31, 0xcb, 0xc9, 0xc1, 0x19, 0x2d, 0x26, 0x15, 0x75, 0x5a, 0x7e, 0x50, 0x32,
+	0x07, 0x47, 0x5a, 0xef, 0xb5, 0x49, 0x5b, 0x17, 0xb4, 0x19, 0x38, 0x79, 0x0c, 0xcb, 0x23, 0x3a,
+	0xf0, 0x3d, 0xb3, 0x0a, 0x37, 0xb5, 0x38, 0xa6, 0xa1, 0x59, 0x2b, 0x6c, 0x16, 0x7e, 0x1a, 0x8e,
+	0x8e, 0x7d, 0xbe, 0xcb, 0xf2, 0xf4, 0x67, 0xc5, 0xc9, 0xc1, 0xed, 0x16, 0x34, 0x0e, 0x93, 0x70,
+	0x2c, 0x97, 0xbe, 0x0d, 0x4d, 0x5e, 0x14, 0x57, 0x09, 0x6e, 0xc2, 0x0d, 0xe4, 0xd7, 0xa3, 0x70,
+	0x1c, 0x0e, 0xc3, 0xd3, 0x4b, 0x23, 0xee, 0xf2, 0xef, 0x2d, 0x58, 0x30, 0xb0, 0x69, 0xe0, 0x05,
+	0x83, 0xc4, 0xf2, 0xfc, 0x37, 0x67, 0xf1, 0x79, 0x6d, 0x8f, 0xe2, 0x84, 0x3c, 0xc1, 0xfd, 0x42,
+	0x1c, 0x09, 0x5f, 0x4b, 0x2f, 0x35, 0xca, 0x0f, 0x39, 0xbf, 0x77, 0xf3, 0xfc, 0x2e, 0xbe, 0x97,
+	0xd7, 0x1d, 0x65, 0x15, 0xbf, 0x25, 0x8e, 0xb5, 0x0e, 0xc4, 0xa0, 0xcb, 0xe6, 0x51, 0x44, 0x3d,
+	0x4e, 0x27, 0x7b, 0xd0, 0x57, 0xc0, 0xd8, 0xfe, 0xb9, 0x05, 0x90, 0xf6, 0x0e, 0x0f, 0x43, 0xaa,
+	0x7d, 0x96, 0xbf, 0x1b, 0xa2, 0xed, 0xa9, 0xef, 0x42, 0x53, 0x1d, 0xc8, 0x4a, 0xb7, 0xee, 0x86,
+	0x84, 0x31, 0x53, 0xe7, 0x7d, 0x98, 0x3b, 0x1d, 0x86, 0xc7, 0x68, 0x52, 0x89, 0x7d, 0x96, 0x5f,
+	0xa8, 0x68, 0x73, 0xb0, 0xdc, 0x3d, 0xd3, 0x7d, 0xbe, 0x52, 0x78, 0x92, 0x4b, 0xdf, 0xb5, 0xd9,
+	0x5e, 0x37, 0x9f, 0x9b, 0x89, 0x2b, 0xa5, 0xfc, 0x97, 0xca, 0x67, 0x5e, 0x15, 0xb6, 0x7f, 0x02,
+	0xed, 0x88, 0xeb, 0x4c, 0xa9, 0x50, 0x2b, 0x57, 0x28, 0xd4, 0x56, 0x64, 0xec, 0xcc, 0x5f, 0x81,
+	0x8e, 0x37, 0x38, 0xa7, 0x51, 0xe2, 0x63, 0x18, 0x13, 0x6d, 0x3a, 0x3e, 0xc0, 0x39, 0x0d, 0x8e,
+	0xa6, 0xd3, 0xfb, 0x30, 0x27, 0xae, 0xb7, 0x28, 0x4a, 0x71, 0x83, 0x3e, 0x05, 0x33, 0x42, 0xfb,
+	0x1f, 0xcb, 0xf3, 0x30, 0xe6, 0xea, 0x5e, 0x3d, 0x2b, 0xfa, 0x08, 0x4b, 0x99, 0x11, 0x7e, 0x49,
+	0x64, 0xfb, 0x07, 0x32, 0x5e, 0x5a, 0xd6, 0x0e, 0x48, 0x0f, 0xc4, 0x79, 0x22, 0x73, 0x5a, 0x2b,
+	0x6f, 0x33, 0xad, 0xf6, 0x7f, 0xb6, 0x60, 0x76, 0x3b, 0x1c, 0x6f, 0xfb, 0xfc, 0x8c, 0x22, 0x8a,
+	0x89, 0xba, 0x5b, 0x26, 0x8b, 0x6f, 0x38, 0x48, 0x5e, 0x68, 0x95, 0xb4, 0xb2, 0x56, 0xc9, 0xb7,
+	0xe1, 0x26, 0x46, 0xec, 0xa3, 0x70, 0x1c, 0x46, 0x4c, 0x5c, 0xbd, 0x21, 0x37, 0x41, 0xc2, 0x20,
+	0x39, 0x93, 0xea, 0xf4, 0x2a, 0x12, 0x0c, 0xa3, 0x0d, 0x93, 0x73, 0x97, 0xbb, 0x9b, 0xc2, 0x8a,
+	0xe2, 0x5a, 0x36, 0x8f, 0xb0, 0x7f, 0x13, 0xea, 0xe8, 0xee, 0xe0, 0xd0, 0x3e, 0x80, 0xfa, 0x59,
+	0x38, 0x76, 0xcf, 0xfc, 0x20, 0x91, 0xe2, 0xdf, 0x4e, 0xfd, 0x90, 0x6d, 0x9c, 0x14, 0x45, 0x60,
+	0xff, 0xef, 0x59, 0x98, 0xdd, 0x09, 0xce, 0x43, 0xbf, 0x8f, 0xe7, 0x6a, 0x46, 0x74, 0x14, 0xca,
+	0xdb, 0x76, 0xec, 0x6f, 0x7c, 0x08, 0x23, 0xbd, 0x0f, 0xcf, 0x45, 0x48, 0x83, 0x30, 0x07, 0x39,
+	0xd2, 0xef, 0xb3, 0x8b, 0x52, 0xea, 0xf5, 0x55, 0xb5, 0xfb, 0x8a, 0xac, 0x36, 0x7e, 0xcf, 0x1a,
+	0xe7, 0x8e, 0xdf, 0x92, 0xd0, 0x20, 0x6c, 0xf2, 0xc5, 0x01, 0x77, 0x7e, 0x02, 0x9a, 0x1f, 0xd1,
+	0x13, 0x20, 0x74, 0xfa, 0x23, 0xca, 0x73, 0x2e, 0xca, 0xf4, 0x62, 0x4e, 0xbf, 0x0e, 0x64, 0xe6,
+	0x19, 0xff, 0x80, 0xd3, 0xf0, 0xed, 0x40, 0x07, 0xe1, 0x31, 0x8b, 0xcc, 0xeb, 0x10, 0xfc, 0x85,
+	0x8f, 0x2c, 0x98, 0x9f, 0xa0, 0x52, 0x4a, 0x97, 0x8f, 0x13, 0xf8, 0x9b, 0x00, 0x59, 0xb8, 0x16,
+	0x2a, 0xe0, 0xf7, 0x80, 0x64, 0xa8, 0x80, 0xb1, 0x8c, 0x37, 0x1c, 0x1e, 0x7b, 0xfd, 0x57, 0xdc,
+	0xb3, 0x6d, 0xf2, 0x54, 0x9d, 0x01, 0xc4, 0x63, 0xea, 0xe9, 0xba, 0xe2, 0x09, 0x97, 0x8a, 0xa3,
+	0x83, 0xc8, 0x2a, 0x34, 0x30, 0x8c, 0x22, 0x56, 0xb6, 0x8d, 0x2b, 0xdb, 0xd1, 0xe3, 0x2c, 0xb8,
+	0xb6, 0x3a, 0x91, 0x7e, 0xe2, 0x67, 0x2e, 0x77, 0x33, 0xc7, 0x1b, 0x0c, 0xc4, 0x49, 0x90, 0x0e,
+	0xbf, 0x13, 0xaf, 0x00, 0x18, 0xa8, 0xe1, 0x13, 0xc6, 0x09, 0xe6, 0x91, 0xc0, 0x80, 0x91, 0x3b,
+	0x3c, 0x8c, 0x39, 0xf6, 0xfc, 0x01, 0x9e, 0xb8, 0xe4, 0xbe, 0xb0, 0x82, 0xb1, 0x3a, 0xe4, 0xdf,
+	0xb8, 0x71, 0x2e, 0xe0, 0xac, 0x18, 0x30, 0x36, 0x37, 0xaa, 0x3c, 0x4a, 0xaf, 0xf2, 0x98, 0x40,
+	0xf2, 0x21, 0x66, 0xd8, 0x13, 0x8a, 0xf7, 0x75, 0xda, 0xab, 0x37, 0xc5, 0x98, 0x05, 0xdb, 0xca,
+	0xff, 0xf1, 0x44, 0x81, 0xc3, 0x29, 0x99, 0xd9, 0xc6, 0x93, 0x1c, 0x4b, 0x86, 0xd9, 0x26, 0x48,
+	0x31, 0xc9, 0xc1, 0x09, 0xc8, 0x63, 0xcd, 0x13, 0xeb, 0x22, 0xf1, 0xad, 0x4c, 0xfd, 0x53, 0x7c,
+	0x30, 0xb6, 0x64, 0x7e, 0x8c, 0xa7, 0x63, 0x62, 0x1a, 0x0c, 0xf0, 0xea, 0x4e, 0xcd, 0xd1, 0x41,
+	0x5f, 0xac, 0x97, 0xb6, 0x06, 0x4d, 0x7d, 0xa4, 0xa4, 0x06, 0x95, 0xfd, 0x83, 0xad, 0xbd, 0xce,
+	0x35, 0xd2, 0x80, 0xd9, 0xc3, 0xad, 0xa3, 0xa3, 0xdd, 0xad, 0xcd, 0x8e, 0x45, 0x9a, 0x50, 0x53,
+	0xd7, 0x24, 0x4a, 0xac, 0xb4, 0xb6, 0xb1, 0xb1, 0x75, 0x70, 0xb4, 0xb5, 0xd9, 0x29, 0x7f, 0xa7,
+	0x52, 0x2b, 0x75, 0xca, 0x68, 0x62, 0x6a, 0x13, 0xf1, 0x86, 0x48, 0xdb, 0x1d, 0x00, 0x74, 0x7d,
+	0xd2, 0x33, 0x43, 0x15, 0x47, 0x83, 0x30, 0x55, 0xae, 0x22, 0x14, 0x65, 0xfe, 0x92, 0x81, 0x2c,
+	0xe3, 0xf2, 0xe2, 0x93, 0x01, 0x7a, 0xea, 0xab, 0xea, 0x98, 0x40, 0x36, 0x8f, 0x02, 0x80, 0x67,
+	0xf7, 0xb9, 0xc2, 0xd0, 0x41, 0x8c, 0x95, 0x22, 0x1a, 0x87, 0xc3, 0x73, 0xca, 0x49, 0xb8, 0x01,
+	0x69, 0xc0, 0x58, 0x5b, 0x42, 0x27, 0x6a, 0xf7, 0x6a, 0xaa, 0x8e, 0x09, 0x24, 0x5f, 0x93, 0xac,
+	0x54, 0x43, 0x56, 0x5a, 0xce, 0xf3, 0x85, 0xc1, 0x46, 0xcf, 0x73, 0xa1, 0xb2, 0x3a, 0xb2, 0xc8,
+	0x97, 0xf3, 0xdf, 0xbd, 0x45, 0xc8, 0x8c, 0xac, 0x00, 0x19, 0x8d, 0xc7, 0x6e, 0x41, 0x0c, 0xab,
+	0xe2, 0x14, 0x60, 0xbe, 0x80, 0x10, 0x5b, 0x02, 0x64, 0x6d, 0x30, 0x10, 0xdd, 0xd4, 0x1f, 0x76,
+	0x88, 0xf4, 0x97, 0x44, 0xa4, 0xd2, 0x2e, 0x50, 0x8c, 0xa5, 0x62, 0xc5, 0x78, 0xa5, 0xfa, 0xb0,
+	0x77, 0xa0, 0x71, 0xa0, 0xbd, 0x4d, 0x62, 0xb3, 0x3d, 0x44, 0xbe, 0x4a, 0xc2, 0x77, 0x17, 0x1e,
+	0x5a, 0x4b, 0xa1, 0x5a, 0x97, 0x4a, 0x7a, 0x97, 0xec, 0x7f, 0x68, 0xf1, 0xeb, 0xde, 0x6a, 0x08,
+	0xbc, 0x7d, 0x1b, 0x9a, 0x2a, 0x3b, 0x93, 0xde, 0x7d, 0x33, 0x60, 0x8c, 0x06, 0xbb, 0xe3, 0x86,
+	0x27, 0x27, 0x31, 0x95, 0xb7, 0x54, 0x0c, 0x98, 0x34, 0xd7, 0x99, 0x03, 0xe0, 0xf3, 0x16, 0x62,
+	0x71, 0x5b, 0x25, 0x07, 0x67, 0x9c, 0x2e, 0xa2, 0xe3, 0xf2, 0x7e, 0x8e, 0x2a, 0xab, 0x2b, 0x7a,
+	0xd9, 0x99, 0x7e, 0x00, 0x35, 0x55, 0xaf, 0xb9, 0x17, 0x4b, 0x4a, 0x85, 0x67, 0x7b, 0x3e, 0xba,
+	0xf2, 0x46, 0xa7, 0xb9, 0xc0, 0xe5, 0x11, 0x8c, 0x97, 0x4e, 0xfc, 0x28, 0x4b, 0xce, 0x25, 0xb0,
+	0x00, 0x63, 0xbf, 0x84, 0x05, 0xa9, 0x3e, 0x34, 0x3f, 0xc2, 0x5c, 0x48, 0xeb, 0x4d, 0xfb, 0x40,
+	0x29, 0xbf, 0x0f, 0xd8, 0xff, 0xa6, 0x02, 0xb3, 0xf2, 0xe1, 0x1f, 0xbb, 0xe0, 0xa1, 0x9a, 0xba,
+	0xf9, 0xc6, 0x0d, 0xe9, 0x1a, 0x2f, 0x19, 0x20, 0x23, 0x08, 0xeb, 0xe0, 0x7e, 0x76, 0x7f, 0x4f,
+	0x43, 0xac, 0x99, 0x3d, 0x7e, 0x09, 0x2a, 0x63, 0x2f, 0x39, 0xc3, 0x08, 0x1c, 0xe7, 0x25, 0x2c,
+	0xcb, 0x20, 0x7e, 0xd5, 0x0c, 0xe2, 0x17, 0xbd, 0xec, 0xc3, 0x8d, 0xd9, 0xfc, 0xcb, 0x3e, 0xb7,
+	0xa0, 0xce, 0xed, 0x91, 0x34, 0x4e, 0x9f, 0x02, 0x32, 0xf6, 0x4b, 0x2d, 0x67, 0xbf, 0xbc, 0xbd,
+	0x65, 0xf1, 0x0d, 0x98, 0xe1, 0xb7, 0x5b, 0xc5, 0x6d, 0x24, 0xb9, 0xe9, 0x88, 0x99, 0x94, 0xff,
+	0xf3, 0x43, 0xa9, 0x8e, 0xa0, 0xd5, 0xdf, 0xc7, 0x68, 0x98, 0xef, 0x63, 0xe8, 0xe9, 0x85, 0x66,
+	0x26, 0xbd, 0xf0, 0x00, 0x3a, 0x6a, 0xfa, 0x30, 0x04, 0x17, 0xc4, 0xe2, 0xf6, 0x45, 0x0e, 0x9e,
+	0x6e, 0x9c, 0x6d, 0x63, 0xe3, 0x64, 0x1a, 0x6e, 0x2d, 0x49, 0xe8, 0x68, 0x9c, 0x88, 0x8d, 0xd3,
+	0x7e, 0x0a, 0x2d, 0xa3, 0x93, 0x6c, 0x1b, 0x12, 0xf7, 0x93, 0x3a, 0xd7, 0x48, 0x0b, 0xea, 0x3b,
+	0x7b, 0xee, 0xd3, 0xdd, 0x9d, 0x67, 0xdb, 0x47, 0x1d, 0x8b, 0x15, 0x0f, 0x5f, 0x6c, 0x6c, 0x6c,
+	0x6d, 0x6d, 0xe2, 0xb6, 0x04, 0x30, 0xf3, 0x74, 0x6d, 0x87, 0x6d, 0x51, 0x65, 0xfb, 0xff, 0x58,
+	0xd0, 0xd0, 0xaa, 0x27, 0xdf, 0x54, 0x33, 0xc3, 0x9f, 0x50, 0xb8, 0x9d, 0xef, 0xc2, 0x8a, 0x54,
+	0xd4, 0xda, 0xd4, 0xa8, 0xc7, 0x8c, 0x4a, 0x53, 0x1f, 0x33, 0x62, 0xcb, 0xe3, 0xf1, 0x1a, 0xd4,
+	0x3c, 0x70, 0xff, 0x2a, 0x0b, 0xe6, 0x27, 0xb1, 0xd2, 0xdd, 0x85, 0x51, 0xf2, 0x98, 0x62, 0x16,
+	0x6c, 0x7f, 0x04, 0x90, 0xf6, 0xc6, 0x1c, 0xf6, 0x35, 0x73, 0xd8, 0x96, 0x36, 0xec, 0x92, 0xbd,
+	0xc9, 0x15, 0x86, 0x98, 0x42, 0x95, 0x47, 0xfe, 0x1a, 0x10, 0x19, 0xc2, 0xc2, 0x13, 0x8f, 0xe3,
+	0x21, 0x4d, 0xe4, 0xad, 0xc5, 0x79, 0x81, 0xd9, 0x51, 0x08, 0x79, 0xf1, 0x36, 0xad, 0x25, 0xd5,
+	0x3b, 0x82, 0xe3, 0xb2, 0x7a, 0x47, 0x90, 0x3a, 0x0a, 0x6f, 0xf7, 0xa0, 0xbb, 0x49, 0x59, 0x6d,
+	0x6b, 0xc3, 0x61, 0xa6, 0x3b, 0xf6, 0x4d, 0xb8, 0x51, 0x80, 0x13, 0x01, 0x8a, 0xef, 0xc2, 0xf5,
+	0x35, 0x7e, 0x41, 0xf1, 0x8b, 0xba, 0x0b, 0x61, 0x77, 0x61, 0x29, 0x5b, 0xa5, 0x68, 0xec, 0x29,
+	0xcc, 0x6f, 0xd2, 0xe3, 0xc9, 0xe9, 0x2e, 0x3d, 0x4f, 0x1b, 0x22, 0x50, 0x89, 0xcf, 0xc2, 0x0b,
+	0x31, 0x3f, 0xf8, 0x37, 0xb9, 0x0d, 0x30, 0x64, 0x34, 0x6e, 0x3c, 0xa6, 0x7d, 0xf9, 0x44, 0x05,
+	0x42, 0x0e, 0xc7, 0xb4, 0x6f, 0x7f, 0x04, 0x44, 0xaf, 0x47, 0xcc, 0x17, 0x73, 0x1a, 0x26, 0xc7,
+	0x6e, 0x7c, 0x19, 0x27, 0x74, 0x24, 0xdf, 0xde, 0xd0, 0x41, 0xf6, 0xfb, 0xd0, 0x3c, 0xf0, 0x2e,
+	0x1d, 0xfa, 0x13, 0xf1, 0x78, 0xd6, 0x32, 0xcc, 0x8e, 0xbd, 0x4b, 0x26, 0xcf, 0x2a, 0xc9, 0x82,
+	0x68, 0xfb, 0x8f, 0x2b, 0x30, 0xc3, 0x29, 0x59, 0xad, 0x03, 0x1a, 0x27, 0x7e, 0x80, 0x32, 0x26,
+	0x6b, 0xd5, 0x40, 0x39, 0x85, 0x59, 0x2a, 0x50, 0x98, 0x22, 0xd8, 0x26, 0xaf, 0xfa, 0x0b, 0x96,
+	0x35, 0x60, 0x4c, 0x6d, 0xa5, 0x37, 0xab, 0x38, 0xa7, 0xa6, 0x80, 0x4c, 0x16, 0x33, 0x75, 0x4d,
+	0x78, 0xff, 0xe4, 0x5e, 0x20, 0x74, 0xa2, 0x0e, 0x2a, 0x74, 0x80, 0x66, 0xe5, 0x15, 0x92, 0x8c,
+	0x03, 0x94, 0x73, 0x74, 0x6a, 0x6f, 0xe1, 0xe8, 0xf0, 0x08, 0xdc, 0x55, 0x8e, 0x0e, 0xbc, 0x8d,
+	0xa3, 0xf3, 0x36, 0xd9, 0xc3, 0x1e, 0xd4, 0x70, 0x4f, 0xd7, 0x54, 0xa4, 0x2c, 0x93, 0xdf, 0xd0,
+	0xbc, 0x00, 0x7e, 0x10, 0xe0, 0x66, 0x2a, 0x2f, 0x0e, 0xfd, 0xc9, 0xaf, 0x27, 0x11, 0xf3, 0x43,
+	0x98, 0x15, 0x50, 0xc6, 0xd9, 0x81, 0x37, 0x92, 0x4f, 0xac, 0xe0, 0xdf, 0xc2, 0xe1, 0x60, 0x3b,
+	0x88, 0x1f, 0xd1, 0x81, 0xbc, 0x86, 0xac, 0x81, 0xf0, 0xdc, 0x74, 0xec, 0xbe, 0x0a, 0xc2, 0x8b,
+	0x40, 0x5c, 0x44, 0x56, 0x65, 0x9b, 0x40, 0x07, 0x9f, 0x5a, 0x1a, 0x87, 0x91, 0x7c, 0x35, 0xc7,
+	0xfe, 0x03, 0x0b, 0x3a, 0x42, 0xd0, 0x14, 0x4e, 0x1e, 0x19, 0xb8, 0xea, 0xb6, 0xfd, 0x3d, 0x68,
+	0x61, 0xb4, 0x43, 0x6d, 0x39, 0x22, 0xfd, 0x6e, 0x00, 0x59, 0x7f, 0xe5, 0xc1, 0xc5, 0x91, 0x3f,
+	0x14, 0x7c, 0xab, 0x83, 0xe4, 0xae, 0x15, 0x79, 0xe2, 0xfe, 0x92, 0xe5, 0xa8, 0xb2, 0xfd, 0x0b,
+	0x0b, 0xe6, 0xb5, 0x0e, 0x0b, 0x41, 0x7d, 0x02, 0x4d, 0xf5, 0xa2, 0x19, 0x55, 0x46, 0xd5, 0xb2,
+	0xa9, 0x59, 0xd2, 0xcf, 0x0c, 0x62, 0xe4, 0x77, 0xef, 0x12, 0x3b, 0x18, 0x4f, 0x46, 0xc2, 0x9a,
+	0xd1, 0x41, 0x8c, 0x8f, 0x2e, 0x28, 0x7d, 0xa5, 0x48, 0xb8, 0x3d, 0x65, 0xc0, 0x30, 0x4b, 0x14,
+	0x06, 0xc9, 0x99, 0x22, 0xaa, 0x88, 0x2c, 0x91, 0x0e, 0xb4, 0xff, 0x6b, 0x09, 0x16, 0x78, 0xd8,
+	0x4d, 0x84, 0x3b, 0xd5, 0xa3, 0x32, 0x33, 0x3c, 0x02, 0xc9, 0x95, 0xd6, 0xf6, 0x35, 0x47, 0x94,
+	0xc9, 0x37, 0xdf, 0x32, 0x54, 0xa8, 0x2e, 0x4a, 0x4d, 0x59, 0x8b, 0x72, 0xd1, 0x5a, 0x5c, 0x31,
+	0xd3, 0x45, 0x09, 0xbb, 0x6a, 0x71, 0xc2, 0xee, 0xed, 0x12, 0x64, 0xb9, 0xdb, 0x44, 0xb3, 0x82,
+	0xca, 0xb8, 0x4d, 0xb4, 0x0a, 0xcb, 0x06, 0x00, 0xf5, 0xb5, 0x7f, 0xe2, 0x53, 0x79, 0xb5, 0x7b,
+	0x3e, 0xa6, 0x89, 0x6b, 0x90, 0xac, 0xcf, 0x42, 0x35, 0xee, 0x87, 0x63, 0x6a, 0x2f, 0xc1, 0xa2,
+	0x39, 0xb9, 0x62, 0x97, 0xf8, 0xb9, 0x05, 0xdd, 0xa7, 0xfc, 0xd8, 0x85, 0x1f, 0x9c, 0x6e, 0xfb,
+	0x71, 0x12, 0x46, 0xea, 0xed, 0xaf, 0x3b, 0x00, 0x71, 0xe2, 0x45, 0xc2, 0xcf, 0xe4, 0xc6, 0xae,
+	0x06, 0x61, 0x73, 0x44, 0x83, 0x01, 0xc7, 0x72, 0xde, 0x50, 0xe5, 0x9c, 0x33, 0x21, 0x82, 0x92,
+	0x86, 0x49, 0xfe, 0x1e, 0xbf, 0xe4, 0xc8, 0x26, 0x83, 0x9e, 0xe3, 0xd6, 0xcb, 0x23, 0x7d, 0x19,
+	0xa8, 0xfd, 0x87, 0x25, 0x98, 0x4b, 0x3b, 0xc9, 0x2f, 0x4d, 0x1b, 0x0a, 0x5c, 0xd8, 0xe1, 0xa9,
+	0x02, 0x17, 0x09, 0x44, 0xd7, 0x67, 0x86, 0xb9, 0x16, 0x97, 0xd4, 0xa0, 0xe4, 0x1e, 0x34, 0x64,
+	0x29, 0x9c, 0x24, 0xda, 0x23, 0x3c, 0x3a, 0x98, 0xdf, 0x9e, 0x60, 0xae, 0x81, 0x70, 0x73, 0x44,
+	0x09, 0xaf, 0xfa, 0x8f, 0x12, 0xfc, 0x92, 0xaf, 0xa9, 0x2c, 0x32, 0x85, 0xc6, 0x6c, 0x6a, 0xbe,
+	0x86, 0x68, 0x4f, 0xeb, 0xb6, 0x66, 0x4d, 0x3d, 0x5e, 0xa8, 0x64, 0x9e, 0xd7, 0x98, 0xde, 0x23,
+	0xab, 0x38, 0x3a, 0x48, 0xc6, 0x85, 0xc2, 0x89, 0xe1, 0xfe, 0x1a, 0x30, 0xfb, 0x6f, 0x5b, 0x70,
+	0xa3, 0x60, 0x19, 0x85, 0x0e, 0xd8, 0x84, 0xf9, 0x13, 0x85, 0x94, 0x53, 0xcd, 0x15, 0xc1, 0x92,
+	0x54, 0xae, 0xe6, 0xf4, 0x3a, 0xf9, 0x0f, 0x94, 0xbb, 0xc5, 0x17, 0xcf, 0xb8, 0x36, 0x98, 0x47,
+	0xd8, 0x07, 0xd0, 0xdb, 0x7a, 0xcd, 0x54, 0xca, 0x86, 0xfe, 0x82, 0xb5, 0xe4, 0xac, 0xd5, 0x9c,
+	0xca, 0x7c, 0x73, 0x38, 0xfa, 0x84, 0x5f, 0x86, 0x52, 0x75, 0x91, 0xaf, 0xbf, 0x6d, 0x25, 0xba,
+	0xf4, 0xdf, 0x15, 0xab, 0xce, 0x9f, 0xe0, 0x96, 0x97, 0x17, 0x35, 0x90, 0x7d, 0x0e, 0x73, 0xcf,
+	0x27, 0xc3, 0xc4, 0x4f, 0x9f, 0xe3, 0x26, 0xdf, 0x14, 0x1f, 0x61, 0x15, 0x72, 0xea, 0x0a, 0x9b,
+	0xd2, 0xe9, 0xd8, 0x8c, 0x8d, 0x58, 0x4d, 0x6e, 0xbe, 0xc5, 0x3c, 0xc2, 0xbe, 0x01, 0xcb, 0x69,
+	0x93, 0x7c, 0xee, 0xe4, 0xb6, 0xf3, 0x47, 0x16, 0x3f, 0x34, 0x6c, 0xbe, 0x0e, 0x4e, 0x9e, 0xc1,
+	0x42, 0xec, 0x07, 0xa7, 0x43, 0xaa, 0xd7, 0x13, 0x8b, 0x99, 0xb8, 0x6e, 0x76, 0x4f, 0xbc, 0x20,
+	0xee, 0x14, 0x7d, 0xc1, 0x18, 0xa4, 0xb8, 0xa3, 0x29, 0x83, 0x64, 0xa6, 0xa4, 0x68, 0x00, 0xdf,
+	0x81, 0xb6, 0xd9, 0x18, 0x79, 0x2c, 0x6e, 0x05, 0xa6, 0x3d, 0x2b, 0x67, 0x2e, 0x77, 0xa5, 0x9c,
+	0x61, 0x50, 0xda, 0x3f, 0xb3, 0xa0, 0xeb, 0x50, 0xc6, 0xc6, 0x54, 0x6b, 0x54, 0x70, 0xcf, 0x93,
+	0x5c, 0xb5, 0xd3, 0x07, 0xac, 0x6e, 0x1b, 0xca, 0xb1, 0xae, 0x4c, 0x5d, 0x94, 0xed, 0x6b, 0x05,
+	0xa3, 0x5a, 0xaf, 0xc1, 0x8c, 0x18, 0xdf, 0x32, 0x5c, 0x17, 0x5d, 0x92, 0xdd, 0x49, 0x13, 0x8f,
+	0x46, 0xa3, 0x46, 0xe2, 0xb1, 0x07, 0x5d, 0xfe, 0xc4, 0x9b, 0x3e, 0x0e, 0xf1, 0xe1, 0x26, 0x90,
+	0xe7, 0x5e, 0xdf, 0x8b, 0xc2, 0x30, 0x38, 0xa0, 0x91, 0x38, 0xe5, 0x89, 0xd6, 0x27, 0xe6, 0xe5,
+	0xa4, 0xa1, 0xcc, 0x4b, 0xf2, 0x55, 0xb2, 0x30, 0x90, 0xaf, 0xbf, 0xf1, 0x92, 0xed, 0xc0, 0xc2,
+	0xba, 0xf7, 0x8a, 0xca, 0x9a, 0xd2, 0x59, 0x6a, 0x8c, 0x55, 0xa5, 0x72, 0xee, 0xe5, 0x75, 0xe2,
+	0x7c, 0xb3, 0x8e, 0x4e, 0x6d, 0xaf, 0xc2, 0xa2, 0x59, 0xa7, 0x50, 0x25, 0x3d, 0xa8, 0x8d, 0x04,
+	0x4c, 0xf4, 0x4e, 0x95, 0x1f, 0x7c, 0x06, 0x0d, 0xed, 0xd9, 0x3e, 0xb2, 0x0c, 0x0b, 0x2f, 0x77,
+	0x8e, 0xf6, 0xb6, 0x0e, 0x0f, 0xdd, 0x83, 0x17, 0xeb, 0x9f, 0x6c, 0x7d, 0xdf, 0xdd, 0x5e, 0x3b,
+	0xdc, 0xee, 0x5c, 0x23, 0x4b, 0x40, 0xf6, 0xb6, 0x0e, 0x8f, 0xb6, 0x36, 0x0d, 0xb8, 0x45, 0xee,
+	0x40, 0xef, 0xc5, 0xde, 0x8b, 0xc3, 0xad, 0x4d, 0xb7, 0xe8, 0xbb, 0x12, 0xb9, 0x0d, 0x37, 0x04,
+	0xbe, 0xe0, 0xf3, 0xf2, 0x83, 0x27, 0xd0, 0xc9, 0x86, 0x25, 0x8d, 0x70, 0xee, 0x55, 0x71, 0xdf,
+	0x07, 0xff, 0xa8, 0x0c, 0x90, 0x3e, 0xb3, 0x4c, 0xba, 0xb0, 0xb8, 0xb9, 0x76, 0xb4, 0xb6, 0xbb,
+	0xcf, 0x3a, 0xe1, 0xec, 0x1f, 0x6d, 0x6d, 0x1c, 0xb9, 0xce, 0xd6, 0x77, 0x3b, 0xd7, 0x0a, 0x31,
+	0xfb, 0x07, 0xcc, 0x65, 0x5f, 0x86, 0x85, 0x9d, 0xbd, 0x9d, 0xa3, 0x9d, 0xb5, 0x5d, 0xd7, 0xd9,
+	0x7f, 0xb1, 0xb3, 0xf7, 0x8c, 0x3f, 0x29, 0x52, 0x26, 0xef, 0xc0, 0xcd, 0x17, 0x07, 0x4f, 0x9d,
+	0xfd, 0xbd, 0x23, 0xf7, 0x70, 0xfb, 0xc5, 0xd1, 0x26, 0x3e, 0x48, 0xb2, 0xe1, 0xec, 0x1c, 0xf0,
+	0x3a, 0x2b, 0x57, 0x11, 0xb0, 0xaa, 0xab, 0x6c, 0xc6, 0x9e, 0xed, 0x1f, 0x1e, 0xee, 0x1c, 0xb8,
+	0xdf, 0x7d, 0xb1, 0xe5, 0xec, 0x6c, 0x1d, 0xe2, 0x87, 0x33, 0x05, 0x70, 0x46, 0x3f, 0x4b, 0xe6,
+	0xa1, 0x75, 0xb4, 0xfb, 0x3d, 0x77, 0x7f, 0x6f, 0x67, 0x7f, 0x0f, 0x49, 0x6b, 0x26, 0x88, 0x51,
+	0xd5, 0x49, 0x0f, 0x96, 0xb6, 0x7e, 0xe7, 0xc8, 0x2d, 0xa8, 0x19, 0xa6, 0xe0, 0xd8, 0x77, 0x0d,
+	0x72, 0x03, 0xae, 0x1f, 0x1e, 0xad, 0x1d, 0xed, 0x6c, 0xb8, 0xe2, 0x45, 0x22, 0xb6, 0x08, 0xec,
+	0xb3, 0x66, 0x31, 0x8a, 0x7d, 0xd5, 0x22, 0x8b, 0xd0, 0x39, 0x58, 0xfb, 0xfe, 0xf3, 0xad, 0xbd,
+	0x23, 0x77, 0x6d, 0x73, 0xd3, 0xc1, 0x0f, 0xda, 0x39, 0x28, 0xa3, 0x9d, 0x63, 0x0b, 0xf5, 0xfc,
+	0xe0, 0x00, 0x49, 0x3a, 0xb2, 0xc0, 0x30, 0xf3, 0xab, 0x3f, 0x2b, 0x43, 0x9b, 0x1f, 0xb7, 0xe7,
+	0xbf, 0x83, 0x40, 0x23, 0xf2, 0x1c, 0x66, 0xc5, 0x0f, 0x6a, 0x90, 0xeb, 0xea, 0x1d, 0x09, 0xfd,
+	0x27, 0x3c, 0x7a, 0x4b, 0x59, 0xb0, 0x10, 0xbf, 0x85, 0xbf, 0xfa, 0x1f, 0xff, 0xfb, 0xef, 0x97,
+	0x5a, 0xa4, 0xf1, 0xf0, 0xfc, 0xc3, 0x87, 0xa7, 0x34, 0x88, 0x59, 0x1d, 0xbf, 0x0b, 0x90, 0xfe,
+	0x4c, 0x04, 0xe9, 0xaa, 0xe8, 0x63, 0xe6, 0x37, 0x34, 0x7a, 0x37, 0x0a, 0x30, 0xa2, 0xde, 0x1b,
+	0x58, 0xef, 0x82, 0xdd, 0x66, 0xf5, 0xfa, 0x81, 0x9f, 0xf0, 0x9f, 0x8c, 0xf8, 0xd8, 0x7a, 0x40,
+	0x06, 0xd0, 0xd4, 0x7f, 0xc0, 0x81, 0xc8, 0x7c, 0x7f, 0xc1, 0x4f, 0x50, 0xf4, 0x6e, 0x16, 0xe2,
+	0xa4, 0xce, 0xc1, 0x36, 0xae, 0xdb, 0x1d, 0xd6, 0xc6, 0x04, 0x29, 0xd2, 0x56, 0x86, 0x5c, 0x13,
+	0xa7, 0xbf, 0xd3, 0x40, 0x6e, 0x69, 0xca, 0x31, 0xf7, 0x2b, 0x11, 0xbd, 0xdb, 0x53, 0xb0, 0xa2,
+	0xad, 0xdb, 0xd8, 0xd6, 0xb2, 0x4d, 0x58, 0x5b, 0x7d, 0xa4, 0x91, 0xbf, 0x12, 0xf1, 0xb1, 0xf5,
+	0x60, 0xf5, 0x4f, 0xef, 0x43, 0x5d, 0x9d, 0x05, 0x22, 0x3f, 0x86, 0x96, 0x71, 0x1f, 0x82, 0xc8,
+	0x61, 0x14, 0x5d, 0x9f, 0xe8, 0xdd, 0x2a, 0x46, 0x8a, 0x86, 0xef, 0x60, 0xc3, 0x5d, 0xb2, 0xc4,
+	0x1a, 0x16, 0x17, 0x0a, 0x1e, 0xe2, 0xcd, 0x1e, 0xfe, 0x2a, 0xc7, 0x2b, 0x6d, 0xc7, 0xe1, 0x8d,
+	0xdd, 0xca, 0x6e, 0x02, 0x46, 0x6b, 0xb7, 0xa7, 0x60, 0x45, 0x73, 0xb7, 0xb0, 0xb9, 0x25, 0xb2,
+	0xa8, 0x37, 0xa7, 0xce, 0xe7, 0x50, 0x7c, 0x19, 0x47, 0xff, 0x09, 0x03, 0x72, 0x3b, 0x7d, 0xb7,
+	0xa4, 0xe0, 0xa7, 0x0d, 0x14, 0x8b, 0xe4, 0x7f, 0xdf, 0xc0, 0xee, 0x62, 0x53, 0x84, 0xe0, 0xf2,
+	0xe9, 0xbf, 0x60, 0x40, 0x8e, 0xa1, 0xa1, 0xbd, 0xf4, 0x4b, 0x6e, 0x4c, 0x7d, 0x95, 0xb8, 0xd7,
+	0x2b, 0x42, 0x15, 0x0d, 0x45, 0xaf, 0xff, 0x21, 0x33, 0x48, 0x7f, 0x08, 0x75, 0xf5, 0x76, 0x2c,
+	0x59, 0xd6, 0xde, 0xf2, 0xd5, 0xdf, 0xba, 0xed, 0x75, 0xf3, 0x88, 0x22, 0xe6, 0xd3, 0x6b, 0x67,
+	0xcc, 0xf7, 0x12, 0x1a, 0xda, 0xfb, 0xb0, 0x6a, 0x00, 0xf9, 0x37, 0x68, 0xd5, 0x00, 0x0a, 0x9e,
+	0x93, 0xb5, 0xe7, 0xb1, 0x89, 0x06, 0xa9, 0x23, 0x7f, 0x27, 0xaf, 0xc3, 0x98, 0xec, 0xc2, 0x75,
+	0xb1, 0xb3, 0x1e, 0xd3, 0xcf, 0xb3, 0x0c, 0x05, 0xbf, 0x1a, 0xf1, 0xc8, 0x22, 0x4f, 0xa0, 0x26,
+	0x9f, 0x01, 0x26, 0x4b, 0xc5, 0xcf, 0x19, 0xf7, 0x96, 0x73, 0x70, 0xb1, 0x0d, 0x7e, 0x1f, 0x20,
+	0x7d, 0x8c, 0x56, 0x29, 0x89, 0xdc, 0xe3, 0xb6, 0x8a, 0x03, 0xf2, 0x2f, 0xd7, 0xda, 0x4b, 0x38,
+	0xc0, 0x0e, 0x41, 0x25, 0x11, 0xd0, 0x0b, 0xf9, 0x2c, 0xc3, 0x8f, 0xa0, 0xa1, 0xbd, 0x47, 0xab,
+	0xa6, 0x2f, 0xff, 0x96, 0xad, 0x9a, 0xbe, 0x82, 0xe7, 0x6b, 0xed, 0x1e, 0xd6, 0xbe, 0x68, 0xcf,
+	0xb1, 0xda, 0x63, 0xff, 0x34, 0x18, 0x71, 0x02, 0xb6, 0x40, 0x67, 0xd0, 0x32, 0x1e, 0x9d, 0x55,
+	0x12, 0x5a, 0xf4, 0xa4, 0xad, 0x92, 0xd0, 0xc2, 0x77, 0x6a, 0x25, 0x9f, 0xd9, 0xf3, 0xac, 0x9d,
+	0x73, 0x24, 0xd1, 0x5a, 0xfa, 0x01, 0x34, 0xb4, 0x07, 0x64, 0xd5, 0x58, 0xf2, 0x6f, 0xd5, 0xaa,
+	0xb1, 0x14, 0xbd, 0x37, 0xbb, 0x88, 0x6d, 0xb4, 0x6d, 0x64, 0x05, 0x7c, 0x68, 0x89, 0xd5, 0xfd,
+	0x63, 0x68, 0x9b, 0x4f, 0xca, 0x2a, 0xd9, 0x2f, 0x7c, 0x9c, 0x56, 0xc9, 0xfe, 0x94, 0x77, 0x68,
+	0x05, 0x4b, 0x3f, 0x58, 0x50, 0x8d, 0x3c, 0xfc, 0x54, 0x1c, 0x6d, 0xfe, 0x8c, 0x7c, 0x97, 0x29,
+	0x38, 0xf1, 0x00, 0x18, 0x59, 0xd6, 0xb8, 0x56, 0x7f, 0x26, 0x4c, 0xc9, 0x4b, 0xee, 0xad, 0x30,
+	0x93, 0x99, 0xf9, 0x53, 0x51, 0xcf, 0x60, 0x41, 0x31, 0xb3, 0x7a, 0xd0, 0x2b, 0x56, 0x63, 0x28,
+	0x7c, 0x37, 0xac, 0xd7, 0xc9, 0x62, 0x1f, 0x59, 0x7c, 0xfb, 0xc3, 0x67, 0x93, 0xb4, 0xed, 0x4f,
+	0x7f, 0xd3, 0x4b, 0xdb, 0xfe, 0x8c, 0xd7, 0x95, 0xb2, 0xdb, 0x5f, 0xe2, 0xb3, 0x3a, 0x02, 0x98,
+	0xcb, 0x5c, 0xfe, 0x54, 0xe2, 0x55, 0x7c, 0x3f, 0xbf, 0x77, 0xe7, 0xea, 0x3b, 0xa3, 0xa6, 0x2a,
+	0x92, 0xda, 0xf4, 0xa1, 0x7c, 0xfc, 0xe3, 0xf7, 0xa0, 0xa9, 0xbf, 0x84, 0x49, 0x74, 0x9d, 0x90,
+	0x6d, 0xe9, 0x66, 0x21, 0xce, 0xe4, 0x12, 0xd2, 0xd4, 0x9b, 0x21, 0xdf, 0x83, 0x25, 0x35, 0xcd,
+	0xfa, 0x7d, 0xc2, 0x98, 0xbc, 0x53, 0x70, 0xcb, 0xd0, 0x98, 0xec, 0x1b, 0x53, 0xaf, 0x21, 0x3e,
+	0xb2, 0x18, 0xf7, 0x99, 0xcf, 0x0b, 0xa6, 0x3b, 0x4f, 0xd1, 0xab, 0x8a, 0xe9, 0xce, 0x53, 0xf8,
+	0x26, 0xa1, 0xe4, 0x3e, 0xb2, 0x60, 0xcc, 0x11, 0x3f, 0xc1, 0x45, 0x7e, 0x00, 0x73, 0xda, 0x8d,
+	0xed, 0xc3, 0xcb, 0xa0, 0xaf, 0x24, 0x29, 0xff, 0x3a, 0x4f, 0xaf, 0xc8, 0x2d, 0xb5, 0x97, 0xb1,
+	0xfe, 0x79, 0xdb, 0x98, 0x1c, 0x26, 0x45, 0x1b, 0xd0, 0xd0, 0x6f, 0x83, 0x5f, 0x51, 0xef, 0xb2,
+	0x86, 0xd2, 0x9f, 0x7e, 0x79, 0x64, 0x91, 0x5d, 0xe8, 0x64, 0x5f, 0xa9, 0x50, 0x3a, 0xa5, 0xe8,
+	0x65, 0x8d, 0x5e, 0x06, 0x69, 0xbc, 0x6d, 0x41, 0x0e, 0xf8, 0xb9, 0x60, 0xf5, 0xf3, 0x0a, 0x61,
+	0x94, 0xdd, 0xd5, 0xcd, 0x9f, 0x5d, 0x50, 0xb5, 0x15, 0xfd, 0xe0, 0xc6, 0x7d, 0xeb, 0x91, 0x45,
+	0xfe, 0x9e, 0x05, 0x4d, 0xe3, 0xee, 0xb7, 0x71, 0xca, 0x32, 0x33, 0xce, 0xae, 0x8e, 0xd3, 0x07,
+	0x6a, 0x3b, 0x38, 0x89, 0xbb, 0x0f, 0xbe, 0x63, 0x2c, 0xd2, 0xa7, 0x46, 0xa4, 0x77, 0x25, 0xfb,
+	0x1b, 0x0b, 0x9f, 0x65, 0x09, 0xf4, 0x17, 0x96, 0x3e, 0x7b, 0x64, 0x91, 0x7f, 0x62, 0x41, 0xdb,
+	0x4c, 0xe1, 0xa8, 0xe1, 0x16, 0x26, 0x8b, 0x14, 0x2b, 0x4d, 0xc9, 0xfb, 0xfc, 0x00, 0x7b, 0x79,
+	0xf4, 0xc0, 0x31, 0x7a, 0x29, 0x1e, 0xc6, 0xfc, 0xd5, 0x7a, 0x4b, 0x3e, 0xe6, 0x3f, 0x79, 0x24,
+	0xb3, 0xd7, 0x24, 0xff, 0x13, 0x39, 0x8a, 0xfd, 0xf4, 0x1f, 0x94, 0xc1, 0x45, 0xf8, 0x11, 0xff,
+	0x6d, 0x01, 0x99, 0x02, 0x65, 0x5c, 0xfc, 0xb6, 0xdf, 0xdb, 0xf7, 0x70, 0x4c, 0x77, 0xec, 0x1b,
+	0xc6, 0x98, 0xb2, 0x86, 0xc7, 0x1a, 0xef, 0x9d, 0xf8, 0x2d, 0x98, 0x74, 0xe7, 0xcc, 0xfd, 0x3e,
+	0xcc, 0xf4, 0x4e, 0x8e, 0x78, 0x27, 0x05, 0xb9, 0x21, 0x6a, 0x6f, 0x59, 0x8d, 0xfd, 0x00, 0xfb,
+	0x7a, 0xcf, 0x7e, 0x67, 0x6a, 0x5f, 0x1f, 0x62, 0x22, 0x86, 0xf5, 0xf8, 0x00, 0x20, 0x3d, 0x6d,
+	0x42, 0x32, 0x27, 0x1d, 0x94, 0x02, 0xca, 0x1f, 0x48, 0x31, 0xe5, 0x59, 0x1e, 0x88, 0x60, 0x35,
+	0xfe, 0x90, 0xab, 0xd3, 0x1d, 0x79, 0x46, 0x42, 0xb7, 0xbe, 0xcc, 0x23, 0x21, 0x86, 0xf5, 0x95,
+	0xad, 0xdf, 0x50, 0xa6, 0xea, 0xc0, 0xc5, 0x0b, 0x68, 0xed, 0x86, 0xe1, 0xab, 0xc9, 0x58, 0x1d,
+	0x80, 0x34, 0x73, 0xa4, 0xdb, 0x5e, 0x7c, 0xd6, 0xcb, 0x8c, 0xc2, 0xbe, 0x8b, 0x55, 0xf5, 0x48,
+	0x57, 0xab, 0xea, 0xe1, 0xa7, 0xe9, 0x49, 0x96, 0xcf, 0x88, 0x07, 0xf3, 0x4a, 0x47, 0xab, 0x8e,
+	0xf7, 0xcc, 0x6a, 0x0c, 0xcd, 0x9c, 0x6d, 0xc2, 0x70, 0x13, 0x64, 0x6f, 0x1f, 0xc6, 0xb2, 0xce,
+	0x47, 0x16, 0x39, 0x80, 0xe6, 0x26, 0xed, 0xe3, 0xb5, 0x50, 0x4c, 0x34, 0x2e, 0x18, 0xc9, 0x2a,
+	0x9e, 0xa1, 0xec, 0xb5, 0x0c, 0xa0, 0xb9, 0x6f, 0x8d, 0xbd, 0xcb, 0x88, 0xfe, 0xe4, 0xe1, 0xa7,
+	0x22, 0x85, 0xf9, 0x99, 0xdc, 0xb7, 0x64, 0x8e, 0xd7, 0xd8, 0xb7, 0x32, 0x49, 0x61, 0x63, 0xdf,
+	0xca, 0x25, 0x85, 0x8d, 0xa9, 0x96, 0x39, 0x66, 0x32, 0x84, 0xf9, 0x5c, 0x1e, 0x59, 0x6d, 0x59,
+	0xd3, 0xb2, 0xcf, 0xbd, 0xbb, 0xd3, 0x09, 0xcc, 0xd6, 0x1e, 0x98, 0xad, 0x1d, 0x42, 0x8b, 0xbf,
+	0xfa, 0x74, 0x4c, 0xf9, 0x8d, 0x8f, 0xcc, 0x03, 0x02, 0xfa, 0x7d, 0x92, 0xec, 0x06, 0x83, 0x38,
+	0xd3, 0xc2, 0xe1, 0xcf, 0x47, 0xfe, 0x10, 0x1a, 0xcf, 0x68, 0x22, 0xaf, 0x78, 0x28, 0x1b, 0x3b,
+	0x73, 0xe7, 0xa3, 0x57, 0x70, 0x43, 0xc4, 0xe4, 0x19, 0xac, 0xed, 0x21, 0x1d, 0x9c, 0x52, 0xae,
+	0x9c, 0x5c, 0x7f, 0xf0, 0x19, 0xf9, 0x1d, 0xac, 0x5c, 0x5d, 0xb8, 0x5b, 0xd2, 0xce, 0xeb, 0xeb,
+	0x95, 0xcf, 0x65, 0xe0, 0x45, 0x35, 0x07, 0xe1, 0x80, 0x6a, 0xb6, 0x5e, 0x00, 0x0d, 0xed, 0xc2,
+	0xae, 0x12, 0xa0, 0xfc, 0xfd, 0x66, 0x25, 0x40, 0x05, 0xf7, 0x7b, 0xed, 0xfb, 0xd8, 0x8e, 0x4d,
+	0xee, 0xa6, 0xed, 0xf0, 0x3b, 0xbd, 0x69, 0x4b, 0x0f, 0x3f, 0xf5, 0x46, 0xc9, 0x67, 0xe4, 0x25,
+	0xbe, 0xc1, 0xaa, 0x5f, 0x61, 0x49, 0x9d, 0x86, 0xec, 0x6d, 0x17, 0x35, 0x59, 0x1a, 0xca, 0x74,
+	0x24, 0x78, 0x53, 0x68, 0xc9, 0x7d, 0x13, 0xe0, 0x30, 0x09, 0xc7, 0x9b, 0x1e, 0x1d, 0x85, 0x41,
+	0xaa, 0x6b, 0xd3, 0x0b, 0x14, 0xa9, 0xfe, 0xd2, 0x6e, 0x51, 0x90, 0x97, 0x9a, 0x97, 0x65, 0xdc,
+	0x02, 0x92, 0xcc, 0x35, 0xf5, 0x8e, 0x85, 0x9a, 0x90, 0x82, 0x7b, 0x16, 0x8f, 0x2c, 0xb2, 0x06,
+	0x90, 0x1e, 0x24, 0x50, 0x3e, 0x53, 0xee, 0x8c, 0x82, 0x52, 0x7b, 0x05, 0xa7, 0x0e, 0x0e, 0xa0,
+	0x9e, 0xa6, 0x5d, 0x97, 0xd3, 0xeb, 0xfb, 0x46, 0x92, 0x56, 0xed, 0xe0, 0xb9, 0x64, 0xa8, 0xdd,
+	0xc1, 0xa9, 0x02, 0x52, 0x63, 0x53, 0x85, 0x19, 0x4e, 0x1f, 0x16, 0x78, 0x07, 0x95, 0xb9, 0x84,
+	0x07, 0xff, 0xd5, 0x53, 0xbb, 0xf9, 0x84, 0xa4, 0x92, 0xe6, 0xc2, 0x7c, 0x9a, 0x11, 0xfa, 0x61,
+	0xdc, 0xca, 0x2f, 0x1d, 0x30, 0xd5, 0x3c, 0x82, 0xf9, 0x5c, 0x8a, 0x46, 0x89, 0xf4, 0xb4, 0x1c,
+	0x9c, 0x12, 0xe9, 0xa9, 0xd9, 0x1d, 0xfb, 0x3a, 0x36, 0x39, 0x67, 0x03, 0xba, 0x7a, 0x17, 0x7e,
+	0xd2, 0x3f, 0x63, 0xcd, 0xfd, 0x91, 0x05, 0x0b, 0x05, 0x19, 0x18, 0xf2, 0xae, 0x8c, 0x1a, 0x4c,
+	0xcd, 0xce, 0xf4, 0x0a, 0x03, 0xf4, 0xf6, 0x21, 0xb6, 0xf3, 0x9c, 0x7c, 0x62, 0x6c, 0x6c, 0x3c,
+	0x36, 0x2e, 0x24, 0xf3, 0x4a, 0xa3, 0xa2, 0xd0, 0xa2, 0xf8, 0x09, 0x2c, 0xf3, 0x8e, 0xac, 0x0d,
+	0x87, 0x99, 0xe4, 0xc1, 0x9d, 0xdc, 0xcf, 0xa2, 0x1a, 0x49, 0x91, 0xde, 0xf4, 0x9f, 0x4d, 0x9d,
+	0x62, 0x4e, 0xf3, 0xae, 0x92, 0x09, 0x74, 0xb2, 0x01, 0x79, 0x32, 0xbd, 0xae, 0xde, 0x3b, 0x86,
+	0xff, 0x5b, 0x10, 0xc4, 0xff, 0x32, 0x36, 0xf6, 0x8e, 0xdd, 0x2b, 0x9a, 0x17, 0xee, 0x12, 0xb3,
+	0xf5, 0xf8, 0x2b, 0x2a, 0x7b, 0x90, 0x19, 0xa7, 0x6c, 0x60, 0x5a, 0xba, 0x43, 0x79, 0xe0, 0xc5,
+	0xc9, 0x87, 0xf7, 0xb0, 0xf9, 0xbb, 0xf6, 0xcd, 0xa2, 0xe6, 0x23, 0xfe, 0x09, 0xf7, 0xc5, 0x97,
+	0xb3, 0x72, 0x2d, 0x7b, 0x70, 0xb7, 0x68, 0xbd, 0xa7, 0xfa, 0x42, 0x99, 0xb9, 0xbe, 0x86, 0xb6,
+	0x5d, 0x53, 0xcf, 0x16, 0x28, 0xf1, 0x29, 0x48, 0x4b, 0x28, 0xf1, 0x29, 0x4a, 0x2f, 0x98, 0x76,
+	0x8d, 0x4c, 0x2c, 0x7c, 0x6c, 0x3d, 0x58, 0x7f, 0xff, 0x07, 0x5f, 0x3e, 0xf5, 0x93, 0xb3, 0xc9,
+	0xf1, 0x4a, 0x3f, 0x1c, 0x3d, 0x1c, 0xca, 0x68, 0xa3, 0xb8, 0x0c, 0xf7, 0x70, 0x18, 0x0c, 0x1e,
+	0x62, 0xb5, 0xc7, 0x33, 0xf8, 0x3b, 0xce, 0x5f, 0xff, 0xff, 0x01, 0x00, 0x00, 0xff, 0xff, 0xbd,
+	0x86, 0x9b, 0xea, 0xf9, 0x79, 0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
diff --git a/lnrpc/rpc.proto b/lnrpc/rpc.proto
index 1ba8537c6..dea8d061c 100644
--- a/lnrpc/rpc.proto
+++ b/lnrpc/rpc.proto
@@ -2046,31 +2046,6 @@ message QueryRoutesRequest {
     REST, the values must be encoded as base64.
     */
     map<uint64, bytes> dest_custom_records = 13;
-
-    /**
-    The channel id of the channel that must be taken to the first hop. If zero,
-    any channel may be used.
-    */
-    uint64 outgoing_chan_id = 14 [jstype = JS_STRING];
-
-    /**
-    The pubkey of the last hop of the route. If empty, any hop may be used.
-    */
-    bytes last_hop_pubkey = 15;
-
-    /**
-    Optional route hints to reach the destination through private channels.
-    */
-    repeated lnrpc.RouteHint route_hints = 16;
-
-    /**
-    Features assumed to be supported by the final node. All transitive feature
-    depdencies must also be set properly. For a given feature bit pair, either
-    optional or remote may be set, but not both. If this field is nil or empty,
-    the router will try to load destination features from the graph as a
-    fallback.
-    */
-    repeated lnrpc.FeatureBit dest_features = 17;
 }
 
 message NodePair {
diff --git a/lnrpc/rpc.swagger.json b/lnrpc/rpc.swagger.json
index d9dfea09c..38e17e8da 100644
--- a/lnrpc/rpc.swagger.json
+++ b/lnrpc/rpc.swagger.json
@@ -812,52 +812,6 @@
             "required": false,
             "type": "integer",
             "format": "int64"
-          },
-          {
-            "name": "outgoing_chan_id",
-            "description": "*\nThe channel id of the channel that must be taken to the first hop. If zero,\nany channel may be used.",
-            "in": "query",
-            "required": false,
-            "type": "string",
-            "format": "uint64"
-          },
-          {
-            "name": "last_hop_pubkey",
-            "description": "*\nThe pubkey of the last hop of the route. If empty, any hop may be used.",
-            "in": "query",
-            "required": false,
-            "type": "string",
-            "format": "byte"
-          },
-          {
-            "name": "dest_features",
-            "description": "*\nFeatures assumed to be supported by the final node. All transitive feature\ndepdencies must also be set properly. For a given feature bit pair, either\noptional or remote may be set, but not both. If this field is nil or empty,\nthe router will try to load destination features from the graph as a\nfallback.",
-            "in": "query",
-            "required": false,
-            "type": "array",
-            "items": {
-              "type": "string",
-              "enum": [
-                "DATALOSS_PROTECT_REQ",
-                "DATALOSS_PROTECT_OPT",
-                "INITIAL_ROUING_SYNC",
-                "UPFRONT_SHUTDOWN_SCRIPT_REQ",
-                "UPFRONT_SHUTDOWN_SCRIPT_OPT",
-                "GOSSIP_QUERIES_REQ",
-                "GOSSIP_QUERIES_OPT",
-                "TLV_ONION_REQ",
-                "TLV_ONION_OPT",
-                "EXT_GOSSIP_QUERIES_REQ",
-                "EXT_GOSSIP_QUERIES_OPT",
-                "STATIC_REMOTE_KEY_REQ",
-                "STATIC_REMOTE_KEY_OPT",
-                "PAYMENT_ADDR_REQ",
-                "PAYMENT_ADDR_OPT",
-                "MPP_REQ",
-                "MPP_OPT"
-              ]
-            },
-            "collectionFormat": "multi"
           }
         ],
         "tags": [
diff --git a/lnrpc/walletrpc/walletkit.pb.go b/lnrpc/walletrpc/walletkit.pb.go
index 9737602c5..e2ded0cc0 100644
--- a/lnrpc/walletrpc/walletkit.pb.go
+++ b/lnrpc/walletrpc/walletkit.pb.go
@@ -531,7 +531,15 @@ type PendingSweep struct {
 	//
 	//The next height of the chain at which we'll attempt to broadcast the
 	//sweep transaction of the output.
-	NextBroadcastHeight  uint32   `protobuf:"varint,6,opt,name=next_broadcast_height,proto3" json:"next_broadcast_height,omitempty"`
+	NextBroadcastHeight uint32 `protobuf:"varint,6,opt,name=next_broadcast_height,proto3" json:"next_broadcast_height,omitempty"`
+	// The requested confirmation target for this output.
+	RequestedConfTarget uint32 `protobuf:"varint,8,opt,name=requested_conf_target,proto3" json:"requested_conf_target,omitempty"`
+	// The requested fee rate, expressed in sat/byte, for this output.
+	RequestedSatPerByte uint32 `protobuf:"varint,9,opt,name=requested_sat_per_byte,proto3" json:"requested_sat_per_byte,omitempty"`
+	//*
+	//Whether this input must be force-swept. This means that it is swept even
+	//if it has a negative yield.
+	Force                bool     `protobuf:"varint,7,opt,name=force,proto3" json:"force,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
@@ -604,6 +612,27 @@ func (m *PendingSweep) GetNextBroadcastHeight() uint32 {
 	return 0
 }
 
+func (m *PendingSweep) GetRequestedConfTarget() uint32 {
+	if m != nil {
+		return m.RequestedConfTarget
+	}
+	return 0
+}
+
+func (m *PendingSweep) GetRequestedSatPerByte() uint32 {
+	if m != nil {
+		return m.RequestedSatPerByte
+	}
+	return 0
+}
+
+func (m *PendingSweep) GetForce() bool {
+	if m != nil {
+		return m.Force
+	}
+	return false
+}
+
 type PendingSweepsRequest struct {
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
@@ -684,7 +713,11 @@ type BumpFeeRequest struct {
 	//
 	//The fee rate, expressed in sat/byte, that should be used to spend the input
 	//with.
-	SatPerByte           uint32   `protobuf:"varint,3,opt,name=sat_per_byte,proto3" json:"sat_per_byte,omitempty"`
+	SatPerByte uint32 `protobuf:"varint,3,opt,name=sat_per_byte,proto3" json:"sat_per_byte,omitempty"`
+	//*
+	//Whether this input must be force-swept. This means that it is swept even
+	//if it has a negative yield.
+	Force                bool     `protobuf:"varint,4,opt,name=force,proto3" json:"force,omitempty"`
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
 	XXX_sizecache        int32    `json:"-"`
@@ -736,6 +769,13 @@ func (m *BumpFeeRequest) GetSatPerByte() uint32 {
 	return 0
 }
 
+func (m *BumpFeeRequest) GetForce() bool {
+	if m != nil {
+		return m.Force
+	}
+	return false
+}
+
 type BumpFeeResponse struct {
 	XXX_NoUnkeyedLiteral struct{} `json:"-"`
 	XXX_unrecognized     []byte   `json:"-"`
@@ -788,68 +828,72 @@ func init() {
 func init() { proto.RegisterFile("walletrpc/walletkit.proto", fileDescriptor_6cc6942ac78249e5) }
 
 var fileDescriptor_6cc6942ac78249e5 = []byte{
-	// 976 bytes of a gzipped FileDescriptorProto
-	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0xed, 0x6e, 0xe2, 0x46,
-	0x14, 0x2d, 0x21, 0x61, 0xc3, 0x05, 0x12, 0x67, 0x08, 0x89, 0x97, 0xcd, 0x6e, 0xa8, 0xfb, 0x21,
-	0xd4, 0x56, 0xa0, 0x66, 0xdb, 0xaa, 0x6a, 0x7f, 0xb4, 0x59, 0x70, 0x44, 0xc4, 0x87, 0xa9, 0xed,
-	0x6c, 0xba, 0x55, 0xa5, 0x91, 0x81, 0x59, 0xb0, 0x00, 0xdb, 0x3b, 0x1e, 0x0a, 0xfc, 0x6d, 0x9f,
-	0xa4, 0xaf, 0xd1, 0xa7, 0xab, 0x3c, 0xb6, 0xc9, 0x18, 0x92, 0x4a, 0xfd, 0x15, 0xe7, 0x9c, 0x73,
-	0xcf, 0xdc, 0xb9, 0x33, 0x73, 0x04, 0x3c, 0x5f, 0x5a, 0xb3, 0x19, 0x61, 0xd4, 0x1b, 0xd6, 0xc3,
-	0xaf, 0xa9, 0xcd, 0x6a, 0x1e, 0x75, 0x99, 0x8b, 0xb2, 0x1b, 0xaa, 0x9c, 0xa5, 0xde, 0x30, 0x44,
-	0xcb, 0xa7, 0xbe, 0x3d, 0x76, 0x02, 0x79, 0xf0, 0x97, 0xd0, 0x10, 0x55, 0x7e, 0x81, 0x4c, 0x9b,
-	0xac, 0x75, 0xf2, 0x01, 0x55, 0x41, 0x9a, 0x92, 0x35, 0x7e, 0x6f, 0x3b, 0x63, 0x42, 0xb1, 0x47,
-	0x6d, 0x87, 0xc9, 0xa9, 0x4a, 0xaa, 0x7a, 0xa0, 0x1f, 0x4d, 0xc9, 0xfa, 0x86, 0xc3, 0xfd, 0x00,
-	0x45, 0x2f, 0x01, 0xb8, 0xd2, 0x9a, 0xdb, 0xb3, 0xb5, 0xbc, 0xc7, 0x35, 0xd9, 0x40, 0xc3, 0x01,
-	0xa5, 0x00, 0xb9, 0xeb, 0xd1, 0x88, 0xea, 0xe4, 0xc3, 0x82, 0xf8, 0x4c, 0x51, 0x20, 0x1f, 0xfe,
-	0xeb, 0x7b, 0xae, 0xe3, 0x13, 0x84, 0x60, 0xdf, 0x1a, 0x8d, 0x28, 0xf7, 0xce, 0xea, 0xfc, 0x5b,
-	0xf9, 0x14, 0x72, 0x26, 0xb5, 0x1c, 0xdf, 0x1a, 0x32, 0xdb, 0x75, 0x50, 0x09, 0x32, 0x6c, 0x85,
-	0x27, 0x64, 0xc5, 0x45, 0x79, 0xfd, 0x80, 0xad, 0x5a, 0x64, 0xa5, 0x7c, 0x07, 0xc7, 0xfd, 0xc5,
-	0x60, 0x66, 0xfb, 0x93, 0x8d, 0xd9, 0x27, 0x50, 0xf0, 0x42, 0x08, 0x13, 0x4a, 0xdd, 0xd8, 0x35,
-	0x1f, 0x81, 0x6a, 0x80, 0x29, 0xbf, 0x03, 0x32, 0x88, 0x33, 0xd2, 0x16, 0xcc, 0x5b, 0x30, 0x3f,
-	0xea, 0x0b, 0x5d, 0x00, 0xf8, 0x16, 0xc3, 0x1e, 0xa1, 0x78, 0xba, 0xe4, 0x75, 0x69, 0xfd, 0xd0,
-	0xb7, 0x58, 0x9f, 0xd0, 0xf6, 0x12, 0x55, 0xe1, 0x99, 0x1b, 0xea, 0xe5, 0xbd, 0x4a, 0xba, 0x9a,
-	0xbb, 0x3a, 0xaa, 0x45, 0xf3, 0xab, 0x99, 0x2b, 0x6d, 0xc1, 0xf4, 0x98, 0x56, 0xbe, 0x82, 0x62,
-	0xc2, 0x3d, 0xea, 0xac, 0x04, 0x19, 0x6a, 0x2d, 0x31, 0xdb, 0xec, 0x81, 0x5a, 0x4b, 0x73, 0xa5,
-	0x7c, 0x0b, 0x48, 0xf5, 0x99, 0x3d, 0xb7, 0x18, 0xb9, 0x21, 0x24, 0xee, 0xe5, 0x12, 0x72, 0x43,
-	0xd7, 0x79, 0x8f, 0x99, 0x45, 0xc7, 0x24, 0x1e, 0x3b, 0x04, 0x90, 0xc9, 0x11, 0xe5, 0x35, 0x14,
-	0x13, 0x65, 0xd1, 0x22, 0xff, 0xb9, 0x07, 0xe5, 0xef, 0x3d, 0xc8, 0xf7, 0x89, 0x33, 0xb2, 0x9d,
-	0xb1, 0xb1, 0x24, 0xc4, 0x43, 0x5f, 0xc2, 0x61, 0xd0, 0xb5, 0x1b, 0x1f, 0x6d, 0xee, 0xea, 0xb8,
-	0x36, 0xe3, 0x7b, 0xd2, 0x16, 0xac, 0x1f, 0xc0, 0xfa, 0x46, 0x80, 0x7e, 0x80, 0xfc, 0xd2, 0x66,
-	0x0e, 0xf1, 0x7d, 0xcc, 0xd6, 0x1e, 0xe1, 0xe7, 0x7c, 0x74, 0x75, 0x56, 0xdb, 0x5c, 0xae, 0xda,
-	0x7d, 0x48, 0x9b, 0x6b, 0x8f, 0xe8, 0x09, 0x2d, 0x7a, 0x05, 0x60, 0xcd, 0xdd, 0x85, 0xc3, 0xb0,
-	0x6f, 0x31, 0x39, 0x5d, 0x49, 0x55, 0x0b, 0xba, 0x80, 0x20, 0x05, 0xf2, 0x71, 0xdf, 0x83, 0x35,
-	0x23, 0xf2, 0x3e, 0x57, 0x24, 0x30, 0x54, 0x03, 0x34, 0xa0, 0xae, 0x35, 0x1a, 0x5a, 0x3e, 0xc3,
-	0x16, 0x63, 0x64, 0xee, 0x31, 0x5f, 0x3e, 0xe0, 0xca, 0x47, 0x18, 0xf4, 0x0d, 0x94, 0x1c, 0xb2,
-	0x62, 0xf8, 0x81, 0x9a, 0x10, 0x7b, 0x3c, 0x61, 0x72, 0x86, 0x97, 0x3c, 0x4e, 0x2a, 0x67, 0x70,
-	0x2a, 0x8e, 0x28, 0xbe, 0x1d, 0xca, 0xaf, 0x50, 0xda, 0xc2, 0xa3, 0x91, 0xff, 0x04, 0x47, 0x5e,
-	0x48, 0x60, 0x9f, 0x33, 0x72, 0x8a, 0xdf, 0x8f, 0x73, 0x61, 0x30, 0x62, 0xa5, 0xbe, 0x25, 0x57,
-	0xfe, 0x4a, 0xc1, 0xd1, 0x9b, 0xc5, 0xdc, 0x13, 0x8e, 0xff, 0x7f, 0x9d, 0x4b, 0x05, 0x72, 0xe1,
-	0x35, 0xc1, 0xc1, 0xfd, 0xe0, 0xc7, 0x52, 0xd0, 0x45, 0x68, 0x67, 0xba, 0xe9, 0xdd, 0xe9, 0x2a,
-	0x27, 0x70, 0xbc, 0x69, 0x22, 0xdc, 0xd9, 0x17, 0x7f, 0xa6, 0x21, 0x27, 0x1c, 0x29, 0x2a, 0xc2,
-	0xf1, 0x5d, 0xaf, 0xdd, 0xd3, 0xee, 0x7b, 0xf8, 0xfe, 0xd6, 0xec, 0xa9, 0x86, 0x21, 0x7d, 0x84,
-	0x64, 0x38, 0x6d, 0x68, 0xdd, 0xee, 0xad, 0xd9, 0x55, 0x7b, 0x26, 0x36, 0x6f, 0xbb, 0x2a, 0xee,
-	0x68, 0x8d, 0xb6, 0x94, 0x42, 0xe7, 0x50, 0x14, 0x98, 0x9e, 0x86, 0x9b, 0x6a, 0xe7, 0xfa, 0x9d,
-	0xb4, 0x87, 0x4a, 0x70, 0x22, 0x10, 0xba, 0xfa, 0x56, 0x6b, 0xab, 0x52, 0x3a, 0xd0, 0xb7, 0xcc,
-	0x4e, 0x03, 0x6b, 0x37, 0x37, 0xaa, 0xae, 0x36, 0x63, 0x62, 0x3f, 0x58, 0x82, 0x13, 0xd7, 0x8d,
-	0x86, 0xda, 0x37, 0x1f, 0x98, 0x03, 0xf4, 0x19, 0x7c, 0x9c, 0x28, 0x09, 0x96, 0xd7, 0xee, 0x4c,
-	0x6c, 0xa8, 0x0d, 0xad, 0xd7, 0xc4, 0x1d, 0xf5, 0xad, 0xda, 0x91, 0x32, 0xe8, 0x73, 0x50, 0x92,
-	0x06, 0xc6, 0x5d, 0xa3, 0xa1, 0x1a, 0x46, 0x52, 0xf7, 0x0c, 0x5d, 0xc2, 0x8b, 0xad, 0x0e, 0xba,
-	0x9a, 0xa9, 0xc6, 0xae, 0xd2, 0x21, 0xaa, 0xc0, 0xc5, 0x76, 0x27, 0x5c, 0x11, 0xf9, 0x49, 0x59,
-	0x74, 0x01, 0x32, 0x57, 0x88, 0xce, 0x71, 0xbf, 0x80, 0x4e, 0x41, 0x8a, 0x26, 0x87, 0xdb, 0xea,
-	0x3b, 0xdc, 0xba, 0x36, 0x5a, 0x52, 0x0e, 0xbd, 0x80, 0xf3, 0x9e, 0x6a, 0x04, 0x76, 0x3b, 0x64,
-	0xfe, 0xea, 0x9f, 0x7d, 0xc8, 0xde, 0xf3, 0x8b, 0xd4, 0xb6, 0x83, 0x37, 0x58, 0x68, 0x12, 0x6a,
-	0xff, 0x41, 0x7a, 0x64, 0xc5, 0xda, 0x64, 0x8d, 0x4e, 0x84, 0x5b, 0x16, 0xe6, 0x76, 0xf9, 0x6c,
-	0x13, 0x4c, 0x6d, 0xb2, 0x6e, 0x12, 0x7f, 0x48, 0x6d, 0x8f, 0xb9, 0x14, 0x7d, 0x0f, 0xd9, 0xb0,
-	0x36, 0xa8, 0x2b, 0x8a, 0xa2, 0x8e, 0x3b, 0xb4, 0x98, 0x4b, 0x9f, 0xac, 0xfc, 0x11, 0x0e, 0x83,
-	0xf5, 0x82, 0xd4, 0x46, 0xe2, 0x7b, 0x17, 0x52, 0xbd, 0x7c, 0xbe, 0x83, 0x47, 0xef, 0xa3, 0x05,
-	0x28, 0x0a, 0x69, 0x31, 0xd1, 0x45, 0x1b, 0x01, 0x2f, 0x97, 0xc5, 0x57, 0xb3, 0x95, 0xed, 0x1d,
-	0xc8, 0x09, 0xc1, 0x8a, 0x5e, 0x0a, 0xd2, 0xdd, 0x38, 0x2f, 0xbf, 0x7a, 0x8a, 0x7e, 0x70, 0x13,
-	0x12, 0x34, 0xe1, 0xb6, 0x1b, 0xc8, 0x09, 0xb7, 0xc7, 0x82, 0x57, 0x87, 0x42, 0x22, 0x1e, 0xd0,
-	0xe5, 0x13, 0xcf, 0x7f, 0xd3, 0x5f, 0xe5, 0x69, 0x41, 0xe4, 0xf9, 0x33, 0x3c, 0x8b, 0x9e, 0x24,
-	0x7a, 0x2e, 0x88, 0x93, 0x59, 0x91, 0x98, 0xd8, 0xd6, 0x0b, 0x7e, 0xf3, 0xf5, 0x6f, 0xf5, 0xb1,
-	0xcd, 0x26, 0x8b, 0x41, 0x6d, 0xe8, 0xce, 0xeb, 0xb3, 0x20, 0xe0, 0x1c, 0xdb, 0x19, 0x3b, 0x84,
-	0x2d, 0x5d, 0x3a, 0xad, 0xcf, 0x9c, 0x51, 0x9d, 0xc7, 0x4a, 0x7d, 0x63, 0x31, 0xc8, 0xf0, 0x9f,
-	0x01, 0xaf, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xd3, 0xc7, 0x77, 0x11, 0x4f, 0x08, 0x00, 0x00,
+	// 1026 bytes of a gzipped FileDescriptorProto
+	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x56, 0x6d, 0x6f, 0xe2, 0xc6,
+	0x13, 0xff, 0x13, 0x12, 0x02, 0x03, 0x24, 0xce, 0xe6, 0xc9, 0xc7, 0xe5, 0x2e, 0xfc, 0xdd, 0x07,
+	0xa1, 0xb6, 0x02, 0x35, 0xd7, 0x9e, 0xaa, 0xf6, 0x45, 0x9b, 0x23, 0x8e, 0x12, 0x41, 0x30, 0xb5,
+	0x9d, 0x4b, 0xaf, 0xaa, 0xb4, 0x72, 0x60, 0x03, 0x16, 0x60, 0xfb, 0xd6, 0x4b, 0x81, 0xb7, 0xfd,
+	0x16, 0xfd, 0x00, 0xfd, 0x12, 0xfd, 0x74, 0x95, 0xd7, 0x0f, 0x59, 0xf3, 0x50, 0xa9, 0xaf, 0x82,
+	0x7f, 0xbf, 0xdf, 0xcc, 0xce, 0xce, 0xcc, 0xce, 0x04, 0x5e, 0xcc, 0xac, 0xf1, 0x98, 0x30, 0xea,
+	0xf5, 0x1a, 0xe1, 0xaf, 0x91, 0xcd, 0xea, 0x1e, 0x75, 0x99, 0x8b, 0x0a, 0x09, 0x55, 0x29, 0x50,
+	0xaf, 0x17, 0xa2, 0x95, 0x23, 0xdf, 0x1e, 0x38, 0x81, 0x3c, 0xf8, 0x4b, 0x68, 0x88, 0x2a, 0x3f,
+	0x43, 0xae, 0x45, 0x16, 0x3a, 0xf9, 0x88, 0x6a, 0x20, 0x8d, 0xc8, 0x02, 0x3f, 0xd9, 0xce, 0x80,
+	0x50, 0xec, 0x51, 0xdb, 0x61, 0x72, 0xa6, 0x9a, 0xa9, 0xed, 0xe8, 0x7b, 0x23, 0xb2, 0xb8, 0xe6,
+	0x70, 0x37, 0x40, 0xd1, 0x2b, 0x00, 0xae, 0xb4, 0x26, 0xf6, 0x78, 0x21, 0x6f, 0x71, 0x4d, 0x21,
+	0xd0, 0x70, 0x40, 0x29, 0x43, 0xf1, 0xb2, 0xdf, 0xa7, 0x3a, 0xf9, 0x38, 0x25, 0x3e, 0x53, 0x14,
+	0x28, 0x85, 0x9f, 0xbe, 0xe7, 0x3a, 0x3e, 0x41, 0x08, 0xb6, 0xad, 0x7e, 0x9f, 0x72, 0xdf, 0x05,
+	0x9d, 0xff, 0x56, 0x3e, 0x85, 0xa2, 0x49, 0x2d, 0xc7, 0xb7, 0x7a, 0xcc, 0x76, 0x1d, 0x74, 0x0c,
+	0x39, 0x36, 0xc7, 0x43, 0x32, 0xe7, 0xa2, 0x92, 0xbe, 0xc3, 0xe6, 0x37, 0x64, 0xae, 0xbc, 0x85,
+	0xfd, 0xee, 0xf4, 0x71, 0x6c, 0xfb, 0xc3, 0xc4, 0xd9, 0x27, 0x50, 0xf6, 0x42, 0x08, 0x13, 0x4a,
+	0xdd, 0xd8, 0x6b, 0x29, 0x02, 0xd5, 0x00, 0x53, 0x7e, 0x03, 0x64, 0x10, 0xa7, 0xaf, 0x4d, 0x99,
+	0x37, 0x65, 0x7e, 0x14, 0x17, 0x3a, 0x03, 0xf0, 0x2d, 0x86, 0x3d, 0x42, 0xf1, 0x68, 0xc6, 0xed,
+	0xb2, 0x7a, 0xde, 0xb7, 0x58, 0x97, 0xd0, 0xd6, 0x0c, 0xd5, 0x60, 0xd7, 0x0d, 0xf5, 0xf2, 0x56,
+	0x35, 0x5b, 0x2b, 0x5e, 0xec, 0xd5, 0xa3, 0xfc, 0xd5, 0xcd, 0xb9, 0x36, 0x65, 0x7a, 0x4c, 0x2b,
+	0x5f, 0xc1, 0x61, 0xca, 0x7b, 0x14, 0xd9, 0x31, 0xe4, 0xa8, 0x35, 0xc3, 0x2c, 0xb9, 0x03, 0xb5,
+	0x66, 0xe6, 0x5c, 0xf9, 0x16, 0x90, 0xea, 0x33, 0x7b, 0x62, 0x31, 0x72, 0x4d, 0x48, 0x1c, 0xcb,
+	0x39, 0x14, 0x7b, 0xae, 0xf3, 0x84, 0x99, 0x45, 0x07, 0x24, 0x4e, 0x3b, 0x04, 0x90, 0xc9, 0x11,
+	0xe5, 0x0d, 0x1c, 0xa6, 0xcc, 0xa2, 0x43, 0xfe, 0xf5, 0x0e, 0xca, 0x5f, 0x59, 0x28, 0x75, 0x89,
+	0xd3, 0xb7, 0x9d, 0x81, 0x31, 0x23, 0xc4, 0x43, 0x5f, 0x42, 0x3e, 0x88, 0xda, 0x8d, 0x4b, 0x5b,
+	0xbc, 0xd8, 0xaf, 0x8f, 0xf9, 0x9d, 0xb4, 0x29, 0xeb, 0x06, 0xb0, 0x9e, 0x08, 0xd0, 0xf7, 0x50,
+	0x9a, 0xd9, 0xcc, 0x21, 0xbe, 0x8f, 0xd9, 0xc2, 0x23, 0xbc, 0xce, 0x7b, 0x17, 0x27, 0xf5, 0xa4,
+	0xb9, 0xea, 0x0f, 0x21, 0x6d, 0x2e, 0x3c, 0xa2, 0xa7, 0xb4, 0xe8, 0x35, 0x80, 0x35, 0x71, 0xa7,
+	0x0e, 0xc3, 0xbe, 0xc5, 0xe4, 0x6c, 0x35, 0x53, 0x2b, 0xeb, 0x02, 0x82, 0x14, 0x28, 0xc5, 0x71,
+	0x3f, 0x2e, 0x18, 0x91, 0xb7, 0xb9, 0x22, 0x85, 0xa1, 0x3a, 0xa0, 0x47, 0xea, 0x5a, 0xfd, 0x9e,
+	0xe5, 0x33, 0x6c, 0x31, 0x46, 0x26, 0x1e, 0xf3, 0xe5, 0x1d, 0xae, 0x5c, 0xc3, 0xa0, 0x6f, 0xe0,
+	0xd8, 0x21, 0x73, 0x86, 0x9f, 0xa9, 0x21, 0xb1, 0x07, 0x43, 0x26, 0xe7, 0xb8, 0xc9, 0x7a, 0x32,
+	0xb0, 0xa2, 0x61, 0x11, 0x48, 0x1f, 0x8b, 0x35, 0xc8, 0x87, 0x56, 0x6b, 0x49, 0xf4, 0x16, 0x4e,
+	0x9e, 0x89, 0xd4, 0x4d, 0x0a, 0xdc, 0x6c, 0x03, 0x8b, 0x8e, 0x60, 0xe7, 0xc9, 0xa5, 0x3d, 0x22,
+	0xef, 0x56, 0x33, 0xb5, 0xbc, 0x1e, 0x7e, 0x28, 0x27, 0x70, 0x24, 0x96, 0x29, 0xee, 0x50, 0xe5,
+	0x17, 0x38, 0x5e, 0xc2, 0xa3, 0xb2, 0xff, 0x08, 0x7b, 0x5e, 0x48, 0x60, 0x9f, 0x33, 0x72, 0x86,
+	0xf7, 0xe8, 0xa9, 0x50, 0x1c, 0xd1, 0x52, 0x5f, 0x92, 0x2b, 0x7f, 0x66, 0x60, 0xef, 0xdd, 0x74,
+	0xe2, 0x09, 0x2d, 0xf8, 0x9f, 0x7a, 0xa3, 0x0a, 0xc5, 0x30, 0x13, 0x3c, 0x2b, 0xbc, 0x35, 0xca,
+	0xba, 0x08, 0xad, 0x54, 0x38, 0xbb, 0xa6, 0xc2, 0x49, 0x36, 0xb6, 0xc5, 0x6c, 0x1c, 0xc0, 0x7e,
+	0x12, 0x5a, 0x78, 0xdf, 0x2f, 0xfe, 0xc8, 0x42, 0x51, 0x68, 0x36, 0x74, 0x08, 0xfb, 0xf7, 0x9d,
+	0x56, 0x47, 0x7b, 0xe8, 0xe0, 0x87, 0x5b, 0xb3, 0xa3, 0x1a, 0x86, 0xf4, 0x3f, 0x24, 0xc3, 0x51,
+	0x53, 0xbb, 0xbb, 0xbb, 0x35, 0xef, 0xd4, 0x8e, 0x89, 0xcd, 0xdb, 0x3b, 0x15, 0xb7, 0xb5, 0x66,
+	0x4b, 0xca, 0xa0, 0x53, 0x38, 0x14, 0x98, 0x8e, 0x86, 0xaf, 0xd4, 0xf6, 0xe5, 0x07, 0x69, 0x0b,
+	0x1d, 0xc3, 0x81, 0x40, 0xe8, 0xea, 0x7b, 0xad, 0xa5, 0x4a, 0xd9, 0x40, 0x7f, 0x63, 0xb6, 0x9b,
+	0x58, 0xbb, 0xbe, 0x56, 0x75, 0xf5, 0x2a, 0x26, 0xb6, 0x83, 0x23, 0x38, 0x71, 0xd9, 0x6c, 0xaa,
+	0x5d, 0xf3, 0x99, 0xd9, 0x41, 0x9f, 0xc1, 0xff, 0x53, 0x26, 0xc1, 0xf1, 0xda, 0xbd, 0x89, 0x0d,
+	0xb5, 0xa9, 0x75, 0xae, 0x70, 0x5b, 0x7d, 0xaf, 0xb6, 0xa5, 0x1c, 0xfa, 0x1c, 0x94, 0xb4, 0x03,
+	0xe3, 0xbe, 0xd9, 0x54, 0x0d, 0x23, 0xad, 0xdb, 0x45, 0xe7, 0xf0, 0x72, 0x29, 0x82, 0x3b, 0xcd,
+	0x54, 0x63, 0xaf, 0x52, 0x1e, 0x55, 0xe1, 0x6c, 0x39, 0x12, 0xae, 0x88, 0xfc, 0x49, 0x05, 0x74,
+	0x06, 0x32, 0x57, 0x88, 0x9e, 0xe3, 0x78, 0x01, 0x1d, 0x81, 0x14, 0x65, 0x0e, 0xb7, 0xd4, 0x0f,
+	0xf8, 0xe6, 0xd2, 0xb8, 0x91, 0x8a, 0xe8, 0x25, 0x9c, 0x76, 0x54, 0x23, 0x70, 0xb7, 0x42, 0x96,
+	0x2e, 0xfe, 0xde, 0x86, 0xc2, 0x03, 0x6f, 0xaf, 0x96, 0x1d, 0x4c, 0x87, 0xf2, 0x15, 0xa1, 0xf6,
+	0xef, 0xa4, 0x43, 0xe6, 0xac, 0x45, 0x16, 0xe8, 0x40, 0xe8, 0xbd, 0x70, 0xa3, 0x54, 0x4e, 0x92,
+	0x91, 0xd9, 0x22, 0x8b, 0x2b, 0xe2, 0xf7, 0xa8, 0xed, 0x31, 0x97, 0xa2, 0xef, 0xa0, 0x10, 0xda,
+	0x06, 0x76, 0x87, 0xa2, 0xa8, 0xed, 0xf6, 0x2c, 0xe6, 0xd2, 0x8d, 0x96, 0x3f, 0x40, 0x3e, 0x38,
+	0x2f, 0xd8, 0x27, 0x48, 0x9c, 0x44, 0xc2, 0xbe, 0xa9, 0x9c, 0xae, 0xe0, 0xd1, 0xab, 0xb9, 0x01,
+	0x14, 0xad, 0x0f, 0x71, 0xd7, 0x88, 0x6e, 0x04, 0xbc, 0x52, 0x11, 0xdf, 0xd2, 0xd2, 0xd6, 0x69,
+	0x43, 0x51, 0x18, 0xf9, 0xe8, 0x95, 0x20, 0x5d, 0x5d, 0x34, 0x95, 0xd7, 0x9b, 0xe8, 0x67, 0x6f,
+	0xc2, 0x6c, 0x4f, 0x79, 0x5b, 0x5d, 0x15, 0x29, 0x6f, 0xeb, 0x56, 0x82, 0x0e, 0xe5, 0xd4, 0xd0,
+	0x40, 0xe7, 0x1b, 0x86, 0x42, 0x12, 0x5f, 0x75, 0xb3, 0x20, 0xf2, 0xf9, 0x13, 0xec, 0x46, 0x4f,
+	0x12, 0xbd, 0x10, 0xc4, 0xe9, 0x09, 0x92, 0xca, 0xd8, 0xd2, 0x0b, 0x7e, 0xf7, 0xf5, 0xaf, 0x8d,
+	0x81, 0xcd, 0x86, 0xd3, 0xc7, 0x7a, 0xcf, 0x9d, 0x34, 0xc6, 0xc1, 0xe8, 0x75, 0x6c, 0x67, 0xe0,
+	0x10, 0x36, 0x73, 0xe9, 0xa8, 0x31, 0x76, 0xfa, 0x0d, 0x3e, 0x6c, 0x1a, 0x89, 0x8b, 0xc7, 0x1c,
+	0xff, 0x07, 0xe5, 0xcd, 0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x5a, 0x4e, 0xaf, 0xaf, 0xe9, 0x08,
+	0x00, 0x00,
 }
 
 // Reference imports to suppress errors if they are not otherwise used.
diff --git a/lnrpc/walletrpc/walletkit.proto b/lnrpc/walletrpc/walletkit.proto
index 96441025b..446e79fe3 100644
--- a/lnrpc/walletrpc/walletkit.proto
+++ b/lnrpc/walletrpc/walletkit.proto
@@ -191,6 +191,18 @@ message PendingSweep {
     sweep transaction of the output.
     */
     uint32 next_broadcast_height = 6 [json_name = "next_broadcast_height"];
+
+    // The requested confirmation target for this output.
+    uint32 requested_conf_target = 8 [json_name = "requested_conf_target"];
+
+    // The requested fee rate, expressed in sat/byte, for this output.
+    uint32 requested_sat_per_byte = 9 [json_name = "requested_sat_per_byte"];
+
+    /**
+    Whether this input must be force-swept. This means that it is swept even
+    if it has a negative yield.
+    */
+    bool force = 7 [json_name = "force"];
 }
 
 message PendingSweepsRequest {
@@ -215,6 +227,12 @@ message BumpFeeRequest {
     with.
     */
     uint32 sat_per_byte = 3 [json_name = "sat_per_byte"];
+
+    /**
+    Whether this input must be force-swept. This means that it is swept even
+    if it has a negative yield.
+    */
+    bool force = 4 [json_name = "force"];
 }
 
 message BumpFeeResponse {
diff --git a/lnrpc/walletrpc/walletkit_server.go b/lnrpc/walletrpc/walletkit_server.go
index 53a25e7bc..42534c653 100644
--- a/lnrpc/walletrpc/walletkit_server.go
+++ b/lnrpc/walletrpc/walletkit_server.go
@@ -404,6 +404,9 @@ func (w *WalletKit) PendingSweeps(ctx context.Context,
 		broadcastAttempts := uint32(pendingInput.BroadcastAttempts)
 		nextBroadcastHeight := uint32(pendingInput.NextBroadcastHeight)
 
+		requestedFee := pendingInput.Params.Fee
+		requestedFeeRate := uint32(requestedFee.FeeRate.FeePerKVByte() / 1000)
+
 		rpcPendingSweeps = append(rpcPendingSweeps, &PendingSweep{
 			Outpoint:            op,
 			WitnessType:         witnessType,
@@ -411,6 +414,9 @@ func (w *WalletKit) PendingSweeps(ctx context.Context,
 			SatPerByte:          satPerByte,
 			BroadcastAttempts:   broadcastAttempts,
 			NextBroadcastHeight: nextBroadcastHeight,
+			RequestedSatPerByte: requestedFeeRate,
+			RequestedConfTarget: requestedFee.ConfTarget,
+			Force:               pendingInput.Params.Force,
 		})
 	}
 
@@ -480,7 +486,12 @@ 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.
-	_, err = w.cfg.Sweeper.BumpFee(*op, feePreference)
+	params := sweep.Params{
+		Fee:   feePreference,
+		Force: in.Force,
+	}
+
+	_, err = w.cfg.Sweeper.UpdateParams(*op, params)
 	switch err {
 	case nil:
 		return &BumpFeeResponse{}, nil
diff --git a/lnwire/query_short_chan_ids.go b/lnwire/query_short_chan_ids.go
index 91f25227a..afa019463 100644
--- a/lnwire/query_short_chan_ids.go
+++ b/lnwire/query_short_chan_ids.go
@@ -132,7 +132,7 @@ func decodeShortChanIDs(r io.Reader) (ShortChanIDEncoding, []ShortChannelID, err
 	}
 
 	if numBytesResp == 0 {
-		return 0, nil, nil
+		return 0, nil, fmt.Errorf("No encoding type specified")
 	}
 
 	queryBody := make([]byte, numBytesResp)
@@ -148,13 +148,6 @@ func decodeShortChanIDs(r io.Reader) (ShortChanIDEncoding, []ShortChannelID, err
 	// as that was just the encoding type.
 	queryBody = queryBody[1:]
 
-	// At this point, if there's no body remaining, then only the encoding
-	// type was specified, meaning that there're no further bytes to be
-	// parsed.
-	if len(queryBody) == 0 {
-		return encodingType, nil, nil
-	}
-
 	// Otherwise, depending on the encoding type, we'll decode the encode
 	// short channel ID's in a different manner.
 	switch encodingType {
@@ -345,43 +338,27 @@ func encodeShortChanIDs(w io.Writer, encodingType ShortChanIDEncoding,
 		var buf bytes.Buffer
 		zlibWriter := zlib.NewWriter(&buf)
 
-		// If we don't have anything at all to write, then we'll write
-		// an empty payload so we don't include things like the zlib
-		// header when the remote party is expecting no actual short
-		// channel IDs.
-		var compressedPayload []byte
-		if len(shortChanIDs) > 0 {
-			// Next, we'll write out all the channel ID's directly
-			// into the zlib writer, which will do compressing on
-			// the fly.
-			for _, chanID := range shortChanIDs {
-				err := WriteElements(zlibWriter, chanID)
-				if err != nil {
-					return fmt.Errorf("unable to write short chan "+
-						"ID: %v", err)
-				}
-			}
-
-			// Now that we've written all the elements, we'll
-			// ensure the compressed stream is written to the
-			// underlying buffer.
-			if err := zlibWriter.Close(); err != nil {
-				return fmt.Errorf("unable to finalize "+
-					"compression: %v", err)
+		// Next, we'll write out all the channel ID's directly into the
+		// zlib writer, which will do compressing on the fly.
+		for _, chanID := range shortChanIDs {
+			err := WriteElements(zlibWriter, chanID)
+			if err != nil {
+				return fmt.Errorf("unable to write short chan "+
+					"ID: %v", err)
 			}
+		}
 
-			compressedPayload = buf.Bytes()
+		// Now that we've written all the elements, we'll ensure the
+		// compressed stream is written to the underlying buffer.
+		if err := zlibWriter.Close(); err != nil {
+			return fmt.Errorf("unable to finalize "+
+				"compression: %v", err)
 		}
 
 		// Now that we have all the items compressed, we can compute
 		// what the total payload size will be. We add one to account
 		// for the byte to encode the type.
-		//
-		// If we don't have any actual bytes to write, then we'll end
-		// up emitting one byte for the length, followed by the
-		// encoding type, and nothing more. The spec isn't 100% clear
-		// in this area, but we do this as this is what most of the
-		// other implementations do.
+		compressedPayload := buf.Bytes()
 		numBytesBody := len(compressedPayload) + 1
 
 		// Finally, we can write out the number of bytes, the
diff --git a/mobile/bindings.go b/mobile/bindings.go
index 3a2936b84..0945a17b4 100644
--- a/mobile/bindings.go
+++ b/mobile/bindings.go
@@ -20,10 +20,6 @@ import (
 // The unlockerReady callback is called when the WalletUnlocker service is
 // ready, and rpcReady is called after the wallet has been unlocked and lnd is
 // ready to accept RPC calls.
-//
-// NOTE: On mobile platforms the '--lnddir` argument should be set to the
-// current app directory in order to ensure lnd has the permissions needed to
-// write to it.
 func Start(extraArgs string, unlockerReady, rpcReady Callback) {
 	// Split the argument string on "--" to get separated command line
 	// arguments.
@@ -78,18 +74,6 @@ func Start(extraArgs string, unlockerReady, rpcReady Callback) {
 	// callbacks when the RPC servers are ready to accept calls.
 	go func() {
 		<-unlockerListening
-
-		// We must set the TLS certificates in order to properly
-		// authenticate with the wallet unlocker service.
-		auth, err := lnd.WalletUnlockerAuthOptions()
-		if err != nil {
-			unlockerReady.OnError(err)
-			return
-		}
-
-		// Add the auth options to the listener's dial options.
-		addWalletUnlockerLisDialOption(auth...)
-
 		unlockerReady.OnResponse([]byte{})
 	}()
 
diff --git a/routing/payment_session_source.go b/routing/payment_session_source.go
index 05295b58d..b5175cf78 100644
--- a/routing/payment_session_source.go
+++ b/routing/payment_session_source.go
@@ -50,55 +50,6 @@ type SessionSource struct {
 func (m *SessionSource) NewPaymentSession(routeHints [][]zpay32.HopHint,
 	target route.Vertex) (PaymentSession, error) {
 
-	edges, err := RouteHintsToEdges(routeHints, target)
-	if err != nil {
-		return nil, err
-	}
-
-	sourceNode, err := m.Graph.SourceNode()
-	if err != nil {
-		return nil, err
-	}
-
-	getBandwidthHints := func() (map[uint64]lnwire.MilliSatoshi,
-		error) {
-
-		return generateBandwidthHints(sourceNode, m.QueryBandwidth)
-	}
-
-	return &paymentSession{
-		additionalEdges:   edges,
-		getBandwidthHints: getBandwidthHints,
-		sessionSource:     m,
-		pathFinder:        findPath,
-	}, nil
-}
-
-// NewPaymentSessionForRoute creates a new paymentSession instance that is just
-// used for failure reporting to missioncontrol.
-func (m *SessionSource) NewPaymentSessionForRoute(preBuiltRoute *route.Route) PaymentSession {
-	return &paymentSession{
-		sessionSource: m,
-		preBuiltRoute: preBuiltRoute,
-	}
-}
-
-// NewPaymentSessionEmpty creates a new paymentSession instance that is empty,
-// and will be exhausted immediately. Used for failure reporting to
-// missioncontrol for resumed payment we don't want to make more attempts for.
-func (m *SessionSource) NewPaymentSessionEmpty() PaymentSession {
-	return &paymentSession{
-		sessionSource:      m,
-		preBuiltRoute:      &route.Route{},
-		preBuiltRouteTried: true,
-	}
-}
-
-// RouteHintsToEdges converts a list of invoice route hints to an edge map that
-// can be passed into pathfinding.
-func RouteHintsToEdges(routeHints [][]zpay32.HopHint, target route.Vertex) (
-	map[route.Vertex][]*channeldb.ChannelEdgePolicy, error) {
-
 	edges := make(map[route.Vertex][]*channeldb.ChannelEdgePolicy)
 
 	// Traverse through all of the available hop hints and include them in
@@ -146,5 +97,41 @@ func RouteHintsToEdges(routeHints [][]zpay32.HopHint, target route.Vertex) (
 		}
 	}
 
-	return edges, nil
+	sourceNode, err := m.Graph.SourceNode()
+	if err != nil {
+		return nil, err
+	}
+
+	getBandwidthHints := func() (map[uint64]lnwire.MilliSatoshi,
+		error) {
+
+		return generateBandwidthHints(sourceNode, m.QueryBandwidth)
+	}
+
+	return &paymentSession{
+		additionalEdges:   edges,
+		getBandwidthHints: getBandwidthHints,
+		sessionSource:     m,
+		pathFinder:        findPath,
+	}, nil
+}
+
+// NewPaymentSessionForRoute creates a new paymentSession instance that is just
+// used for failure reporting to missioncontrol.
+func (m *SessionSource) NewPaymentSessionForRoute(preBuiltRoute *route.Route) PaymentSession {
+	return &paymentSession{
+		sessionSource: m,
+		preBuiltRoute: preBuiltRoute,
+	}
+}
+
+// NewPaymentSessionEmpty creates a new paymentSession instance that is empty,
+// and will be exhausted immediately. Used for failure reporting to
+// missioncontrol for resumed payment we don't want to make more attempts for.
+func (m *SessionSource) NewPaymentSessionEmpty() PaymentSession {
+	return &paymentSession{
+		sessionSource:      m,
+		preBuiltRoute:      &route.Route{},
+		preBuiltRouteTried: true,
+	}
 }
diff --git a/routing/router.go b/routing/router.go
index 8efa63e03..d09383e9f 100644
--- a/routing/router.go
+++ b/routing/router.go
@@ -1402,8 +1402,14 @@ type routingMsg struct {
 func (r *ChannelRouter) FindRoute(source, target route.Vertex,
 	amt lnwire.MilliSatoshi, restrictions *RestrictParams,
 	destCustomRecords record.CustomSet,
-	routeHints map[route.Vertex][]*channeldb.ChannelEdgePolicy,
-	finalExpiry uint16) (*route.Route, error) {
+	finalExpiry ...uint16) (*route.Route, error) {
+
+	var finalCLTVDelta uint16
+	if len(finalExpiry) == 0 {
+		finalCLTVDelta = zpay32.DefaultFinalCLTVDelta
+	} else {
+		finalCLTVDelta = finalExpiry[0]
+	}
 
 	log.Debugf("Searching for path to %v, sending %v", target, amt)
 
@@ -1434,13 +1440,12 @@ func (r *ChannelRouter) FindRoute(source, target route.Vertex,
 
 	// Now that we know the destination is reachable within the graph, we'll
 	// execute our path finding algorithm.
-	finalHtlcExpiry := currentHeight + int32(finalExpiry)
+	finalHtlcExpiry := currentHeight + int32(finalCLTVDelta)
 
 	path, err := findPath(
 		&graphParams{
-			graph:           r.cfg.Graph,
-			bandwidthHints:  bandwidthHints,
-			additionalEdges: routeHints,
+			graph:          r.cfg.Graph,
+			bandwidthHints: bandwidthHints,
 		},
 		restrictions, &r.cfg.PathFindingConfig,
 		source, target, amt, finalHtlcExpiry,
@@ -1454,7 +1459,7 @@ func (r *ChannelRouter) FindRoute(source, target route.Vertex,
 		source, path, uint32(currentHeight),
 		finalHopParams{
 			amt:       amt,
-			cltvDelta: finalExpiry,
+			cltvDelta: finalCLTVDelta,
 			records:   destCustomRecords,
 		},
 	)
@@ -1905,33 +1910,18 @@ func (r *ChannelRouter) processSendError(paymentID uint64, rt *route.Route,
 
 		return reportFail(nil, nil)
 	}
-
-	// If the error is a ClearTextError, we have received a valid wire
-	// failure message, either from our own outgoing link or from a node
-	// down the route. If the error is not related to the propagation of
-	// our payment, we can stop trying because an internal error has
-	// occurred.
-	rtErr, ok := sendErr.(htlcswitch.ClearTextError)
+	// If an internal, non-forwarding error occurred, we can stop
+	// trying.
+	fErr, ok := sendErr.(*htlcswitch.ForwardingError)
 	if !ok {
 		return &internalErrorReason
 	}
 
-	// failureSourceIdx is the index of the node that the failure occurred
-	// at. If the ClearTextError received is not a ForwardingError the
-	// payment error occurred at our node, so we leave this value as 0
-	// to indicate that the failure occurred locally. If the error is a
-	// ForwardingError, it did not originate at our node, so we set
-	// failureSourceIdx to the index of the node where the failure occurred.
-	failureSourceIdx := 0
-	source, ok := rtErr.(*htlcswitch.ForwardingError)
-	if ok {
-		failureSourceIdx = source.FailureSourceIdx
-	}
+	failureMessage := fErr.FailureMessage
+	failureSourceIdx := fErr.FailureSourceIdx
 
-	// Extract the wire failure and apply channel update if it contains one.
-	// If we received an unknown failure message from a node along the
-	// route, the failure message will be nil.
-	failureMessage := rtErr.WireMessage()
+	// Apply channel update if the error contains one. For unknown
+	// failures, failureMessage is nil.
 	if failureMessage != nil {
 		err := r.tryApplyChannelUpdate(
 			rt, failureSourceIdx, failureMessage,
diff --git a/rpcserver.go b/rpcserver.go
index 11227fe64..d16ad7901 100644
--- a/rpcserver.go
+++ b/rpcserver.go
@@ -562,12 +562,11 @@ func newRPCServer(s *server, macService *macaroons.Service,
 
 			return info.NodeKey1Bytes, info.NodeKey2Bytes, nil
 		},
-		FindRoute:             s.chanRouter.FindRoute,
-		MissionControl:        s.missionControl,
-		ActiveNetParams:       activeNetParams.Params,
-		Tower:                 s.controlTower,
-		MaxTotalTimelock:      cfg.MaxOutgoingCltvExpiry,
-		DefaultFinalCltvDelta: uint16(cfg.Bitcoin.TimeLockDelta),
+		FindRoute:        s.chanRouter.FindRoute,
+		MissionControl:   s.missionControl,
+		ActiveNetParams:  activeNetParams.Params,
+		Tower:            s.controlTower,
+		MaxTotalTimelock: cfg.MaxOutgoingCltvExpiry,
 	}
 
 	genInvoiceFeatures := func() *lnwire.FeatureVector {
@@ -3536,11 +3535,7 @@ func (r *rpcServer) extractPaymentIntent(rpcPayReq *rpcPaymentRequest) (rpcPayme
 	if rpcPayReq.FinalCltvDelta != 0 {
 		payIntent.cltvDelta = uint16(rpcPayReq.FinalCltvDelta)
 	} else {
-		// If no final cltv delta is given, assume the default that we
-		// use when creating an invoice. We do not assume the default of
-		// 9 blocks that is defined in BOLT-11, because this is never
-		// enough for other lnd nodes.
-		payIntent.cltvDelta = uint16(cfg.Bitcoin.TimeLockDelta)
+		payIntent.cltvDelta = zpay32.DefaultFinalCLTVDelta
 	}
 
 	// If the user is manually specifying payment details, then the payment
diff --git a/sweep/sweeper.go b/sweep/sweeper.go
index 9114cf8a4..fc65879f6 100644
--- a/sweep/sweeper.go
+++ b/sweep/sweeper.go
@@ -67,6 +67,15 @@ type Params struct {
 	// 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", p.Fee, p.Force)
 }
 
 // pendingInput is created when an input reaches the main loop for the first
@@ -146,19 +155,22 @@ type PendingInput struct {
 	// NextBroadcastHeight is the next height of the chain at which we'll
 	// attempt to broadcast a transaction sweeping the input.
 	NextBroadcastHeight uint32
+
+	// Params contains the sweep parameters for this pending request.
+	Params Params
 }
 
-// bumpFeeReq is an internal message we'll use to represent an external caller's
-// intent to bump the fee rate of a given input.
-type bumpFeeReq struct {
-	input         wire.OutPoint
-	feePreference FeePreference
-	responseChan  chan *bumpFeeResp
+// updateReq is an internal message we'll use to represent an external caller's
+// intent to update the sweep parameters of a given input.
+type updateReq struct {
+	input        wire.OutPoint
+	params       Params
+	responseChan chan *updateResp
 }
 
-// bumpFeeResp is an internal message we'll use to hand off the response of a
-// bumpFeeReq from the UtxoSweeper's main event loop back to the caller.
-type bumpFeeResp struct {
+// updateResp is an internal message we'll use to hand off the response of a
+// updateReq from the UtxoSweeper's main event loop back to the caller.
+type updateResp struct {
 	resultChan chan Result
 	err        error
 }
@@ -178,9 +190,9 @@ type UtxoSweeper struct {
 	// UtxoSweeper is attempting to sweep.
 	pendingSweepsReqs chan *pendingSweepsReq
 
-	// bumpFeeReqs is a channel that will be sent requests by external
+	// updateReqs is a channel that will be sent requests by external
 	// callers who wish to bump the fee rate of a given input.
-	bumpFeeReqs chan *bumpFeeReq
+	updateReqs chan *updateReq
 
 	// pendingInputs is the total set of inputs the UtxoSweeper has been
 	// requested to sweep.
@@ -287,7 +299,7 @@ func New(cfg *UtxoSweeperConfig) *UtxoSweeper {
 		cfg:               cfg,
 		newInputs:         make(chan *sweepInputMessage),
 		spendChan:         make(chan *chainntnfs.SpendDetail),
-		bumpFeeReqs:       make(chan *bumpFeeReq),
+		updateReqs:        make(chan *updateReq),
 		pendingSweepsReqs: make(chan *pendingSweepsReq),
 		quit:              make(chan struct{}),
 		pendingInputs:     make(pendingInputs),
@@ -390,10 +402,10 @@ func (s *UtxoSweeper) SweepInput(input input.Input,
 	}
 
 	log.Infof("Sweep request received: out_point=%v, witness_type=%v, "+
-		"time_lock=%v, amount=%v, fee_preference=%v", input.OutPoint(),
-		input.WitnessType(), input.BlocksToMaturity(),
+		"time_lock=%v, amount=%v, fee_preference=%v, force=%v",
+		input.OutPoint(), input.WitnessType(), input.BlocksToMaturity(),
 		btcutil.Amount(input.SignDesc().Output.Value),
-		params.Fee)
+		params.Fee, params.Force)
 
 	sweeperInput := &sweepInputMessage{
 		input:      input,
@@ -572,9 +584,9 @@ func (s *UtxoSweeper) collector(blockEpochs <-chan *chainntnfs.BlockEpoch) {
 
 		// A new external request has been received to bump the fee rate
 		// of a given input.
-		case req := <-s.bumpFeeReqs:
-			resultChan, err := s.handleBumpFeeReq(req, bestHeight)
-			req.responseChan <- &bumpFeeResp{
+		case req := <-s.updateReqs:
+			resultChan, err := s.handleUpdateReq(req, bestHeight)
+			req.responseChan <- &updateResp{
 				resultChan: resultChan,
 				err:        err,
 			}
@@ -1034,34 +1046,35 @@ func (s *UtxoSweeper) handlePendingSweepsReq(
 			LastFeeRate:         pendingInput.lastFeeRate,
 			BroadcastAttempts:   pendingInput.publishAttempts,
 			NextBroadcastHeight: uint32(pendingInput.minPublishHeight),
+			Params:              pendingInput.params,
 		}
 	}
 
 	return pendingInputs
 }
 
-// BumpFee allows bumping the fee of an input being swept by the UtxoSweeper
-// according to the provided fee preference. The new fee preference 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 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.
 //
 // NOTE: This currently doesn't do any fee rate validation to ensure that a bump
 // is actually successful. The responsibility of doing so should be handled by
 // the caller.
-func (s *UtxoSweeper) BumpFee(input wire.OutPoint,
-	feePreference FeePreference) (chan Result, error) {
+func (s *UtxoSweeper) UpdateParams(input wire.OutPoint,
+	params Params) (chan Result, error) {
 
 	// Ensure the client provided a sane fee preference.
-	if _, err := s.feeRateForPreference(feePreference); err != nil {
+	if _, err := s.feeRateForPreference(params.Fee); err != nil {
 		return nil, err
 	}
 
-	responseChan := make(chan *bumpFeeResp, 1)
+	responseChan := make(chan *updateResp, 1)
 	select {
-	case s.bumpFeeReqs <- &bumpFeeReq{
-		input:         input,
-		feePreference: feePreference,
-		responseChan:  responseChan,
+	case s.updateReqs <- &updateReq{
+		input:        input,
+		params:       params,
+		responseChan: responseChan,
 	}:
 	case <-s.quit:
 		return nil, ErrSweeperShuttingDown
@@ -1075,9 +1088,9 @@ func (s *UtxoSweeper) BumpFee(input wire.OutPoint,
 	}
 }
 
-// handleBumpFeeReq handles a bump fee request by simply updating the inputs fee
-// preference. Currently, no validation is done on the new fee preference to
-// ensure it will properly create a replacement transaction.
+// handleUpdateReq handles an update request by simply updating the sweep
+// parameters of the pending input. Currently, no validation is done on the new
+// fee preference to ensure it will properly create a replacement transaction.
 //
 // TODO(wilmer):
 //   * Validate fee preference to ensure we'll create a valid replacement
@@ -1086,8 +1099,8 @@ func (s *UtxoSweeper) BumpFee(input wire.OutPoint,
 //   * Ensure we don't combine this input with any other unconfirmed inputs that
 //     did not exist in the original sweep transaction, resulting in an invalid
 //     replacement transaction.
-func (s *UtxoSweeper) handleBumpFeeReq(req *bumpFeeReq,
-	bestHeight int32) (chan Result, error) {
+func (s *UtxoSweeper) handleUpdateReq(req *updateReq, bestHeight int32) (
+	chan Result, error) {
 
 	// If the UtxoSweeper is already trying to sweep this input, then we can
 	// simply just increase its fee rate. This will allow the input to be
@@ -1099,10 +1112,10 @@ func (s *UtxoSweeper) handleBumpFeeReq(req *bumpFeeReq,
 		return nil, lnwallet.ErrNotMine
 	}
 
-	log.Debugf("Updating fee preference for %v from %v to %v", req.input,
-		pendingInput.params.Fee, req.feePreference)
+	log.Debugf("Updating sweep parameters for %v from %v to %v", req.input,
+		pendingInput.params, req.params)
 
-	pendingInput.params.Fee = req.feePreference
+	pendingInput.params = req.params
 
 	// We'll reset the input's publish height to the current so that a new
 	// transaction can be created that replaces the transaction currently
diff --git a/sweep/tx_input_set.go b/sweep/tx_input_set.go
index a00ac6ca5..1f21f9602 100644
--- a/sweep/tx_input_set.go
+++ b/sweep/tx_input_set.go
@@ -13,6 +13,23 @@ import (
 	"github.com/lightningnetwork/lnd/lnwallet/chainfee"
 )
 
+// addConstraints defines the constraints to apply when adding an input.
+type addConstraints uint8
+
+const (
+	// constraintsRegular is for regular input sweeps that should have a positive
+	// yield.
+	constraintsRegular addConstraints = iota
+
+	// constraintsWallet is for wallet inputs that are only added to bring up the tx
+	// output value.
+	constraintsWallet
+
+	// constraintsForce is for inputs that should be swept even with a negative
+	// yield at the set fee rate.
+	constraintsForce
+)
+
 // txInputSet is an object that accumulates tx inputs and keeps running counters
 // on various properties of the tx.
 type txInputSet struct {
@@ -45,6 +62,10 @@ type txInputSet struct {
 	// wallet contains wallet functionality required by the input set to
 	// retrieve utxos.
 	wallet Wallet
+
+	// force indicates that this set must be swept even if the total yield
+	// is negative.
+	force bool
 }
 
 // newTxInputSet constructs a new, empty input set.
@@ -78,10 +99,12 @@ func (t *txInputSet) dustLimitReached() bool {
 // add adds a new input to the set. It returns a bool indicating whether the
 // input was added to the set. An input is rejected if it decreases the tx
 // output value after paying fees.
-func (t *txInputSet) add(input input.Input, fromWallet bool) bool {
+func (t *txInputSet) add(input input.Input, constraints addConstraints) bool {
 	// Stop if max inputs is reached. Do not count additional wallet inputs,
 	// because we don't know in advance how many we may need.
-	if !fromWallet && len(t.inputs) >= t.maxInputs {
+	if constraints != constraintsWallet &&
+		len(t.inputs) >= t.maxInputs {
+
 		return false
 	}
 
@@ -108,23 +131,42 @@ func (t *txInputSet) add(input input.Input, fromWallet bool) bool {
 	// added to the set.
 	newOutputValue := newInputTotal - fee
 
-	// If adding this input makes the total output value of the set
-	// decrease, this is a negative yield input. We don't add the input to
-	// the set and return the outcome.
-	if newOutputValue <= t.outputValue {
-		return false
-	}
+	// Initialize new wallet total with the current wallet total. This is
+	// updated below if this input is a wallet input.
+	newWalletTotal := t.walletInputTotal
+
+	// Calculate the yield of this input from the change in tx output value.
+	inputYield := newOutputValue - t.outputValue
+
+	switch constraints {
+
+	// Don't sweep inputs that cost us more to sweep than they give us.
+	case constraintsRegular:
+		if inputYield <= 0 {
+			return false
+		}
+
+	// For force adds, no further constraints apply.
+	case constraintsForce:
+		t.force = true
+
+	// We are attaching a wallet input to raise the tx output value above
+	// the dust limit.
+	case constraintsWallet:
+		// Skip this wallet input if adding it would lower the output
+		// value.
+		if inputYield <= 0 {
+			return false
+		}
 
-	// If this input comes from the wallet, verify that we still gain
-	// something with this transaction.
-	if fromWallet {
 		// Calculate the total value that we spend in this tx from the
 		// wallet if we'd add this wallet input.
-		newWalletTotal := t.walletInputTotal + value
+		newWalletTotal += value
 
 		// In any case, we don't want to lose money by sweeping. If we
 		// don't get more out of the tx then we put in ourselves, do not
-		// add this wallet input.
+		// add this wallet input. If there is at least one force sweep
+		// in the set, this does no longer apply.
 		//
 		// We should only add wallet inputs to get the tx output value
 		// above the dust limit, otherwise we'd only burn into fees.
@@ -134,7 +176,7 @@ func (t *txInputSet) add(input input.Input, fromWallet bool) bool {
 		// value of the wallet input and what we get out of this
 		// transaction. To prevent attaching and locking a big utxo for
 		// very little benefit.
-		if newWalletTotal >= newOutputValue {
+		if !t.force && newWalletTotal >= newOutputValue {
 			log.Debugf("Rejecting wallet input of %v, because it "+
 				"would make a negative yielding transaction "+
 				"(%v)",
@@ -142,17 +184,16 @@ func (t *txInputSet) add(input input.Input, fromWallet bool) bool {
 
 			return false
 		}
-
-		// We've decided to add the wallet input. Increment the total
-		// wallet funds that go into this tx.
-		t.walletInputTotal = newWalletTotal
 	}
 
 	// Update running values.
+	//
+	// TODO: Return new instance?
 	t.inputTotal = newInputTotal
 	t.outputValue = newOutputValue
 	t.inputs = append(t.inputs, input)
 	t.weightEstimate = newWeightEstimate
+	t.walletInputTotal = newWalletTotal
 
 	return true
 }
@@ -167,11 +208,17 @@ func (t *txInputSet) add(input input.Input, fromWallet bool) bool {
 // whole.
 func (t *txInputSet) addPositiveYieldInputs(sweepableInputs []txInput) {
 	for _, input := range sweepableInputs {
+		// Apply relaxed constraints for force sweeps.
+		constraints := constraintsRegular
+		if input.parameters().Force {
+			constraints = constraintsForce
+		}
+
 		// Try to add the input to the transaction. If that doesn't
 		// succeed because it wouldn't increase the output value,
 		// return. Assuming inputs are sorted by yield, any further
 		// inputs wouldn't increase the output value either.
-		if !t.add(input, false) {
+		if !t.add(input, constraints) {
 			return
 		}
 	}
@@ -202,7 +249,7 @@ func (t *txInputSet) tryAddWalletInputsIfNeeded() error {
 
 		// If the wallet input isn't positively-yielding at this fee
 		// rate, skip it.
-		if !t.add(input, true) {
+		if !t.add(input, constraintsWallet) {
 			continue
 		}
 
diff --git a/sweep/txgenerator.go b/sweep/txgenerator.go
index 47c8d3c65..229ecf3eb 100644
--- a/sweep/txgenerator.go
+++ b/sweep/txgenerator.go
@@ -67,6 +67,14 @@ func generateInputPartitionings(sweepableInputs []txInput,
 	}
 
 	sort.Slice(sweepableInputs, func(i, j int) bool {
+		// Because of the specific ordering and termination condition
+		// that is described above, we place force sweeps at the start
+		// of the list. Otherwise we can't be sure that they will be
+		// included in an input set.
+		if sweepableInputs[i].parameters().Force {
+			return true
+		}
+
 		return yields[*sweepableInputs[i].OutPoint()] >
 			yields[*sweepableInputs[j].OutPoint()]
 	})


Test patch:
diff --git a/channeldb/invoice_test.go b/channeldb/invoice_test.go
index 922239e5b..00de13267 100644
--- a/channeldb/invoice_test.go
+++ b/channeldb/invoice_test.go
@@ -2,7 +2,6 @@ package channeldb
 
 import (
 	"crypto/rand"
-	"math"
 	"reflect"
 	"testing"
 	"time"
@@ -15,7 +14,6 @@ import (
 
 var (
 	emptyFeatures = lnwire.NewFeatureVector(nil, lnwire.Features)
-	testNow       = time.Unix(1, 0)
 )
 
 func randInvoice(value lnwire.MilliSatoshi) (*Invoice, error) {
@@ -25,7 +23,9 @@ func randInvoice(value lnwire.MilliSatoshi) (*Invoice, error) {
 	}
 
 	i := &Invoice{
-		CreationDate: testNow,
+		// Use single second precision to avoid false positive test
+		// failures due to the monotonic time component.
+		CreationDate: time.Unix(time.Now().Unix(), 0),
 		Terms: ContractTerm{
 			Expiry:          4000,
 			PaymentPreimage: pre,
@@ -52,21 +52,6 @@ func randInvoice(value lnwire.MilliSatoshi) (*Invoice, error) {
 	return i, nil
 }
 
-// settleTestInvoice settles a test invoice.
-func settleTestInvoice(invoice *Invoice, settleIndex uint64) {
-	invoice.SettleDate = testNow
-	invoice.AmtPaid = invoice.Terms.Value
-	invoice.State = ContractSettled
-	invoice.Htlcs[CircuitKey{}] = &InvoiceHTLC{
-		Amt:           invoice.Terms.Value,
-		AcceptTime:    testNow,
-		ResolveTime:   testNow,
-		State:         HtlcStateSettled,
-		CustomRecords: make(record.CustomSet),
-	}
-	invoice.SettleIndex = settleIndex
-}
-
 // Tests that pending invoices are those which are either in ContractOpen or
 // in ContractAccepted state.
 func TestInvoiceIsPending(t *testing.T) {
@@ -102,7 +87,9 @@ func TestInvoiceWorkflow(t *testing.T) {
 	// Create a fake invoice which we'll use several times in the tests
 	// below.
 	fakeInvoice := &Invoice{
-		CreationDate: testNow,
+		// Use single second precision to avoid false positive test
+		// failures due to the monotonic time component.
+		CreationDate: time.Unix(time.Now().Unix(), 0),
 		Htlcs:        map[CircuitKey]*InvoiceHTLC{},
 	}
 	fakeInvoice.Memo = []byte("memo")
@@ -189,7 +176,7 @@ func TestInvoiceWorkflow(t *testing.T) {
 	amt := lnwire.NewMSatFromSatoshis(1000)
 	invoices := make([]*Invoice, numInvoices+1)
 	invoices[0] = &dbInvoice2
-	for i := 1; i < len(invoices); i++ {
+	for i := 1; i < len(invoices)-1; i++ {
 		invoice, err := randInvoice(amt)
 		if err != nil {
 			t.Fatalf("unable to create invoice: %v", err)
@@ -204,26 +191,20 @@ func TestInvoiceWorkflow(t *testing.T) {
 	}
 
 	// Perform a scan to collect all the active invoices.
-	query := InvoiceQuery{
-		IndexOffset:    0,
-		NumMaxInvoices: math.MaxUint64,
-		PendingOnly:    false,
-	}
-
-	response, err := db.QueryInvoices(query)
+	dbInvoices, err := db.FetchAllInvoices(false)
 	if err != nil {
-		t.Fatalf("invoice query failed: %v", err)
+		t.Fatalf("unable to fetch all invoices: %v", err)
 	}
 
 	// The retrieve list of invoices should be identical as since we're
 	// using big endian, the invoices should be retrieved in ascending
 	// order (and the primary key should be incremented with each
 	// insertion).
-	for i := 0; i < len(invoices); i++ {
-		if !reflect.DeepEqual(*invoices[i], response.Invoices[i]) {
+	for i := 0; i < len(invoices)-1; i++ {
+		if !reflect.DeepEqual(*invoices[i], dbInvoices[i]) {
 			t.Fatalf("retrieved invoices don't match %v vs %v",
 				spew.Sdump(invoices[i]),
-				spew.Sdump(response.Invoices[i]))
+				spew.Sdump(dbInvoices[i]))
 		}
 	}
 }
@@ -304,7 +285,6 @@ func TestInvoiceAddTimeSeries(t *testing.T) {
 	if err != nil {
 		t.Fatalf("unable to make test db: %v", err)
 	}
-	db.Now = func() time.Time { return testNow }
 
 	// We'll start off by creating 20 random invoices, and inserting them
 	// into the database.
@@ -373,8 +353,6 @@ func TestInvoiceAddTimeSeries(t *testing.T) {
 		}
 	}
 
-	var settledInvoices []Invoice
-	var settleIndex uint64 = 1
 	// We'll now only settle the latter half of each of those invoices.
 	for i := 10; i < len(invoices); i++ {
 		invoice := &invoices[i]
@@ -382,19 +360,22 @@ func TestInvoiceAddTimeSeries(t *testing.T) {
 		paymentHash := invoice.Terms.PaymentPreimage.Hash()
 
 		_, err := db.UpdateInvoice(
-			paymentHash, getUpdateInvoice(invoice.Terms.Value),
+			paymentHash, getUpdateInvoice(0),
 		)
 		if err != nil {
 			t.Fatalf("unable to settle invoice: %v", err)
 		}
+	}
 
-		// Create the settled invoice for the expectation set.
-		settleTestInvoice(invoice, settleIndex)
-		settleIndex++
-
-		settledInvoices = append(settledInvoices, *invoice)
+	invoices, err = db.FetchAllInvoices(false)
+	if err != nil {
+		t.Fatalf("unable to fetch invoices: %v", err)
 	}
 
+	// We'll slice off the first 10 invoices, as we only settled the last
+	// 10.
+	invoices = invoices[10:]
+
 	// We'll now prepare an additional set of queries to ensure the settle
 	// time series has properly been maintained in the database.
 	settleQueries := []struct {
@@ -418,7 +399,7 @@ func TestInvoiceAddTimeSeries(t *testing.T) {
 		// being returned, as we only settled those.
 		{
 			sinceSettleIndex: 1,
-			resp:             settledInvoices[1:],
+			resp:             invoices[1:],
 		},
 	}
 
@@ -556,7 +537,7 @@ func TestDuplicateSettleInvoice(t *testing.T) {
 	if err != nil {
 		t.Fatalf("unable to make test db: %v", err)
 	}
-	db.Now = func() time.Time { return testNow }
+	db.Now = func() time.Time { return time.Unix(1, 0) }
 
 	// We'll start out by creating an invoice and writing it to the DB.
 	amt := lnwire.NewMSatFromSatoshis(1000)
@@ -621,6 +602,69 @@ func TestDuplicateSettleInvoice(t *testing.T) {
 	}
 }
 
+// TestFetchAllInvoices tests that FetchAllInvoices works as expected.
+func TestFetchAllInvoices(t *testing.T) {
+	t.Parallel()
+
+	db, cleanUp, err := makeTestDB()
+	defer cleanUp()
+	if err != nil {
+		t.Fatalf("unable to make test db: %v", err)
+	}
+
+	contractStates := []ContractState{
+		ContractOpen, ContractSettled, ContractCanceled, ContractAccepted,
+	}
+
+	numInvoices := len(contractStates) * 2
+
+	var expectedPendingInvoices []Invoice
+	var expectedAllInvoices []Invoice
+
+	for i := 1; i <= numInvoices; i++ {
+		invoice, err := randInvoice(lnwire.MilliSatoshi(i))
+
+		if err != nil {
+			t.Fatalf("unable to create invoice: %v", err)
+		}
+
+		invoice.AddIndex = uint64(i)
+		// Set the contract state of the next invoice such that there's an equal
+		// number for all possbile states.
+		invoice.State = contractStates[i%len(contractStates)]
+
+		paymentHash := invoice.Terms.PaymentPreimage.Hash()
+		if invoice.IsPending() {
+			expectedPendingInvoices = append(expectedPendingInvoices, *invoice)
+		}
+		expectedAllInvoices = append(expectedAllInvoices, *invoice)
+
+		if _, err := db.AddInvoice(invoice, paymentHash); err != nil {
+			t.Fatalf("unable to add invoice: %v", err)
+		}
+	}
+
+	pendingInvoices, err := db.FetchAllInvoices(true)
+	if err != nil {
+		t.Fatalf("unable to fetch all pending invoices: %v", err)
+	}
+
+	allInvoices, err := db.FetchAllInvoices(false)
+	if err != nil {
+		t.Fatalf("unable to fetch all non pending invoices: %v", err)
+	}
+
+	if !reflect.DeepEqual(pendingInvoices, expectedPendingInvoices) {
+		t.Fatalf("pending invoices: %v\n != \n expected einvoices: %v",
+			spew.Sdump(pendingInvoices), spew.Sdump(expectedPendingInvoices))
+	}
+
+	if !reflect.DeepEqual(allInvoices, expectedAllInvoices) {
+		t.Fatalf("pending + non pending: %v\n != \n expected: %v",
+			spew.Sdump(allInvoices), spew.Sdump(expectedAllInvoices))
+	}
+}
+
 // TestQueryInvoices ensures that we can properly query the invoice database for
 // invoices using different types of queries.
 func TestQueryInvoices(t *testing.T) {
@@ -631,19 +675,13 @@ func TestQueryInvoices(t *testing.T) {
 	if err != nil {
 		t.Fatalf("unable to make test db: %v", err)
 	}
-	db.Now = func() time.Time { return testNow }
 
 	// To begin the test, we'll add 50 invoices to the database. We'll
 	// assume that the index of the invoice within the database is the same
 	// as the amount of the invoice itself.
 	const numInvoices = 50
-	var settleIndex uint64 = 1
-	var invoices []Invoice
-	var pendingInvoices []Invoice
-
-	for i := 1; i <= numInvoices; i++ {
-		amt := lnwire.MilliSatoshi(i)
-		invoice, err := randInvoice(amt)
+	for i := lnwire.MilliSatoshi(1); i <= numInvoices; i++ {
+		invoice, err := randInvoice(i)
 		if err != nil {
 			t.Fatalf("unable to create invoice: %v", err)
 		}
@@ -657,20 +695,24 @@ func TestQueryInvoices(t *testing.T) {
 		// We'll only settle half of all invoices created.
 		if i%2 == 0 {
 			_, err := db.UpdateInvoice(
-				paymentHash, getUpdateInvoice(amt),
+				paymentHash, getUpdateInvoice(i),
 			)
 			if err != nil {
 				t.Fatalf("unable to settle invoice: %v", err)
 			}
-
-			// Create the settled invoice for the expectation set.
-			settleTestInvoice(invoice, settleIndex)
-			settleIndex++
-		} else {
-			pendingInvoices = append(pendingInvoices, *invoice)
 		}
+	}
 
-		invoices = append(invoices, *invoice)
+	// We'll then retrieve the set of all invoices and pending invoices.
+	// This will serve useful when comparing the expected responses of the
+	// query with the actual ones.
+	invoices, err := db.FetchAllInvoices(false)
+	if err != nil {
+		t.Fatalf("unable to retrieve invoices: %v", err)
+	}
+	pendingInvoices, err := db.FetchAllInvoices(true)
+	if err != nil {
+		t.Fatalf("unable to retrieve pending invoices: %v", err)
 	}
 
 	// The test will consist of several queries along with their respective
diff --git a/htlcswitch/link_test.go b/htlcswitch/link_test.go
index 16d64d70e..9efe89dca 100644
--- a/htlcswitch/link_test.go
+++ b/htlcswitch/link_test.go
@@ -574,12 +574,12 @@ func TestExitNodeTimelockPayloadMismatch(t *testing.T) {
 		t.Fatalf("payment should have failed but didn't")
 	}
 
-	rtErr, ok := err.(ClearTextError)
+	ferr, ok := err.(*ForwardingError)
 	if !ok {
-		t.Fatalf("expected a ClearTextError, instead got: %T", err)
+		t.Fatalf("expected a ForwardingError, instead got: %T", err)
 	}
 
-	switch rtErr.WireMessage().(type) {
+	switch ferr.FailureMessage.(type) {
 	case *lnwire.FailFinalIncorrectCltvExpiry:
 	default:
 		t.Fatalf("incorrect error, expected incorrect cltv expiry, "+
@@ -674,12 +674,12 @@ func TestLinkForwardTimelockPolicyMismatch(t *testing.T) {
 		t.Fatalf("payment should have failed but didn't")
 	}
 
-	rtErr, ok := err.(ClearTextError)
+	ferr, ok := err.(*ForwardingError)
 	if !ok {
-		t.Fatalf("expected a ClearTextError, instead got: %T", err)
+		t.Fatalf("expected a ForwardingError, instead got: %T", err)
 	}
 
-	switch rtErr.WireMessage().(type) {
+	switch ferr.FailureMessage.(type) {
 	case *lnwire.FailIncorrectCltvExpiry:
 	default:
 		t.Fatalf("incorrect error, expected incorrect cltv expiry, "+
@@ -732,12 +732,12 @@ func TestLinkForwardFeePolicyMismatch(t *testing.T) {
 		t.Fatalf("payment should have failed but didn't")
 	}
 
-	rtErr, ok := err.(ClearTextError)
+	ferr, ok := err.(*ForwardingError)
 	if !ok {
-		t.Fatalf("expected a ClearTextError, instead got: %T", err)
+		t.Fatalf("expected a ForwardingError, instead got: %T", err)
 	}
 
-	switch rtErr.WireMessage().(type) {
+	switch ferr.FailureMessage.(type) {
 	case *lnwire.FailFeeInsufficient:
 	default:
 		t.Fatalf("incorrect error, expected fee insufficient, "+
@@ -790,12 +790,12 @@ func TestLinkForwardMinHTLCPolicyMismatch(t *testing.T) {
 		t.Fatalf("payment should have failed but didn't")
 	}
 
-	rtErr, ok := err.(ClearTextError)
+	ferr, ok := err.(*ForwardingError)
 	if !ok {
-		t.Fatalf("expected a ClearTextError, instead got: %T", err)
+		t.Fatalf("expected a ForwardingError, instead got: %T", err)
 	}
 
-	switch rtErr.WireMessage().(type) {
+	switch ferr.FailureMessage.(type) {
 	case *lnwire.FailAmountBelowMinimum:
 	default:
 		t.Fatalf("incorrect error, expected amount below minimum, "+
@@ -857,12 +857,12 @@ func TestLinkForwardMaxHTLCPolicyMismatch(t *testing.T) {
 		t.Fatalf("payment should have failed but didn't")
 	}
 
-	rtErr, ok := err.(ClearTextError)
+	ferr, ok := err.(*ForwardingError)
 	if !ok {
-		t.Fatalf("expected a ClearTextError, instead got: %T", err)
+		t.Fatalf("expected a ForwardingError, instead got: %T", err)
 	}
 
-	switch rtErr.WireMessage().(type) {
+	switch ferr.FailureMessage.(type) {
 	case *lnwire.FailTemporaryChannelFailure:
 	default:
 		t.Fatalf("incorrect error, expected temporary channel failure, "+
@@ -964,12 +964,11 @@ func TestUpdateForwardingPolicy(t *testing.T) {
 		t.Fatalf("payment should've been rejected")
 	}
 
-	rtErr, ok := err.(ClearTextError)
+	ferr, ok := err.(*ForwardingError)
 	if !ok {
-		t.Fatalf("expected a ClearTextError, instead got (%T): %v", err, err)
+		t.Fatalf("expected a ForwardingError, instead got (%T): %v", err, err)
 	}
-
-	switch rtErr.WireMessage().(type) {
+	switch ferr.FailureMessage.(type) {
 	case *lnwire.FailFeeInsufficient:
 	default:
 		t.Fatalf("expected FailFeeInsufficient instead got: %v", err)
@@ -1004,13 +1003,12 @@ func TestUpdateForwardingPolicy(t *testing.T) {
 		t.Fatalf("payment should've been rejected")
 	}
 
-	rtErr, ok = err.(ClearTextError)
+	ferr, ok = err.(*ForwardingError)
 	if !ok {
-		t.Fatalf("expected a ClearTextError, instead got (%T): %v",
+		t.Fatalf("expected a ForwardingError, instead got (%T): %v",
 			err, err)
 	}
-
-	switch rtErr.WireMessage().(type) {
+	switch ferr.FailureMessage.(type) {
 	case *lnwire.FailTemporaryChannelFailure:
 	default:
 		t.Fatalf("expected TemporaryChannelFailure, instead got: %v",
@@ -1251,14 +1249,13 @@ func TestChannelLinkMultiHopUnknownNextHop(t *testing.T) {
 	if err == nil {
 		t.Fatal("error haven't been received")
 	}
-	rtErr, ok := err.(ClearTextError)
+	fErr, ok := err.(*ForwardingError)
 	if !ok {
-		t.Fatalf("expected ClearTextError")
+		t.Fatalf("expected ForwardingError")
 	}
-
-	if _, ok = rtErr.WireMessage().(*lnwire.FailUnknownNextPeer); !ok {
+	if _, ok = fErr.FailureMessage.(*lnwire.FailUnknownNextPeer); !ok {
 		t.Fatalf("wrong error has been received: %T",
-			rtErr.WireMessage())
+			fErr.FailureMessage)
 	}
 
 	// Wait for Alice to receive the revocation.
@@ -1367,12 +1364,12 @@ func TestChannelLinkMultiHopDecodeError(t *testing.T) {
 		t.Fatal("error haven't been received")
 	}
 
-	rtErr, ok := err.(ClearTextError)
+	ferr, ok := err.(*ForwardingError)
 	if !ok {
-		t.Fatalf("expected a ClearTextError, instead got: %T", err)
+		t.Fatalf("expected a ForwardingError, instead got: %T", err)
 	}
 
-	switch rtErr.WireMessage().(type) {
+	switch ferr.FailureMessage.(type) {
 	case *lnwire.FailInvalidOnionVersion:
 	default:
 		t.Fatalf("wrong error have been received: %v", err)
@@ -1459,13 +1456,13 @@ func TestChannelLinkExpiryTooSoonExitNode(t *testing.T) {
 			"time lock value")
 	}
 
-	rtErr, ok := err.(ClearTextError)
+	ferr, ok := err.(*ForwardingError)
 	if !ok {
-		t.Fatalf("expected a ClearTextError, instead got: %T %v",
-			rtErr, err)
+		t.Fatalf("expected a ForwardingError, instead got: %T %v",
+			err, err)
 	}
 
-	switch rtErr.WireMessage().(type) {
+	switch ferr.FailureMessage.(type) {
 	case *lnwire.FailIncorrectDetails:
 	default:
 		t.Fatalf("expected incorrect_or_unknown_payment_details, "+
@@ -1522,13 +1519,12 @@ func TestChannelLinkExpiryTooSoonMidNode(t *testing.T) {
 			"time lock value")
 	}
 
-	rtErr, ok := err.(ClearTextError)
+	ferr, ok := err.(*ForwardingError)
 	if !ok {
-		t.Fatalf("expected a ClearTextError, instead got: %T: %v",
-			rtErr, err)
+		t.Fatalf("expected a ForwardingError, instead got: %T: %v", err, err)
 	}
 
-	switch rtErr.WireMessage().(type) {
+	switch ferr.FailureMessage.(type) {
 	case *lnwire.FailExpiryTooSoon:
 	default:
 		t.Fatalf("incorrect error, expected final time lock too "+
@@ -5541,7 +5537,7 @@ func TestCheckHtlcForward(t *testing.T) {
 	t.Run("below minhtlc", func(t *testing.T) {
 		result := link.CheckHtlcForward(hash, 100, 50,
 			200, 150, 0)
-		if _, ok := result.WireMessage().(*lnwire.FailAmountBelowMinimum); !ok {
+		if _, ok := result.(*lnwire.FailAmountBelowMinimum); !ok {
 			t.Fatalf("expected FailAmountBelowMinimum failure code")
 		}
 	})
@@ -5549,7 +5545,7 @@ func TestCheckHtlcForward(t *testing.T) {
 	t.Run("above maxhtlc", func(t *testing.T) {
 		result := link.CheckHtlcForward(hash, 1500, 1200,
 			200, 150, 0)
-		if _, ok := result.WireMessage().(*lnwire.FailTemporaryChannelFailure); !ok {
+		if _, ok := result.(*lnwire.FailTemporaryChannelFailure); !ok {
 			t.Fatalf("expected FailTemporaryChannelFailure failure code")
 		}
 	})
@@ -5557,7 +5553,7 @@ func TestCheckHtlcForward(t *testing.T) {
 	t.Run("insufficient fee", func(t *testing.T) {
 		result := link.CheckHtlcForward(hash, 1005, 1000,
 			200, 150, 0)
-		if _, ok := result.WireMessage().(*lnwire.FailFeeInsufficient); !ok {
+		if _, ok := result.(*lnwire.FailFeeInsufficient); !ok {
 			t.Fatalf("expected FailFeeInsufficient failure code")
 		}
 	})
@@ -5565,7 +5561,7 @@ func TestCheckHtlcForward(t *testing.T) {
 	t.Run("expiry too soon", func(t *testing.T) {
 		result := link.CheckHtlcForward(hash, 1500, 1000,
 			200, 150, 190)
-		if _, ok := result.WireMessage().(*lnwire.FailExpiryTooSoon); !ok {
+		if _, ok := result.(*lnwire.FailExpiryTooSoon); !ok {
 			t.Fatalf("expected FailExpiryTooSoon failure code")
 		}
 	})
@@ -5573,7 +5569,7 @@ func TestCheckHtlcForward(t *testing.T) {
 	t.Run("incorrect cltv expiry", func(t *testing.T) {
 		result := link.CheckHtlcForward(hash, 1500, 1000,
 			200, 190, 0)
-		if _, ok := result.WireMessage().(*lnwire.FailIncorrectCltvExpiry); !ok {
+		if _, ok := result.(*lnwire.FailIncorrectCltvExpiry); !ok {
 			t.Fatalf("expected FailIncorrectCltvExpiry failure code")
 		}
 
@@ -5583,7 +5579,7 @@ func TestCheckHtlcForward(t *testing.T) {
 		// Check that expiry isn't too far in the future.
 		result := link.CheckHtlcForward(hash, 1500, 1000,
 			10200, 10100, 0)
-		if _, ok := result.WireMessage().(*lnwire.FailExpiryTooFar); !ok {
+		if _, ok := result.(*lnwire.FailExpiryTooFar); !ok {
 			t.Fatalf("expected FailExpiryTooFar failure code")
 		}
 	})
@@ -5636,11 +5632,11 @@ func TestChannelLinkCanceledInvoice(t *testing.T) {
 
 	// Because the invoice is canceled, we expect an unknown payment hash
 	// result.
-	rtErr, ok := err.(ClearTextError)
+	fErr, ok := err.(*ForwardingError)
 	if !ok {
-		t.Fatalf("expected ClearTextError, but got %v", err)
+		t.Fatalf("expected ForwardingError, but got %v", err)
 	}
-	_, ok = rtErr.WireMessage().(*lnwire.FailIncorrectDetails)
+	_, ok = fErr.FailureMessage.(*lnwire.FailIncorrectDetails)
 	if !ok {
 		t.Fatalf("expected unknown payment hash, but got %v", err)
 	}
@@ -6217,16 +6213,16 @@ func TestChannelLinkReceiveEmptySig(t *testing.T) {
 	aliceLink.Stop()
 }
 
-// assertFailureCode asserts that an error is of type ClearTextError and that
+// assertFailureCode asserts that an error is of type ForwardingError and that
 // the failure code is as expected.
 func assertFailureCode(t *testing.T, err error, code lnwire.FailCode) {
-	rtErr, ok := err.(ClearTextError)
+	fErr, ok := err.(*ForwardingError)
 	if !ok {
-		t.Fatalf("expected ClearTextError but got %T", err)
+		t.Fatalf("expected ForwardingError but got %T", err)
 	}
 
-	if rtErr.WireMessage().Code() != code {
+	if fErr.FailureMessage.Code() != code {
 		t.Fatalf("expected %v but got %v",
-			code, rtErr.WireMessage().Code())
+			code, fErr.FailureMessage.Code())
 	}
 }
diff --git a/htlcswitch/switch_test.go b/htlcswitch/switch_test.go
index 69425dc21..28493c831 100644
--- a/htlcswitch/switch_test.go
+++ b/htlcswitch/switch_test.go
@@ -1290,7 +1290,7 @@ func TestSwitchForwardCircuitPersistence(t *testing.T) {
 type multiHopFwdTest struct {
 	name                 string
 	eligible1, eligible2 bool
-	failure1, failure2   *LinkError
+	failure1, failure2   lnwire.FailureMessage
 	expectedReply        lnwire.FailCode
 }
 
@@ -1308,11 +1308,9 @@ func TestSkipIneligibleLinksMultiHopForward(t *testing.T) {
 		// Channel one has a policy failure and the other channel isn't
 		// available.
 		{
-			name:      "policy fail",
-			eligible1: true,
-			failure1: NewLinkError(
-				lnwire.NewFinalIncorrectCltvExpiry(0),
-			),
+			name:          "policy fail",
+			eligible1:     true,
+			failure1:      lnwire.NewFinalIncorrectCltvExpiry(0),
 			expectedReply: lnwire.CodeFinalIncorrectCltvExpiry,
 		},
 
@@ -1327,16 +1325,11 @@ func TestSkipIneligibleLinksMultiHopForward(t *testing.T) {
 		// The requested channel has insufficient bandwidth and the
 		// other channel's policy isn't satisfied.
 		{
-			name:      "non-strict policy fail",
-			eligible1: true,
-			failure1: NewDetailedLinkError(
-				lnwire.NewTemporaryChannelFailure(nil),
-				FailureDetailInsufficientBalance,
-			),
-			eligible2: true,
-			failure2: NewLinkError(
-				lnwire.NewFinalIncorrectCltvExpiry(0),
-			),
+			name:          "non-strict policy fail",
+			eligible1:     true,
+			failure1:      lnwire.NewTemporaryChannelFailure(nil),
+			eligible2:     true,
+			failure2:      lnwire.NewFinalIncorrectCltvExpiry(0),
 			expectedReply: lnwire.CodeTemporaryChannelFailure,
 		},
 	}
@@ -1489,9 +1482,7 @@ func testSkipLinkLocalForward(t *testing.T, eligible bool,
 	aliceChannelLink := newMockChannelLink(
 		s, chanID1, aliceChanID, alicePeer, eligible,
 	)
-	aliceChannelLink.checkHtlcTransitResult = NewLinkError(
-		policyResult,
-	)
+	aliceChannelLink.checkHtlcTransitResult = policyResult
 	if err := s.AddLink(aliceChannelLink); err != nil {
 		t.Fatalf("unable to add alice link: %v", err)
 	}
@@ -2187,11 +2178,11 @@ func TestUpdateFailMalformedHTLCErrorConversion(t *testing.T) {
 			t.Fatalf("unable to send payment: %v", err)
 		}
 
-		routingErr := err.(ClearTextError)
-		failureMsg := routingErr.WireMessage()
+		fwdingErr := err.(*ForwardingError)
+		failureMsg := fwdingErr.FailureMessage
 		if _, ok := failureMsg.(*lnwire.FailInvalidOnionKey); !ok {
 			t.Fatalf("expected onion failure instead got: %v",
-				routingErr.WireMessage())
+				fwdingErr.FailureMessage)
 		}
 	}
 
@@ -2450,18 +2441,14 @@ func TestInvalidFailure(t *testing.T) {
 
 	select {
 	case result := <-resultChan:
-		rtErr, ok := result.Error.(ClearTextError)
-		if !ok {
-			t.Fatal("expected ClearTextError")
-		}
-		source, ok := rtErr.(*ForwardingError)
+		fErr, ok := result.Error.(*ForwardingError)
 		if !ok {
-			t.Fatalf("expected forwarding error, got: %T", rtErr)
+			t.Fatal("expected ForwardingError")
 		}
-		if source.FailureSourceIdx != 2 {
+		if fErr.FailureSourceIdx != 2 {
 			t.Fatal("unexpected error source index")
 		}
-		if rtErr.WireMessage() != nil {
+		if fErr.FailureMessage != nil {
 			t.Fatal("expected empty failure message")
 		}
 
diff --git a/lnrpc/routerrpc/router_backend_test.go b/lnrpc/routerrpc/router_backend_test.go
index 33a0ccfba..f6dfc2cce 100644
--- a/lnrpc/routerrpc/router_backend_test.go
+++ b/lnrpc/routerrpc/router_backend_test.go
@@ -7,7 +7,6 @@ import (
 	"testing"
 
 	"github.com/btcsuite/btcutil"
-	"github.com/lightningnetwork/lnd/channeldb"
 	"github.com/lightningnetwork/lnd/lnwire"
 	"github.com/lightningnetwork/lnd/record"
 	"github.com/lightningnetwork/lnd/routing"
@@ -19,7 +18,6 @@ import (
 const (
 	destKey       = "0286098b97bc843372b4426d4b276cea9aa2f48f0428d6f5b66ae101befc14f8b4"
 	ignoreNodeKey = "02f274f48f3c0d590449a6776e3ce8825076ac376e470e992246eebc565ef8bb2a"
-	hintNodeKey   = "0274e7fb33eafd74fe1acb6db7680bb4aa78e9c839a6e954e38abfad680f645ef7"
 
 	testMissionControlProb = 0.5
 )
@@ -60,27 +58,6 @@ func testQueryRoutes(t *testing.T, useMissionControl bool, useMsat bool) {
 		t.Fatal(err)
 	}
 
-	var (
-		lastHop      = route.Vertex{64}
-		outgoingChan = uint64(383322)
-	)
-
-	hintNode, err := route.NewVertexFromStr(hintNodeKey)
-	if err != nil {
-		t.Fatal(err)
-	}
-
-	rpcRouteHints := []*lnrpc.RouteHint{
-		{
-			HopHints: []*lnrpc.HopHint{
-				{
-					ChanId: 38484,
-					NodeId: hintNodeKey,
-				},
-			},
-		},
-	}
-
 	request := &lnrpc.QueryRoutesRequest{
 		PubKey:         destKey,
 		FinalCltvDelta: 100,
@@ -94,10 +71,6 @@ func testQueryRoutes(t *testing.T, useMissionControl bool, useMsat bool) {
 			To:   node2[:],
 		}},
 		UseMissionControl: useMissionControl,
-		LastHopPubkey:     lastHop[:],
-		OutgoingChanId:    outgoingChan,
-		DestFeatures:      []lnrpc.FeatureBit{lnrpc.FeatureBit_MPP_OPT},
-		RouteHints:        rpcRouteHints,
 	}
 
 	amtSat := int64(100000)
@@ -120,8 +93,7 @@ func testQueryRoutes(t *testing.T, useMissionControl bool, useMsat bool) {
 	findRoute := func(source, target route.Vertex,
 		amt lnwire.MilliSatoshi, restrictions *routing.RestrictParams,
 		_ record.CustomSet,
-		routeHints map[route.Vertex][]*channeldb.ChannelEdgePolicy,
-		finalExpiry uint16) (*route.Route, error) {
+		finalExpiry ...uint16) (*route.Route, error) {
 
 		if int64(amt) != amtSat*1000 {
 			t.Fatal("unexpected amount")
@@ -155,22 +127,6 @@ func testQueryRoutes(t *testing.T, useMissionControl bool, useMsat bool) {
 			t.Fatal("expecting 0% probability for ignored pair")
 		}
 
-		if *restrictions.LastHop != lastHop {
-			t.Fatal("unexpected last hop")
-		}
-
-		if *restrictions.OutgoingChannelID != outgoingChan {
-			t.Fatal("unexpected outgoing channel id")
-		}
-
-		if !restrictions.DestFeatures.HasFeature(lnwire.MPPOptional) {
-			t.Fatal("unexpected dest features")
-		}
-
-		if _, ok := routeHints[hintNode]; !ok {
-			t.Fatal("expected route hint")
-		}
-
 		expectedProb := 1.0
 		if useMissionControl {
 			expectedProb = testMissionControlProb
diff --git a/lnwire/reply_channel_range_test.go b/lnwire/reply_channel_range_test.go
index d2c8df68c..c9c1cfc45 100644
--- a/lnwire/reply_channel_range_test.go
+++ b/lnwire/reply_channel_range_test.go
@@ -2,11 +2,7 @@ package lnwire
 
 import (
 	"bytes"
-	"encoding/hex"
-	"reflect"
 	"testing"
-
-	"github.com/davecgh/go-spew/spew"
 )
 
 // TestReplyChannelRangeUnsorted tests that decoding a ReplyChannelRange request
@@ -36,72 +32,3 @@ func TestReplyChannelRangeUnsorted(t *testing.T) {
 		})
 	}
 }
-
-// TestReplyChannelRangeEmpty tests encoding and decoding a ReplyChannelRange
-// that doesn't contain any channel results.
-func TestReplyChannelRangeEmpty(t *testing.T) {
-	t.Parallel()
-
-	emptyChannelsTests := []struct {
-		name       string
-		encType    ShortChanIDEncoding
-		encodedHex string
-	}{
-		{
-			name:    "empty plain encoding",
-			encType: EncodingSortedPlain,
-			encodedHex: "000000000000000000000000000000000000000" +
-				"00000000000000000000000000000000100000002" +
-				"01000100",
-		},
-		{
-			name:    "empty zlib encoding",
-			encType: EncodingSortedZlib,
-			encodedHex: "00000000000000000000000000000000000000" +
-				"0000000000000000000000000000000001000000" +
-				"0201000101",
-		},
-	}
-
-	for _, test := range emptyChannelsTests {
-		test := test
-		t.Run(test.name, func(t *testing.T) {
-			req := ReplyChannelRange{
-				QueryChannelRange: QueryChannelRange{
-					FirstBlockHeight: 1,
-					NumBlocks:        2,
-				},
-				Complete:     1,
-				EncodingType: test.encType,
-				ShortChanIDs: nil,
-			}
-
-			// First decode the hex string in the test case into a
-			// new ReplyChannelRange message. It should be
-			// identical to the one created above.
-			var req2 ReplyChannelRange
-			b, _ := hex.DecodeString(test.encodedHex)
-			err := req2.Decode(bytes.NewReader(b), 0)
-			if err != nil {
-				t.Fatalf("unable to decode req: %v", err)
-			}
-			if !reflect.DeepEqual(req, req2) {
-				t.Fatalf("requests don't match: expected %v got %v",
-					spew.Sdump(req), spew.Sdump(req2))
-			}
-
-			// Next, we go in the reverse direction: encode the
-			// request created above, and assert that it matches
-			// the raw byte encoding.
-			var b2 bytes.Buffer
-			err = req.Encode(&b2, 0)
-			if err != nil {
-				t.Fatalf("unable to encode req: %v", err)
-			}
-			if !bytes.Equal(b, b2.Bytes()) {
-				t.Fatalf("encoded requests don't match: expected %x got %x",
-					b, b2.Bytes())
-			}
-		})
-	}
-}
diff --git a/routing/mock_test.go b/routing/mock_test.go
index fac67aa9f..d2f7448c7 100644
--- a/routing/mock_test.go
+++ b/routing/mock_test.go
@@ -35,12 +35,12 @@ func (m *mockPaymentAttemptDispatcher) SendHTLC(firstHop lnwire.ShortChannelID,
 	var result *htlcswitch.PaymentResult
 	preimage, err := m.onPayment(firstHop)
 	if err != nil {
-		rtErr, ok := err.(htlcswitch.ClearTextError)
+		fwdErr, ok := err.(*htlcswitch.ForwardingError)
 		if !ok {
 			return err
 		}
 		result = &htlcswitch.PaymentResult{
-			Error: rtErr,
+			Error: fwdErr,
 		}
 	} else {
 		result = &htlcswitch.PaymentResult{Preimage: preimage}
diff --git a/routing/pathfind_test.go b/routing/pathfind_test.go
index 686621198..03b3160a4 100644
--- a/routing/pathfind_test.go
+++ b/routing/pathfind_test.go
@@ -1591,14 +1591,33 @@ func TestMissingFeatureDep(t *testing.T) {
 	ctx := newPathFindingTestContext(t, testChannels, "roasbeef")
 	defer ctx.cleanup()
 
+	sourceNode, err := ctx.graphParams.graph.SourceNode()
+	if err != nil {
+		t.Fatalf("unable to fetch source node: %v", err)
+
+	}
+
+	find := func(r *RestrictParams,
+		target route.Vertex) ([]*channeldb.ChannelEdgePolicy, error) {
+
+		return findPath(
+			&graphParams{
+				graph: ctx.graphParams.graph,
+			},
+			r, testPathFindingConfig,
+			sourceNode.PubKeyBytes, target, 100, 0,
+		)
+	}
+
 	// Conner's node in the graph has a broken feature vector, since it
 	// signals payment addresses without signaling tlv onions. Pathfinding
 	// should fail since we validate transitive feature dependencies for the
 	// final node.
-	conner := ctx.keyFromAlias("conner")
-	joost := ctx.keyFromAlias("joost")
+	conner := ctx.testGraphInstance.aliasMap["conner"]
 
-	_, err := ctx.findPath(conner, 100)
+	restrictions := *noRestrictions
+
+	_, err = find(&restrictions, conner)
 	if err != feature.NewErrMissingFeatureDep(
 		lnwire.TLVOnionPayloadOptional,
 	) {
@@ -1608,9 +1627,9 @@ func TestMissingFeatureDep(t *testing.T) {
 	// Now, set the TLV and payment addresses features to override the
 	// broken features found in the graph. We should succeed in finding a
 	// path to conner.
-	ctx.restrictParams.DestFeatures = tlvPayAddrFeatures
+	restrictions.DestFeatures = tlvPayAddrFeatures
 
-	path, err := ctx.findPath(conner, 100)
+	path, err := find(&restrictions, conner)
 	if err != nil {
 		t.Fatalf("path should have been found: %v", err)
 	}
@@ -1622,7 +1641,9 @@ func TestMissingFeatureDep(t *testing.T) {
 	// errNoPathFound and not the missing feature dep err above since
 	// intermediate hops are simply skipped if they have invalid feature
 	// vectors, leaving no possible route to joost.
-	_, err = ctx.findPath(joost, 100)
+	joost := ctx.testGraphInstance.aliasMap["joost"]
+
+	_, err = find(&restrictions, joost)
 	if err != errNoPathFound {
 		t.Fatalf("path shouldn't have been found: %v", err)
 	}
@@ -1715,25 +1736,45 @@ func TestDestPaymentAddr(t *testing.T) {
 	ctx := newPathFindingTestContext(t, testChannels, "roasbeef")
 	defer ctx.cleanup()
 
-	luoji := ctx.keyFromAlias("luoji")
+	sourceNode, err := ctx.graphParams.graph.SourceNode()
+	if err != nil {
+		t.Fatalf("unable to fetch source node: %v", err)
+
+	}
+
+	find := func(r *RestrictParams,
+		target route.Vertex) ([]*channeldb.ChannelEdgePolicy, error) {
+
+		return findPath(
+			&graphParams{
+				graph: ctx.graphParams.graph,
+			},
+			r, testPathFindingConfig,
+			sourceNode.PubKeyBytes, target, 100, 0,
+		)
+	}
+
+	luoji := ctx.testGraphInstance.aliasMap["luoji"]
+
+	restrictions := *noRestrictions
 
 	// Add payment address w/o any invoice features.
-	ctx.restrictParams.PaymentAddr = &[32]byte{1}
+	restrictions.PaymentAddr = &[32]byte{1}
 
 	// Add empty destination features. This should cause us to fail, since
 	// this overrides anything in the graph.
-	ctx.restrictParams.DestFeatures = lnwire.EmptyFeatureVector()
+	restrictions.DestFeatures = lnwire.EmptyFeatureVector()
 
-	_, err := ctx.findPath(luoji, 100)
+	_, err = find(&restrictions, luoji)
 	if err != errNoPaymentAddr {
 		t.Fatalf("path shouldn't have been found: %v", err)
 	}
 
 	// Now, set the TLV and payment address features for the destination. We
 	// should succeed in finding a path to luoji.
-	ctx.restrictParams.DestFeatures = tlvPayAddrFeatures
+	restrictions.DestFeatures = tlvPayAddrFeatures
 
-	path, err := ctx.findPath(luoji, 100)
+	path, err := find(&restrictions, luoji)
 	if err != nil {
 		t.Fatalf("path should have been found: %v", err)
 	}
@@ -2109,8 +2150,7 @@ func TestPathFindSpecExample(t *testing.T) {
 	carol := ctx.aliases["C"]
 	const amt lnwire.MilliSatoshi = 4999999
 	route, err := ctx.router.FindRoute(
-		bobNode.PubKeyBytes, carol, amt, noRestrictions, nil, nil,
-		zpay32.DefaultFinalCLTVDelta,
+		bobNode.PubKeyBytes, carol, amt, noRestrictions, nil,
 	)
 	if err != nil {
 		t.Fatalf("unable to find route: %v", err)
@@ -2165,8 +2205,7 @@ func TestPathFindSpecExample(t *testing.T) {
 
 	// We'll now request a route from A -> B -> C.
 	route, err = ctx.router.FindRoute(
-		source.PubKeyBytes, carol, amt, noRestrictions, nil, nil,
-		zpay32.DefaultFinalCLTVDelta,
+		source.PubKeyBytes, carol, amt, noRestrictions, nil,
 	)
 	if err != nil {
 		t.Fatalf("unable to find routes: %v", err)
diff --git a/routing/router_test.go b/routing/router_test.go
index b3470d1c3..6fd9a6303 100644
--- a/routing/router_test.go
+++ b/routing/router_test.go
@@ -227,7 +227,7 @@ func TestFindRoutesWithFeeLimit(t *testing.T) {
 
 	route, err := ctx.router.FindRoute(
 		ctx.router.selfNode.PubKeyBytes,
-		target, paymentAmt, restrictions, nil, nil,
+		target, paymentAmt, restrictions, nil,
 		zpay32.DefaultFinalCLTVDelta,
 	)
 	if err != nil {
@@ -288,12 +288,11 @@ func TestSendPaymentRouteFailureFallback(t *testing.T) {
 
 			roasbeefSongoku := lnwire.NewShortChanIDFromInt(12345)
 			if firstHop == roasbeefSongoku {
-				return [32]byte{}, htlcswitch.NewForwardingError(
-					// TODO(roasbeef): temp node failure
-					//  should be?
-					&lnwire.FailTemporaryChannelFailure{},
-					1,
-				)
+				return [32]byte{}, &htlcswitch.ForwardingError{
+					FailureSourceIdx: 1,
+					// TODO(roasbeef): temp node failure should be?
+					FailureMessage: &lnwire.FailTemporaryChannelFailure{},
+				}
 			}
 
 			return preImage, nil
@@ -421,12 +420,12 @@ func TestChannelUpdateValidation(t *testing.T) {
 	// The unsigned channel update is attached to the failure message.
 	ctx.router.cfg.Payer.(*mockPaymentAttemptDispatcher).setPaymentResult(
 		func(firstHop lnwire.ShortChannelID) ([32]byte, error) {
-			return [32]byte{}, htlcswitch.NewForwardingError(
-				&lnwire.FailFeeInsufficient{
+			return [32]byte{}, &htlcswitch.ForwardingError{
+				FailureSourceIdx: 1,
+				FailureMessage: &lnwire.FailFeeInsufficient{
 					Update: errChanUpdate,
 				},
-				1,
-			)
+			}
 		})
 
 	// The payment parameter is mostly redundant in SendToRoute. Can be left
@@ -543,15 +542,16 @@ func TestSendPaymentErrorRepeatedFeeInsufficient(t *testing.T) {
 
 			roasbeefSongoku := lnwire.NewShortChanIDFromInt(chanID)
 			if firstHop == roasbeefSongoku {
-				return [32]byte{}, htlcswitch.NewForwardingError(
-					// Within our error, we'll add a
-					// channel update which is meant to
-					// reflect the new fee schedule for the
-					// node/channel.
-					&lnwire.FailFeeInsufficient{
+				return [32]byte{}, &htlcswitch.ForwardingError{
+					FailureSourceIdx: 1,
+
+					// Within our error, we'll add a channel update
+					// which is meant to reflect he new fee
+					// schedule for the node/channel.
+					FailureMessage: &lnwire.FailFeeInsufficient{
 						Update: errChanUpdate,
-					}, 1,
-				)
+					},
+				}
 			}
 
 			return preImage, nil
@@ -646,11 +646,12 @@ func TestSendPaymentErrorNonFinalTimeLockErrors(t *testing.T) {
 		func(firstHop lnwire.ShortChannelID) ([32]byte, error) {
 
 			if firstHop == roasbeefSongoku {
-				return [32]byte{}, htlcswitch.NewForwardingError(
-					&lnwire.FailExpiryTooSoon{
+				return [32]byte{}, &htlcswitch.ForwardingError{
+					FailureSourceIdx: 1,
+					FailureMessage: &lnwire.FailExpiryTooSoon{
 						Update: errChanUpdate,
-					}, 1,
-				)
+					},
+				}
 			}
 
 			return preImage, nil
@@ -699,11 +700,12 @@ func TestSendPaymentErrorNonFinalTimeLockErrors(t *testing.T) {
 		func(firstHop lnwire.ShortChannelID) ([32]byte, error) {
 
 			if firstHop == roasbeefSongoku {
-				return [32]byte{}, htlcswitch.NewForwardingError(
-					&lnwire.FailIncorrectCltvExpiry{
+				return [32]byte{}, &htlcswitch.ForwardingError{
+					FailureSourceIdx: 1,
+					FailureMessage: &lnwire.FailIncorrectCltvExpiry{
 						Update: errChanUpdate,
-					}, 1,
-				)
+					},
+				}
 			}
 
 			return preImage, nil
@@ -761,19 +763,20 @@ func TestSendPaymentErrorPathPruning(t *testing.T) {
 				// We'll first simulate an error from the first
 				// hop to simulate the channel from songoku to
 				// sophon not having enough capacity.
-				return [32]byte{}, htlcswitch.NewForwardingError(
-					&lnwire.FailTemporaryChannelFailure{},
-					1,
-				)
+				return [32]byte{}, &htlcswitch.ForwardingError{
+					FailureSourceIdx: 1,
+					FailureMessage:   &lnwire.FailTemporaryChannelFailure{},
+				}
 			}
 
 			// Next, we'll create an error from phan nuwen to
 			// indicate that the sophon node is not longer online,
 			// which should prune out the rest of the routes.
 			if firstHop == roasbeefPhanNuwen {
-				return [32]byte{}, htlcswitch.NewForwardingError(
-					&lnwire.FailUnknownNextPeer{}, 1,
-				)
+				return [32]byte{}, &htlcswitch.ForwardingError{
+					FailureSourceIdx: 1,
+					FailureMessage:   &lnwire.FailUnknownNextPeer{},
+				}
 			}
 
 			return preImage, nil
@@ -802,10 +805,10 @@ func TestSendPaymentErrorPathPruning(t *testing.T) {
 		func(firstHop lnwire.ShortChannelID) ([32]byte, error) {
 
 			if firstHop == roasbeefSongoku {
-				failure := htlcswitch.NewForwardingError(
-					&lnwire.FailUnknownNextPeer{}, 1,
-				)
-				return [32]byte{}, failure
+				return [32]byte{}, &htlcswitch.ForwardingError{
+					FailureSourceIdx: 1,
+					FailureMessage:   &lnwire.FailUnknownNextPeer{},
+				}
 			}
 
 			return preImage, nil
@@ -848,10 +851,10 @@ func TestSendPaymentErrorPathPruning(t *testing.T) {
 				// We'll first simulate an error from the first
 				// outgoing link to simulate the channel from luo ji to
 				// roasbeef not having enough capacity.
-				return [32]byte{}, htlcswitch.NewForwardingError(
-					&lnwire.FailTemporaryChannelFailure{},
-					1,
-				)
+				return [32]byte{}, &htlcswitch.ForwardingError{
+					FailureSourceIdx: 1,
+					FailureMessage:   &lnwire.FailTemporaryChannelFailure{},
+				}
 			}
 			return preImage, nil
 		})
@@ -1266,7 +1269,7 @@ func TestAddEdgeUnknownVertexes(t *testing.T) {
 	copy(targetPubKeyBytes[:], targetNode.SerializeCompressed())
 	_, err = ctx.router.FindRoute(
 		ctx.router.selfNode.PubKeyBytes,
-		targetPubKeyBytes, paymentAmt, noRestrictions, nil, nil,
+		targetPubKeyBytes, paymentAmt, noRestrictions, nil,
 		zpay32.DefaultFinalCLTVDelta,
 	)
 	if err != nil {
@@ -1309,7 +1312,7 @@ func TestAddEdgeUnknownVertexes(t *testing.T) {
 	// updated.
 	_, err = ctx.router.FindRoute(
 		ctx.router.selfNode.PubKeyBytes,
-		targetPubKeyBytes, paymentAmt, noRestrictions, nil, nil,
+		targetPubKeyBytes, paymentAmt, noRestrictions, nil,
 		zpay32.DefaultFinalCLTVDelta,
 	)
 	if err != nil {
@@ -2536,7 +2539,9 @@ func TestUnknownErrorSource(t *testing.T) {
 			// couldn't be decoded (FailureMessage is nil).
 			if firstHop.ToUint64() == 2 {
 				return [32]byte{},
-					htlcswitch.NewUnknownForwardingError(1)
+					&htlcswitch.ForwardingError{
+						FailureSourceIdx: 1,
+					}
 			}
 
 			// Otherwise the payment succeeds.
@@ -3100,10 +3105,10 @@ func TestRouterPaymentStateMachine(t *testing.T) {
 			// called, and we respond with a forwarding error
 			case sendToSwitchResultFailure:
 				select {
-				case sendResult <- htlcswitch.NewForwardingError(
-					&lnwire.FailTemporaryChannelFailure{},
-					1,
-				):
+				case sendResult <- &htlcswitch.ForwardingError{
+					FailureSourceIdx: 1,
+					FailureMessage:   &lnwire.FailTemporaryChannelFailure{},
+				}:
 				case <-time.After(1 * time.Second):
 					t.Fatalf("unable to send result")
 				}
@@ -3124,14 +3129,12 @@ func TestRouterPaymentStateMachine(t *testing.T) {
 			// to be called, and we respond with a forwarding
 			// error, indicating that the router should retry.
 			case getPaymentResultFailure:
-				failure := htlcswitch.NewForwardingError(
-					&lnwire.FailTemporaryChannelFailure{},
-					1,
-				)
-
 				select {
 				case getPaymentResult <- &htlcswitch.PaymentResult{
-					Error: failure,
+					Error: &htlcswitch.ForwardingError{
+						FailureSourceIdx: 1,
+						FailureMessage:   &lnwire.FailTemporaryChannelFailure{},
+					},
 				}:
 				case <-time.After(1 * time.Second):
 					t.Fatalf("unable to get result")
@@ -3299,11 +3302,12 @@ func TestSendToRouteStructuredError(t *testing.T) {
 	// The unsigned channel update is attached to the failure message.
 	ctx.router.cfg.Payer.(*mockPaymentAttemptDispatcher).setPaymentResult(
 		func(firstHop lnwire.ShortChannelID) ([32]byte, error) {
-			return [32]byte{}, htlcswitch.NewForwardingError(
-				&lnwire.FailFeeInsufficient{
+			return [32]byte{}, &htlcswitch.ForwardingError{
+				FailureSourceIdx: 1,
+				FailureMessage: &lnwire.FailFeeInsufficient{
 					Update: lnwire.ChannelUpdate{},
-				}, 1,
-			)
+				},
+			}
 		})
 
 	// The payment parameter is mostly redundant in SendToRoute. Can be left
@@ -3320,7 +3324,7 @@ func TestSendToRouteStructuredError(t *testing.T) {
 		t.Fatalf("expected forwarding error")
 	}
 
-	if _, ok := fErr.WireMessage().(*lnwire.FailFeeInsufficient); !ok {
+	if _, ok := fErr.FailureMessage.(*lnwire.FailFeeInsufficient); !ok {
 		t.Fatalf("expected fee insufficient error")
 	}
 
diff --git a/sweep/sweeper_test.go b/sweep/sweeper_test.go
index b63129c9a..a663c3ab5 100644
--- a/sweep/sweeper_test.go
+++ b/sweep/sweeper_test.go
@@ -1178,7 +1178,9 @@ 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.
-	bumpResult, err := ctx.sweeper.BumpFee(wire.OutPoint{}, lowFeePref)
+	_, err := ctx.sweeper.UpdateParams(
+		wire.OutPoint{}, Params{Fee: lowFeePref},
+	)
 	if err != lnwallet.ErrNotMine {
 		t.Fatalf("expected error lnwallet.ErrNotMine, got \"%v\"", err)
 	}
@@ -1206,12 +1208,14 @@ 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.BumpFee(*input.OutPoint(), FeePreference{})
+	_, err = ctx.sweeper.UpdateParams(*input.OutPoint(), Params{})
 	if err != ErrNoFeePreference {
 		t.Fatalf("expected ErrNoFeePreference, got %v", err)
 	}
 
-	bumpResult, err = ctx.sweeper.BumpFee(*input.OutPoint(), highFeePref)
+	bumpResult, err := ctx.sweeper.UpdateParams(
+		*input.OutPoint(), Params{Fee: highFeePref},
+	)
 	if err != nil {
 		t.Fatalf("unable to bump input's fee: %v", err)
 	}
diff --git a/sweep/tx_input_set_test.go b/sweep/tx_input_set_test.go
index 2fa501883..d9e98f733 100644
--- a/sweep/tx_input_set_test.go
+++ b/sweep/tx_input_set_test.go
@@ -24,13 +24,13 @@ func TestTxInputSet(t *testing.T) {
 	// Create a 300 sat input. The fee to sweep this input to a P2WKH output
 	// is 439 sats. That means that this input yields -139 sats and we
 	// expect it not to be added.
-	if set.add(createP2WKHInput(300), false) {
+	if set.add(createP2WKHInput(300), constraintsRegular) {
 		t.Fatal("expected add of negatively yielding input to fail")
 	}
 
 	// A 700 sat input should be accepted into the set, because it yields
 	// positively.
-	if !set.add(createP2WKHInput(700), false) {
+	if !set.add(createP2WKHInput(700), constraintsRegular) {
 		t.Fatal("expected add of positively yielding input to succeed")
 	}
 
@@ -45,7 +45,7 @@ func TestTxInputSet(t *testing.T) {
 
 	// Add a 1000 sat input. This increases the tx fee to 712 sats. The tx
 	// output should now be 1000+700 - 712 = 988 sats.
-	if !set.add(createP2WKHInput(1000), false) {
+	if !set.add(createP2WKHInput(1000), constraintsRegular) {
 		t.Fatal("expected add of positively yielding input to succeed")
 	}
 	if set.outputValue != 988 {
@@ -70,13 +70,23 @@ func TestTxInputSetFromWallet(t *testing.T) {
 
 	// Add a 700 sat input to the set. It yields positively, but doesn't
 	// reach the output dust limit.
-	if !set.add(createP2WKHInput(700), false) {
+	if !set.add(createP2WKHInput(700), constraintsRegular) {
 		t.Fatal("expected add of positively yielding input to succeed")
 	}
 	if set.dustLimitReached() {
 		t.Fatal("expected dust limit not yet to be reached")
 	}
 
+	// Expect that adding a negative yield input fails.
+	if set.add(createP2WKHInput(50), constraintsRegular) {
+		t.Fatal("expected negative yield input add to fail")
+	}
+
+	// Force add the negative yield input. It should succeed.
+	if !set.add(createP2WKHInput(50), constraintsForce) {
+		t.Fatal("expected forced add to succeed")
+	}
+
 	err := set.tryAddWalletInputsIfNeeded()
 	if err != nil {
 		t.Fatal(err)