Commit 20d1df95 authored by QM's avatar QM

add WithdrawFromChain33Cmd

parent 199c53a2
......@@ -31,6 +31,7 @@ func Chain33RelayerCmd() *cobra.Command {
TokenAddressCmd(),
MultiSignCmd(),
ResendChain33EventCmd(),
WithdrawFromChain33Cmd(),
)
return cmd
......@@ -415,3 +416,48 @@ func resendChain33Event(cmd *cobra.Command, args []string) {
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.ResendChain33Event", resendChain33EventReq, &res)
ctx.Run()
}
func WithdrawFromChain33Cmd() *cobra.Command {
cmd := &cobra.Command{
Use: "withdraw",
Short: "async withdraw the asset from chain33 to make it unlocked on ethereum",
Run: WithdrawFromChain33,
}
addWithdrawFromChain33Flags(cmd)
return cmd
}
//addWithdrawFromChain33CmdFlags ...
func addWithdrawFromChain33Flags(cmd *cobra.Command) {
cmd.Flags().StringP("key", "k", "", "owner private key for chain33")
_ = cmd.MarkFlagRequired("key")
cmd.Flags().StringP("token", "t", "", "token address")
_ = cmd.MarkFlagRequired("token")
cmd.Flags().StringP("receiver", "r", "", "receiver address on Ethereum")
_ = cmd.MarkFlagRequired("receiver")
cmd.Flags().Float64P("amount", "m", float64(0), "amount")
_ = cmd.MarkFlagRequired("amount")
}
func WithdrawFromChain33(cmd *cobra.Command, args []string) {
rpcLaddr, _ := cmd.Flags().GetString("rpc_laddr")
key, _ := cmd.Flags().GetString("key")
tokenAddr, _ := cmd.Flags().GetString("token")
amount, _ := cmd.Flags().GetFloat64("amount")
receiver, _ := cmd.Flags().GetString("receiver")
d, err := utils.SimpleGetDecimals(tokenAddr)
if err != nil {
fmt.Println("get decimals err")
return
}
para := ebTypes.WithdrawFromChain33{
OwnerKey: key,
TokenAddr: tokenAddr,
Amount: utils.ToWei(amount, d).String(),
EthereumReceiver: receiver,
}
var res rpctypes.Reply
ctx := jsonclient.NewRPCCtx(rpcLaddr, "Manager.WithdrawFromChain33", para, &res)
ctx.Run()
}
......@@ -255,5 +255,11 @@ message WithdrawSymbol2Fee {
map<string, int64> symbol2Fee = 1;
}
message WithdrawFromChain33 {
string ownerKey = 1;
string tokenAddr = 2;
string amount = 3;
string ethereumReceiver = 4;
}
......@@ -44,17 +44,17 @@ type Relayer4Chain33 struct {
lastHeight4Tx int64 //等待被处理的具有相应的交易回执的高度
matDegree int32 //成熟度 heightSync2App matDegress height
privateKey4Chain33 chain33Crypto.PrivKey
privateKey4Chain33_ecdsa *ecdsa.PrivateKey
ctx context.Context
rwLock sync.RWMutex
unlockChan chan int
bridgeBankEventLockSig string
bridgeBankEventBurnSig string
bridgeBankEventWithdrawSig string
bridgeBankAbi abi.ABI
deployInfo *ebTypes.Deploy
totalTx4RelayEth2chai33 int64
privateKey4Chain33 chain33Crypto.PrivKey
privateKey4Chain33_ecdsa *ecdsa.PrivateKey
ctx context.Context
rwLock sync.RWMutex
unlockChan chan int
bridgeBankEventLockSig string
bridgeBankEventBurnSig string
bridgeBankEventWithdrawSig string
bridgeBankAbi abi.ABI
deployInfo *ebTypes.Deploy
totalTx4RelayEth2chai33 int64
//新增//
ethBridgeClaimChan <-chan *ebTypes.EthBridgeClaim
chain33MsgChan chan<- *events.Chain33Msg
......@@ -639,3 +639,9 @@ func (chain33Relayer *Relayer4Chain33) SetMultiSignAddr(address string) {
chain33Relayer.setMultiSignAddress(address)
}
func (chain33Relayer *Relayer4Chain33) WithdrawFromChain33(ownerPrivateKey, tokenAddr, ethereumReceiver, amount string) (string, error) {
bn := big.NewInt(1)
bn, _ = bn.SetString(utils.TrimZeroAndDot(amount), 10)
return withdrawAsync(ownerPrivateKey, tokenAddr, ethereumReceiver, bn.Int64(), chain33Relayer.bridgeBankAddr, chain33Relayer.chainName, chain33Relayer.rpcLaddr)
}
......@@ -646,3 +646,48 @@ func sendQuery(rpcAddr, funcName string, request types.Message, result proto.Mes
}
return true
}
func withdrawAsync(ownerPrivateKeyStr, tokenAddrstr, ethereumReceiver string, amount int64, bridgeBankAddr string, chainName, rpcURL string) (string, error) {
var driver secp256k1.Driver
privateKeySli, err := chain33Common.FromHex(ownerPrivateKeyStr)
if nil != err {
return "", err
}
ownerPrivateKey, err := driver.PrivKeyFromBytes(privateKeySli)
if nil != err {
return "", err
}
approveTxHash, err := approve(ownerPrivateKey, tokenAddrstr, bridgeBankAddr, chainName, rpcURL, amount)
if err != nil {
chain33txLog.Error("withdrawAsync", "failed to send approve tx due to:", err.Error())
return "", err
}
chain33txLog.Debug("withdrawAsync", "approve with tx hash", approveTxHash)
withdrawTxHash, err := withdrawViaProxy(ownerPrivateKey, bridgeBankAddr, ethereumReceiver, tokenAddrstr, chainName, rpcURL, amount)
if err != nil {
chain33txLog.Error("withdrawAsync", "failed to send withdraw tx due to:", err.Error())
return "", err
}
chain33txLog.Debug("withdrawAsync", "withdraw with tx hash", withdrawTxHash)
return withdrawTxHash, err
}
func withdrawViaProxy(privateKey chain33Crypto.PrivKey, contractAddr, ethereumReceiver, ethereumTokenAddress, chainName, rpcURL string, amount int64) (string, error) {
//function withdrawViaProxy(
// bytes memory _ethereumReceiver,
// address _bridgeTokenAddress,
// uint256 _amount
//)
parameter := fmt.Sprintf("withdrawViaProxy(%s, %s, %d)", ethereumReceiver, ethereumTokenAddress, amount)
note := parameter
_, packData, err := evmAbi.Pack(parameter, generated.BridgeBankABI, false)
if nil != err {
chain33txLog.Info("withdraw", "Failed to do abi.Pack due to:", err.Error())
return "", err
}
return sendEvmTx(privateKey, contractAddr, chainName, rpcURL, note, packData, 0)
}
......@@ -1092,3 +1092,20 @@ func (manager *Manager) CfgWithdraw(cfgWithdrawReq *relayerTypes.CfgWithdrawReq,
}
return nil
}
func (manager *Manager) WithdrawFromChain33(burn relayerTypes.BurnFromChain33, result *interface{}) error {
manager.mtx.Lock()
defer manager.mtx.Unlock()
if err := manager.checkPermission(); nil != err {
return err
}
txhash, err := manager.chain33Relayer.WithdrawFromChain33(burn.OwnerKey, burn.TokenAddr, burn.EthereumReceiver, burn.Amount)
if nil != err {
return err
}
*result = rpctypes.Reply{
IsOk: true,
Msg: txhash,
}
return nil
}
......@@ -2224,6 +2224,69 @@ func (m *WithdrawSymbol2Fee) GetSymbol2Fee() map[string]int64 {
return nil
}
type WithdrawFromChain33 struct {
OwnerKey string `protobuf:"bytes,1,opt,name=ownerKey,proto3" json:"ownerKey,omitempty"`
TokenAddr string `protobuf:"bytes,2,opt,name=tokenAddr,proto3" json:"tokenAddr,omitempty"`
Amount string `protobuf:"bytes,3,opt,name=amount,proto3" json:"amount,omitempty"`
EthereumReceiver string `protobuf:"bytes,4,opt,name=ethereumReceiver,proto3" json:"ethereumReceiver,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *WithdrawFromChain33) Reset() { *m = WithdrawFromChain33{} }
func (m *WithdrawFromChain33) String() string { return proto.CompactTextString(m) }
func (*WithdrawFromChain33) ProtoMessage() {}
func (*WithdrawFromChain33) Descriptor() ([]byte, []int) {
return fileDescriptor_202a89775a80bd4c, []int{38}
}
func (m *WithdrawFromChain33) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_WithdrawFromChain33.Unmarshal(m, b)
}
func (m *WithdrawFromChain33) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_WithdrawFromChain33.Marshal(b, m, deterministic)
}
func (m *WithdrawFromChain33) XXX_Merge(src proto.Message) {
xxx_messageInfo_WithdrawFromChain33.Merge(m, src)
}
func (m *WithdrawFromChain33) XXX_Size() int {
return xxx_messageInfo_WithdrawFromChain33.Size(m)
}
func (m *WithdrawFromChain33) XXX_DiscardUnknown() {
xxx_messageInfo_WithdrawFromChain33.DiscardUnknown(m)
}
var xxx_messageInfo_WithdrawFromChain33 proto.InternalMessageInfo
func (m *WithdrawFromChain33) GetOwnerKey() string {
if m != nil {
return m.OwnerKey
}
return ""
}
func (m *WithdrawFromChain33) GetTokenAddr() string {
if m != nil {
return m.TokenAddr
}
return ""
}
func (m *WithdrawFromChain33) GetAmount() string {
if m != nil {
return m.Amount
}
return ""
}
func (m *WithdrawFromChain33) GetEthereumReceiver() string {
if m != nil {
return m.EthereumReceiver
}
return ""
}
func init() {
proto.RegisterType((*Account4Relayer)(nil), "types.Account4Relayer")
proto.RegisterType((*ValidatorAddr4EthRelayer)(nil), "types.ValidatorAddr4EthRelayer")
......@@ -2264,105 +2327,107 @@ func init() {
proto.RegisterType((*CfgWithdrawReq)(nil), "types.CfgWithdrawReq")
proto.RegisterType((*WithdrawSymbol2Fee)(nil), "types.WithdrawSymbol2Fee")
proto.RegisterMapType((map[string]int64)(nil), "types.WithdrawSymbol2Fee.Symbol2FeeEntry")
proto.RegisterType((*WithdrawFromChain33)(nil), "types.WithdrawFromChain33")
}
func init() { proto.RegisterFile("relayer.proto", fileDescriptor_202a89775a80bd4c) }
var fileDescriptor_202a89775a80bd4c = []byte{
// 1520 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0xcb, 0x6f, 0xdb, 0x46,
0x13, 0x07, 0xf5, 0xb0, 0xad, 0xb1, 0x64, 0x3b, 0x4c, 0xbe, 0xef, 0x23, 0xf2, 0x05, 0xa9, 0xb1,
0x08, 0x0a, 0x37, 0x08, 0x94, 0xc0, 0x0e, 0xda, 0xa2, 0x48, 0x1a, 0xc8, 0x8a, 0x52, 0x1b, 0x79,
0x19, 0x6b, 0x35, 0x41, 0x7a, 0x29, 0xd6, 0xe2, 0x48, 0x24, 0x4c, 0x91, 0xf2, 0x72, 0x65, 0x59,
0xd7, 0x02, 0x3d, 0xb4, 0x87, 0xf6, 0xd8, 0x5b, 0xaf, 0xed, 0x5f, 0xd5, 0x3f, 0xa5, 0x28, 0xf6,
0xc1, 0xa7, 0x65, 0xb7, 0x30, 0xfa, 0xba, 0xed, 0xfc, 0x76, 0x77, 0xe6, 0xb7, 0x33, 0x3b, 0xb3,
0x43, 0x42, 0x8b, 0x63, 0xc0, 0xe6, 0xc8, 0xdb, 0x13, 0x1e, 0x89, 0xc8, 0xae, 0x8b, 0xf9, 0x04,
0x63, 0xf2, 0x04, 0xd6, 0x3b, 0x83, 0x41, 0x34, 0x0d, 0xc5, 0x43, 0xaa, 0xe7, 0x6d, 0x07, 0x96,
0x27, 0xdc, 0x3f, 0x3d, 0xc6, 0xb9, 0x63, 0x6d, 0x5a, 0x5b, 0x4d, 0x9a, 0x88, 0xb6, 0x0d, 0x35,
0xe6, 0xba, 0xdc, 0xa9, 0x6c, 0x5a, 0x5b, 0x0d, 0xaa, 0xc6, 0x64, 0x0f, 0x9c, 0x37, 0x2c, 0xf0,
0x5d, 0x26, 0x22, 0xde, 0x71, 0x5d, 0xfe, 0xb0, 0x27, 0xbc, 0x44, 0xd3, 0x3d, 0xb8, 0x86, 0xc2,
0x43, 0x8e, 0xd3, 0x71, 0xba, 0x46, 0xe9, 0x6c, 0xd0, 0xf3, 0x13, 0x84, 0xc0, 0x4a, 0xff, 0xcc,
0x63, 0xb1, 0x87, 0xb1, 0xfd, 0x5f, 0x58, 0x12, 0x6a, 0xec, 0x58, 0x9b, 0xd5, 0xad, 0x06, 0x35,
0x12, 0x79, 0x07, 0xeb, 0x14, 0x4f, 0xba, 0x1e, 0x0b, 0x47, 0x78, 0xc0, 0xe2, 0x78, 0xe6, 0xda,
0x04, 0x9a, 0x51, 0xe0, 0x4a, 0x61, 0xe2, 0xb1, 0x18, 0x8d, 0xfe, 0x02, 0x26, 0xd7, 0x84, 0x38,
0xcb, 0xd6, 0xe8, 0x03, 0x14, 0x30, 0x72, 0x0f, 0x9a, 0x14, 0x4f, 0x0e, 0x51, 0x18, 0xbd, 0xb7,
0xa0, 0x51, 0x56, 0x9a, 0x01, 0xe4, 0x11, 0x34, 0x13, 0xbf, 0x1d, 0x7a, 0xd1, 0xac, 0xec, 0xb4,
0xc6, 0xe5, 0x4e, 0xfb, 0x12, 0x1a, 0x2c, 0x8e, 0x51, 0xf4, 0xe7, 0x13, 0xb4, 0x6f, 0x40, 0x7d,
0xe0, 0x31, 0x3f, 0x34, 0x1b, 0xb5, 0x60, 0xdf, 0x81, 0x96, 0x1f, 0xc7, 0x53, 0xec, 0x46, 0xa1,
0xe0, 0x6c, 0x20, 0xcc, 0xfe, 0x22, 0x28, 0xfd, 0x14, 0xcf, 0xc7, 0x47, 0x51, 0xe0, 0x54, 0xd5,
0xb4, 0x91, 0xc8, 0x77, 0x55, 0x58, 0xeb, 0x09, 0x6f, 0x97, 0xfb, 0xee, 0x08, 0xbb, 0x01, 0xf3,
0xc7, 0xf6, 0x16, 0xac, 0x27, 0x3e, 0xef, 0x4a, 0x0b, 0xfb, 0x4f, 0x95, 0xc1, 0x2a, 0x2d, 0xc3,
0x72, 0xe5, 0x91, 0xda, 0xb8, 0xcb, 0x59, 0x78, 0xdc, 0xc9, 0xc8, 0x97, 0x61, 0x49, 0x3d, 0x8c,
0xc2, 0x01, 0x2a, 0xeb, 0x55, 0xaa, 0x05, 0xe9, 0x39, 0x11, 0x1d, 0x63, 0xa8, 0x76, 0xd6, 0xb4,
0xe7, 0x52, 0x20, 0x47, 0xb9, 0x9e, 0xa7, 0x6c, 0xbf, 0x0f, 0x6b, 0x09, 0x91, 0x43, 0x0c, 0x5d,
0xe4, 0xce, 0x92, 0x9a, 0x2f, 0xa1, 0x92, 0x9d, 0xf2, 0xd0, 0xce, 0x0e, 0xc5, 0x01, 0xfa, 0xa7,
0xc8, 0x9d, 0x65, 0xcd, 0xae, 0x04, 0x4b, 0x4b, 0x6c, 0x2c, 0x43, 0xe4, 0x34, 0xb4, 0x25, 0x2d,
0x49, 0x7e, 0x03, 0xe9, 0x12, 0xe9, 0x7d, 0x07, 0x36, 0xad, 0xad, 0x3a, 0xcd, 0x00, 0x35, 0x2b,
0x15, 0xbd, 0x62, 0x63, 0x74, 0x56, 0x35, 0xfb, 0x14, 0x90, 0x71, 0x76, 0x71, 0xe0, 0x8f, 0x59,
0xe0, 0x34, 0xd5, 0x99, 0x13, 0x51, 0xee, 0x43, 0xe1, 0xf5, 0xcf, 0xf6, 0xe4, 0xad, 0x6d, 0xe9,
0x7d, 0x29, 0x40, 0xda, 0xd0, 0xdc, 0x1f, 0x4f, 0x22, 0x2e, 0x9e, 0xe3, 0x9c, 0xe2, 0x89, 0x7d,
0x1b, 0x40, 0x5e, 0x10, 0x26, 0xf0, 0x79, 0x7a, 0x65, 0x72, 0x08, 0x79, 0x0a, 0x1b, 0x26, 0x8b,
0xe8, 0x34, 0x3c, 0x14, 0x4c, 0x4c, 0x55, 0x52, 0xc4, 0x6a, 0xa4, 0xd6, 0xd7, 0xa9, 0x91, 0x34,
0x27, 0xc1, 0xfc, 0x20, 0x36, 0x71, 0x4a, 0x44, 0xf2, 0x8b, 0x05, 0x1b, 0xaf, 0x70, 0x76, 0xc0,
0xa3, 0x89, 0x87, 0x83, 0xb9, 0xbe, 0x08, 0x85, 0xe3, 0x4b, 0x4d, 0xad, 0xfc, 0xf1, 0xef, 0x40,
0xcb, 0xf8, 0xd1, 0x44, 0xc1, 0xdc, 0xbb, 0x02, 0x58, 0x0c, 0x71, 0xf5, 0xe2, 0x10, 0xd7, 0x0a,
0x21, 0xde, 0x84, 0x55, 0x94, 0xd5, 0xc1, 0x84, 0x4d, 0xc7, 0x3f, 0x0f, 0xe5, 0x42, 0xb6, 0x54,
0x08, 0x99, 0xaa, 0x07, 0xca, 0xb3, 0x3a, 0xd6, 0x46, 0x22, 0x1d, 0x58, 0xdd, 0x65, 0x01, 0x0b,
0x07, 0x98, 0xdc, 0xc7, 0x68, 0x16, 0x62, 0x52, 0x64, 0xb4, 0x50, 0x24, 0x5b, 0x29, 0x91, 0x25,
0x6f, 0xa1, 0xf1, 0xd2, 0x0f, 0x45, 0x5f, 0x02, 0x57, 0x51, 0x90, 0xe3, 0x5c, 0xcd, 0x73, 0x26,
0x2e, 0x6c, 0x74, 0x26, 0x13, 0x1e, 0x9d, 0x62, 0x27, 0x08, 0xa2, 0x99, 0x24, 0x69, 0xdf, 0x84,
0x15, 0xa5, 0x32, 0x0b, 0x7a, 0x2a, 0x5f, 0xd1, 0xca, 0xb7, 0x16, 0x34, 0x5f, 0x44, 0x83, 0xe3,
0x9e, 0xf0, 0x7a, 0x7c, 0xb0, 0xfd, 0xe0, 0xcf, 0x37, 0xb1, 0x28, 0xe3, 0x6a, 0x0b, 0x33, 0x8e,
0x8c, 0x60, 0x59, 0x72, 0xd9, 0xed, 0xbf, 0xbb, 0x94, 0x46, 0x66, 0xa8, 0x52, 0x36, 0xa4, 0x92,
0x7d, 0x3a, 0x4e, 0x0d, 0x69, 0x26, 0x65, 0x98, 0xec, 0x40, 0x83, 0xe2, 0x24, 0x98, 0x2b, 0xde,
0x36, 0xd4, 0xfc, 0xf8, 0xf5, 0x73, 0x65, 0x66, 0x85, 0xaa, 0xf1, 0xc2, 0xaa, 0xfb, 0x48, 0x56,
0xf8, 0x49, 0x30, 0x37, 0x37, 0x66, 0xe1, 0x3e, 0x07, 0x96, 0x8f, 0xf4, 0x74, 0x92, 0x4b, 0x46,
0x24, 0x5f, 0x59, 0x50, 0xdb, 0x9d, 0xf2, 0xf0, 0x1f, 0x75, 0xf0, 0xf7, 0x16, 0xac, 0x4b, 0x12,
0xcf, 0x78, 0xa4, 0xcb, 0xf5, 0xce, 0xce, 0x5f, 0xc0, 0xe7, 0x2e, 0x6c, 0x24, 0x45, 0xb7, 0x44,
0xe8, 0x1c, 0x4e, 0x66, 0xd0, 0xea, 0x73, 0x16, 0xc6, 0x43, 0xe4, 0x3a, 0x85, 0x0a, 0x26, 0xad,
0xb2, 0x49, 0x07, 0x96, 0x87, 0x3c, 0x1a, 0x4b, 0xae, 0xc6, 0xbf, 0x46, 0x54, 0x29, 0x1e, 0xe5,
0xea, 0x89, 0x91, 0x72, 0x24, 0x6b, 0x85, 0x8b, 0x7f, 0x0b, 0x96, 0x3e, 0xf7, 0x43, 0xf1, 0xe1,
0x43, 0x19, 0x47, 0x97, 0x09, 0xa6, 0x8c, 0xd5, 0xa8, 0x1a, 0x93, 0xc7, 0xd0, 0xea, 0x9d, 0x62,
0x28, 0x5e, 0x44, 0xa3, 0xfd, 0xd0, 0xc5, 0x33, 0xa9, 0xc6, 0x43, 0x7f, 0xe4, 0x09, 0xb3, 0xcc,
0x48, 0x32, 0xe3, 0x7d, 0xb9, 0x40, 0xd1, 0x69, 0x51, 0x2d, 0x90, 0x5f, 0x2b, 0xe0, 0x18, 0xff,
0xf6, 0xa3, 0x5e, 0xf2, 0x00, 0x09, 0x26, 0xfc, 0x41, 0x6c, 0xca, 0x58, 0xff, 0x2c, 0x57, 0x8c,
0x75, 0x19, 0x4b, 0xa0, 0x5c, 0x11, 0xd5, 0x1d, 0x4d, 0xa9, 0x88, 0x6a, 0x50, 0xbe, 0x78, 0x89,
0x6a, 0xb3, 0x4c, 0x9f, 0xbc, 0x84, 0xca, 0x00, 0x1f, 0x4d, 0x79, 0x28, 0x33, 0x4b, 0xf9, 0xa0,
0x4e, 0x53, 0xf9, 0x7c, 0xb9, 0xae, 0x2f, 0x2a, 0xd7, 0x8b, 0x02, 0xba, 0xb4, 0x38, 0xa0, 0xb9,
0xe2, 0xbd, 0x5c, 0x28, 0xde, 0x59, 0x1c, 0x56, 0x0a, 0x97, 0x25, 0xed, 0x01, 0x1a, 0xf9, 0x1e,
0xc0, 0x81, 0x65, 0x71, 0xa6, 0x3c, 0xaf, 0x5e, 0xd8, 0x2a, 0x4d, 0x44, 0xc9, 0x38, 0x9a, 0x20,
0x67, 0xc2, 0x8f, 0x42, 0xf5, 0x04, 0xe9, 0x37, 0xb6, 0x08, 0x92, 0xaf, 0xab, 0xf0, 0xbf, 0xc4,
0x0d, 0xdb, 0x26, 0x12, 0x89, 0xff, 0xb3, 0x74, 0x29, 0xc5, 0xa0, 0x0c, 0xff, 0x8d, 0x71, 0x38,
0xdf, 0xbd, 0xd4, 0xff, 0x68, 0xf7, 0xb2, 0x74, 0x61, 0xf7, 0xf2, 0x2f, 0x88, 0xc3, 0x19, 0x34,
0xfb, 0x49, 0xf2, 0x62, 0xac, 0x7a, 0x0d, 0xa6, 0x87, 0x49, 0x9f, 0x6b, 0xc4, 0x1c, 0xdf, 0x4a,
0x81, 0x6f, 0xa1, 0x9f, 0xaa, 0x5e, 0xd2, 0x4f, 0x69, 0x97, 0x26, 0x22, 0x79, 0x01, 0xd7, 0xf2,
0x96, 0x3b, 0x9c, 0xb3, 0xb9, 0xfd, 0x11, 0x34, 0x45, 0x0e, 0x54, 0x5f, 0x07, 0xab, 0xdb, 0xd7,
0xdb, 0xea, 0x63, 0xa6, 0x9d, 0x5f, 0x4f, 0x0b, 0x0b, 0xc9, 0x4f, 0x16, 0x5c, 0x57, 0xd3, 0xe6,
0x12, 0x51, 0x3c, 0x99, 0x62, 0x9c, 0x6f, 0xa0, 0xad, 0x02, 0x6b, 0x1b, 0x6a, 0xb2, 0x30, 0xa9,
0xb3, 0xd4, 0xa9, 0x1a, 0xcb, 0x93, 0xa4, 0xce, 0x51, 0x27, 0xa9, 0xd3, 0x0c, 0xc8, 0x75, 0x67,
0xb5, 0x72, 0x77, 0x96, 0x44, 0xa0, 0x5e, 0x8c, 0x80, 0x6c, 0xfc, 0xd3, 0x5e, 0xa7, 0x4e, 0xb5,
0x40, 0x7e, 0xb0, 0xe0, 0x46, 0x91, 0x69, 0x3c, 0x89, 0xc2, 0x18, 0xed, 0x4f, 0x01, 0x70, 0xbb,
0x1b, 0x6b, 0xd4, 0x9c, 0xfc, 0xb6, 0x39, 0xf9, 0x05, 0xa9, 0x42, 0x73, 0x3b, 0xec, 0x27, 0x00,
0x83, 0xed, 0x5e, 0xb2, 0xbf, 0xa2, 0xf6, 0xbf, 0x67, 0xf6, 0x5f, 0x54, 0xeb, 0x68, 0x6e, 0x0b,
0x79, 0x03, 0xcd, 0x43, 0x14, 0xd3, 0xc9, 0xcb, 0x69, 0x70, 0xe8, 0x8f, 0x42, 0xbb, 0x0d, 0xb6,
0x3e, 0x7e, 0xc4, 0x0f, 0xca, 0xbd, 0xec, 0x82, 0x19, 0xe9, 0x21, 0xf5, 0x30, 0x69, 0xe3, 0x0d,
0x6a, 0x24, 0xf2, 0xb3, 0x05, 0xcd, 0x98, 0x0d, 0x31, 0x79, 0x47, 0xec, 0x35, 0xa8, 0x88, 0xc8,
0x28, 0xaa, 0x88, 0x48, 0x3a, 0x4a, 0x05, 0xd3, 0xdc, 0x2c, 0x2d, 0x94, 0x5e, 0x2f, 0x2b, 0x4d,
0x84, 0xc5, 0xb4, 0x6a, 0x17, 0xd2, 0xba, 0x0b, 0x1b, 0x8a, 0x48, 0x06, 0xc5, 0x4e, 0x5d, 0x11,
0x3c, 0x87, 0xcb, 0x26, 0x00, 0x7a, 0xb4, 0xbb, 0xfd, 0xe0, 0xb2, 0x76, 0xd1, 0x86, 0x5a, 0x28,
0x2f, 0xbb, 0xe9, 0x3d, 0xe4, 0xf8, 0xa2, 0x0f, 0xb5, 0x8b, 0x5e, 0x37, 0x59, 0x6b, 0x4c, 0x22,
0xc4, 0xea, 0xda, 0xd4, 0x69, 0x2a, 0x93, 0xcf, 0xe0, 0x7a, 0xaf, 0xbf, 0xa7, 0x18, 0xc8, 0xda,
0x73, 0xe5, 0xd4, 0x24, 0xdf, 0x58, 0xf0, 0xff, 0x5e, 0x7f, 0xaf, 0x1b, 0x85, 0x43, 0x7f, 0x24,
0x55, 0xa1, 0xab, 0xb4, 0xbe, 0x1e, 0x0e, 0x03, 0x3f, 0xc4, 0xab, 0x25, 0xbb, 0xf0, 0x38, 0xc6,
0x5e, 0x14, 0xb8, 0xe9, 0x77, 0x41, 0x02, 0xc8, 0x43, 0x4d, 0x90, 0x0f, 0x30, 0x14, 0x3a, 0x49,
0x5a, 0x34, 0x95, 0xc9, 0x01, 0x6c, 0x98, 0xbe, 0x4c, 0x13, 0x31, 0x1f, 0x49, 0xe6, 0x8b, 0x93,
0x85, 0xc7, 0xc9, 0x47, 0x52, 0x86, 0xfc, 0x4e, 0x63, 0x7f, 0x1f, 0xfe, 0x43, 0x31, 0xc6, 0xd0,
0x35, 0x97, 0x5b, 0xf5, 0x03, 0x52, 0x6d, 0xb1, 0x15, 0xa8, 0x26, 0xad, 0x00, 0x79, 0x06, 0x6b,
0xdd, 0xe1, 0xe8, 0xad, 0x2f, 0x3c, 0x97, 0xb3, 0x99, 0x59, 0xb9, 0xb0, 0x3a, 0xdc, 0x82, 0xc6,
0x10, 0xb1, 0x93, 0xf5, 0xb0, 0x55, 0x9a, 0x01, 0xe4, 0x47, 0x0b, 0xec, 0x44, 0xcb, 0xa1, 0xda,
0xb0, 0xfd, 0x0c, 0xd1, 0xde, 0x07, 0x88, 0x53, 0xc9, 0xe4, 0xef, 0x07, 0x26, 0xff, 0xce, 0x2f,
0x6f, 0x67, 0xc3, 0x5e, 0x28, 0xf8, 0x9c, 0xe6, 0x36, 0xdf, 0x7c, 0x0c, 0xeb, 0xa5, 0x69, 0x7b,
0x03, 0xaa, 0xd9, 0xcf, 0x07, 0x39, 0x94, 0x97, 0xf3, 0x94, 0x05, 0x53, 0x34, 0x04, 0xb5, 0xf0,
0x49, 0xe5, 0x63, 0x6b, 0x17, 0xbe, 0x58, 0x69, 0xb7, 0xef, 0x2b, 0xcb, 0x47, 0x4b, 0xea, 0x77,
0xd0, 0xce, 0x6f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xec, 0xf0, 0x96, 0x4e, 0x1f, 0x12, 0x00, 0x00,
// 1533 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xcc, 0x58, 0x4b, 0x6f, 0x1b, 0x47,
0x12, 0xc6, 0xf0, 0x21, 0x89, 0x25, 0x52, 0x92, 0x47, 0xde, 0xdd, 0x81, 0xd7, 0xf0, 0x0a, 0x0d,
0x63, 0xa1, 0x35, 0x0c, 0xda, 0x90, 0x8c, 0xdd, 0xc5, 0xc2, 0x5e, 0x83, 0xa2, 0xe9, 0x48, 0xf0,
0x4b, 0x68, 0x31, 0x36, 0x9c, 0x4b, 0xd0, 0xe2, 0x14, 0x39, 0x03, 0x0d, 0x67, 0xa8, 0x9e, 0xa6,
0x28, 0x5e, 0x03, 0xe4, 0x90, 0x1c, 0x92, 0x43, 0x0e, 0xb9, 0xe5, 0x9a, 0xfc, 0xaa, 0xfc, 0x94,
0x20, 0xe8, 0xc7, 0x3c, 0x45, 0x29, 0x81, 0x90, 0x87, 0x6f, 0x5d, 0x5f, 0x77, 0x57, 0x7d, 0x5d,
0xd5, 0x55, 0x5d, 0x33, 0xd0, 0xe2, 0x18, 0xb0, 0x39, 0xf2, 0xf6, 0x84, 0x47, 0x22, 0xb2, 0xeb,
0x62, 0x3e, 0xc1, 0x98, 0x3c, 0x85, 0xf5, 0xce, 0x60, 0x10, 0x4d, 0x43, 0xf1, 0x88, 0xea, 0x79,
0xdb, 0x81, 0xe5, 0x09, 0xf7, 0xcf, 0x4e, 0x70, 0xee, 0x58, 0x5b, 0xd6, 0x76, 0x93, 0x26, 0xa2,
0x6d, 0x43, 0x8d, 0xb9, 0x2e, 0x77, 0x2a, 0x5b, 0xd6, 0x76, 0x83, 0xaa, 0x31, 0xd9, 0x07, 0xe7,
0x2d, 0x0b, 0x7c, 0x97, 0x89, 0x88, 0x77, 0x5c, 0x97, 0x3f, 0xea, 0x09, 0x2f, 0xd1, 0x74, 0x1f,
0x6e, 0xa0, 0xf0, 0x90, 0xe3, 0x74, 0x9c, 0xae, 0x51, 0x3a, 0x1b, 0xf4, 0xe2, 0x04, 0x21, 0xb0,
0xd2, 0x3f, 0xf7, 0x58, 0xec, 0x61, 0x6c, 0xff, 0x15, 0x96, 0x84, 0x1a, 0x3b, 0xd6, 0x56, 0x75,
0xbb, 0x41, 0x8d, 0x44, 0xde, 0xc3, 0x3a, 0xc5, 0xd3, 0xae, 0xc7, 0xc2, 0x11, 0x1e, 0xb2, 0x38,
0x9e, 0xb9, 0x36, 0x81, 0x66, 0x14, 0xb8, 0x52, 0x98, 0x78, 0x2c, 0x46, 0xa3, 0xbf, 0x80, 0xc9,
0x35, 0x21, 0xce, 0xb2, 0x35, 0xfa, 0x00, 0x05, 0x8c, 0xdc, 0x87, 0x26, 0xc5, 0xd3, 0x23, 0x14,
0x46, 0xef, 0x6d, 0x68, 0x94, 0x95, 0x66, 0x00, 0x79, 0x0c, 0xcd, 0xc4, 0x6f, 0x47, 0x5e, 0x34,
0x2b, 0x3b, 0xad, 0x71, 0xb5, 0xd3, 0x3e, 0x85, 0x06, 0x8b, 0x63, 0x14, 0xfd, 0xf9, 0x04, 0xed,
0x9b, 0x50, 0x1f, 0x78, 0xcc, 0x0f, 0xcd, 0x46, 0x2d, 0xd8, 0x77, 0xa1, 0xe5, 0xc7, 0xf1, 0x14,
0xbb, 0x51, 0x28, 0x38, 0x1b, 0x08, 0xb3, 0xbf, 0x08, 0x4a, 0x3f, 0xc5, 0xf3, 0xf1, 0x71, 0x14,
0x38, 0x55, 0x35, 0x6d, 0x24, 0xf2, 0x55, 0x15, 0xd6, 0x7a, 0xc2, 0xdb, 0xe3, 0xbe, 0x3b, 0xc2,
0x6e, 0xc0, 0xfc, 0xb1, 0xbd, 0x0d, 0xeb, 0x89, 0xcf, 0xbb, 0xd2, 0xc2, 0xc1, 0x33, 0x65, 0xb0,
0x4a, 0xcb, 0xb0, 0x5c, 0x79, 0xac, 0x36, 0xee, 0x71, 0x16, 0x9e, 0x74, 0x32, 0xf2, 0x65, 0x58,
0x52, 0x0f, 0xa3, 0x70, 0x80, 0xca, 0x7a, 0x95, 0x6a, 0x41, 0x7a, 0x4e, 0x44, 0x27, 0x18, 0xaa,
0x9d, 0x35, 0xed, 0xb9, 0x14, 0xc8, 0x51, 0xae, 0xe7, 0x29, 0xdb, 0xff, 0x84, 0xb5, 0x84, 0xc8,
0x11, 0x86, 0x2e, 0x72, 0x67, 0x49, 0xcd, 0x97, 0x50, 0xc9, 0x4e, 0x79, 0x68, 0x77, 0x97, 0xe2,
0x00, 0xfd, 0x33, 0xe4, 0xce, 0xb2, 0x66, 0x57, 0x82, 0xa5, 0x25, 0x36, 0x96, 0x21, 0x72, 0x1a,
0xda, 0x92, 0x96, 0x24, 0xbf, 0x81, 0x74, 0x89, 0xf4, 0xbe, 0x03, 0x5b, 0xd6, 0x76, 0x9d, 0x66,
0x80, 0x9a, 0x95, 0x8a, 0x5e, 0xb3, 0x31, 0x3a, 0xab, 0x9a, 0x7d, 0x0a, 0xc8, 0x38, 0xbb, 0x38,
0xf0, 0xc7, 0x2c, 0x70, 0x9a, 0xea, 0xcc, 0x89, 0x28, 0xf7, 0xa1, 0xf0, 0xfa, 0xe7, 0xfb, 0xf2,
0xd6, 0xb6, 0xf4, 0xbe, 0x14, 0x20, 0x6d, 0x68, 0x1e, 0x8c, 0x27, 0x11, 0x17, 0x2f, 0x70, 0x4e,
0xf1, 0xd4, 0xbe, 0x03, 0x20, 0x2f, 0x08, 0x13, 0xf8, 0x22, 0xbd, 0x32, 0x39, 0x84, 0x3c, 0x83,
0x0d, 0x93, 0x45, 0x74, 0x1a, 0x1e, 0x09, 0x26, 0xa6, 0x2a, 0x29, 0x62, 0x35, 0x52, 0xeb, 0xeb,
0xd4, 0x48, 0x9a, 0x93, 0x60, 0x7e, 0x10, 0x9b, 0x38, 0x25, 0x22, 0xf9, 0xd1, 0x82, 0x8d, 0xd7,
0x38, 0x3b, 0xe4, 0xd1, 0xc4, 0xc3, 0xc1, 0x5c, 0x5f, 0x84, 0xc2, 0xf1, 0xa5, 0xa6, 0x56, 0xfe,
0xf8, 0x77, 0xa1, 0x65, 0xfc, 0x68, 0xa2, 0x60, 0xee, 0x5d, 0x01, 0x2c, 0x86, 0xb8, 0x7a, 0x79,
0x88, 0x6b, 0x85, 0x10, 0x6f, 0xc1, 0x2a, 0xca, 0xea, 0x60, 0xc2, 0xa6, 0xe3, 0x9f, 0x87, 0x72,
0x21, 0x5b, 0x2a, 0x84, 0x4c, 0xd5, 0x03, 0xe5, 0x59, 0x1d, 0x6b, 0x23, 0x91, 0x0e, 0xac, 0xee,
0xb1, 0x80, 0x85, 0x03, 0x4c, 0xee, 0x63, 0x34, 0x0b, 0x31, 0x29, 0x32, 0x5a, 0x28, 0x92, 0xad,
0x94, 0xc8, 0x92, 0x77, 0xd0, 0x78, 0xe5, 0x87, 0xa2, 0x2f, 0x81, 0xeb, 0x28, 0xc8, 0x71, 0xae,
0xe6, 0x39, 0x13, 0x17, 0x36, 0x3a, 0x93, 0x09, 0x8f, 0xce, 0xb0, 0x13, 0x04, 0xd1, 0x4c, 0x92,
0xb4, 0x6f, 0xc1, 0x8a, 0x52, 0x99, 0x05, 0x3d, 0x95, 0xaf, 0x69, 0xe5, 0x4b, 0x0b, 0x9a, 0x2f,
0xa3, 0xc1, 0x49, 0x4f, 0x78, 0x3d, 0x3e, 0xd8, 0x79, 0xf8, 0xdb, 0x9b, 0x58, 0x94, 0x71, 0xb5,
0x85, 0x19, 0x47, 0x46, 0xb0, 0x2c, 0xb9, 0xec, 0xf5, 0xdf, 0x5f, 0x49, 0x23, 0x33, 0x54, 0x29,
0x1b, 0x52, 0xc9, 0x3e, 0x1d, 0xa7, 0x86, 0x34, 0x93, 0x32, 0x4c, 0x76, 0xa1, 0x41, 0x71, 0x12,
0xcc, 0x15, 0x6f, 0x1b, 0x6a, 0x7e, 0xfc, 0xe6, 0x85, 0x32, 0xb3, 0x42, 0xd5, 0x78, 0x61, 0xd5,
0x7d, 0x2c, 0x2b, 0xfc, 0x24, 0x98, 0x9b, 0x1b, 0xb3, 0x70, 0x9f, 0x03, 0xcb, 0xc7, 0x7a, 0x3a,
0xc9, 0x25, 0x23, 0x92, 0xcf, 0x2c, 0xa8, 0xed, 0x4d, 0x79, 0xf8, 0xa7, 0x3a, 0xf8, 0x6b, 0x0b,
0xd6, 0x25, 0x89, 0xe7, 0x3c, 0xd2, 0xe5, 0x7a, 0x77, 0xf7, 0x77, 0xe0, 0x73, 0x0f, 0x36, 0x92,
0xa2, 0x5b, 0x22, 0x74, 0x01, 0x27, 0x33, 0x68, 0xf5, 0x39, 0x0b, 0xe3, 0x21, 0x72, 0x9d, 0x42,
0x05, 0x93, 0x56, 0xd9, 0xa4, 0x03, 0xcb, 0x43, 0x1e, 0x8d, 0x25, 0x57, 0xe3, 0x5f, 0x23, 0xaa,
0x14, 0x8f, 0x72, 0xf5, 0xc4, 0x48, 0x39, 0x92, 0xb5, 0xc2, 0xc5, 0xbf, 0x0d, 0x4b, 0x1f, 0xfb,
0xa1, 0xf8, 0xf7, 0x23, 0x19, 0x47, 0x97, 0x09, 0xa6, 0x8c, 0xd5, 0xa8, 0x1a, 0x93, 0x27, 0xd0,
0xea, 0x9d, 0x61, 0x28, 0x5e, 0x46, 0xa3, 0x83, 0xd0, 0xc5, 0x73, 0xa9, 0xc6, 0x43, 0x7f, 0xe4,
0x09, 0xb3, 0xcc, 0x48, 0x32, 0xe3, 0x7d, 0xb9, 0x40, 0xd1, 0x69, 0x51, 0x2d, 0x90, 0x9f, 0x2a,
0xe0, 0x18, 0xff, 0xf6, 0xa3, 0x5e, 0xf2, 0x00, 0x09, 0x26, 0xfc, 0x41, 0x6c, 0xca, 0x58, 0xff,
0x3c, 0x57, 0x8c, 0x75, 0x19, 0x4b, 0xa0, 0x5c, 0x11, 0xd5, 0x1d, 0x4d, 0xa9, 0x88, 0x6a, 0x50,
0xbe, 0x78, 0x89, 0x6a, 0xb3, 0x4c, 0x9f, 0xbc, 0x84, 0xca, 0x00, 0x1f, 0x4f, 0x79, 0x28, 0x33,
0x4b, 0xf9, 0xa0, 0x4e, 0x53, 0xf9, 0x62, 0xb9, 0xae, 0x2f, 0x2a, 0xd7, 0x8b, 0x02, 0xba, 0xb4,
0x38, 0xa0, 0xb9, 0xe2, 0xbd, 0x5c, 0x28, 0xde, 0x59, 0x1c, 0x56, 0x0a, 0x97, 0x25, 0xed, 0x01,
0x1a, 0xf9, 0x1e, 0xc0, 0x81, 0x65, 0x71, 0xae, 0x3c, 0xaf, 0x5e, 0xd8, 0x2a, 0x4d, 0x44, 0xc9,
0x38, 0x9a, 0x20, 0x67, 0xc2, 0x8f, 0x42, 0xf5, 0x04, 0xe9, 0x37, 0xb6, 0x08, 0x92, 0xcf, 0xab,
0xf0, 0xb7, 0xc4, 0x0d, 0x3b, 0x26, 0x12, 0x89, 0xff, 0xb3, 0x74, 0x29, 0xc5, 0xa0, 0x0c, 0xff,
0x81, 0x71, 0xb8, 0xd8, 0xbd, 0xd4, 0x7f, 0x6d, 0xf7, 0xb2, 0x74, 0x69, 0xf7, 0xf2, 0x01, 0xc4,
0xe1, 0x1c, 0x9a, 0xfd, 0x24, 0x79, 0x31, 0x56, 0xbd, 0x06, 0xd3, 0xc3, 0xa4, 0xcf, 0x35, 0x62,
0x8e, 0x6f, 0xa5, 0xc0, 0xb7, 0xd0, 0x4f, 0x55, 0xaf, 0xe8, 0xa7, 0xb4, 0x4b, 0x13, 0x91, 0xbc,
0x84, 0x1b, 0x79, 0xcb, 0x1d, 0xce, 0xd9, 0xdc, 0xfe, 0x0f, 0x34, 0x45, 0x0e, 0x54, 0x5f, 0x07,
0xab, 0x3b, 0x9b, 0x6d, 0xf5, 0x31, 0xd3, 0xce, 0xaf, 0xa7, 0x85, 0x85, 0xe4, 0x7b, 0x0b, 0x36,
0xd5, 0xb4, 0xb9, 0x44, 0x14, 0x4f, 0xa7, 0x18, 0xe7, 0x1b, 0x68, 0xab, 0xc0, 0xda, 0x86, 0x9a,
0x2c, 0x4c, 0xea, 0x2c, 0x75, 0xaa, 0xc6, 0xf2, 0x24, 0xa9, 0x73, 0xd4, 0x49, 0xea, 0x34, 0x03,
0x72, 0xdd, 0x59, 0xad, 0xdc, 0x9d, 0x25, 0x11, 0xa8, 0x17, 0x23, 0x20, 0x1b, 0xff, 0xb4, 0xd7,
0xa9, 0x53, 0x2d, 0x90, 0x6f, 0x2d, 0xb8, 0x59, 0x64, 0x1a, 0x4f, 0xa2, 0x30, 0x46, 0xfb, 0xff,
0x00, 0xb8, 0xd3, 0x8d, 0x35, 0x6a, 0x4e, 0x7e, 0xc7, 0x9c, 0xfc, 0x92, 0x54, 0xa1, 0xb9, 0x1d,
0xf6, 0x53, 0x80, 0xc1, 0x4e, 0x2f, 0xd9, 0x5f, 0x51, 0xfb, 0xff, 0x61, 0xf6, 0x5f, 0x56, 0xeb,
0x68, 0x6e, 0x0b, 0x79, 0x0b, 0xcd, 0x23, 0x14, 0xd3, 0xc9, 0xab, 0x69, 0x70, 0xe4, 0x8f, 0x42,
0xbb, 0x0d, 0xb6, 0x3e, 0x7e, 0xc4, 0x0f, 0xcb, 0xbd, 0xec, 0x82, 0x19, 0xe9, 0x21, 0xf5, 0x30,
0x69, 0xe3, 0x0d, 0x6a, 0x24, 0xf2, 0x83, 0x05, 0xcd, 0x98, 0x0d, 0x31, 0x79, 0x47, 0xec, 0x35,
0xa8, 0x88, 0xc8, 0x28, 0xaa, 0x88, 0x48, 0x3a, 0x4a, 0x05, 0xd3, 0xdc, 0x2c, 0x2d, 0x94, 0x5e,
0x2f, 0x2b, 0x4d, 0x84, 0xc5, 0xb4, 0x6a, 0x97, 0xd2, 0xba, 0x07, 0x1b, 0x8a, 0x48, 0x06, 0xc5,
0x4e, 0x5d, 0x11, 0xbc, 0x80, 0xcb, 0x26, 0x00, 0x7a, 0xb4, 0xbb, 0xf3, 0xf0, 0xaa, 0x76, 0xd1,
0x86, 0x5a, 0x28, 0x2f, 0xbb, 0xe9, 0x3d, 0xe4, 0xf8, 0xb2, 0x0f, 0xb5, 0xcb, 0x5e, 0x37, 0x59,
0x6b, 0x4c, 0x22, 0xc4, 0xea, 0xda, 0xd4, 0x69, 0x2a, 0x93, 0x8f, 0x60, 0xb3, 0xd7, 0xdf, 0x57,
0x0c, 0x64, 0xed, 0xb9, 0x76, 0x6a, 0x92, 0x2f, 0x2c, 0xf8, 0x7b, 0xaf, 0xbf, 0xdf, 0x8d, 0xc2,
0xa1, 0x3f, 0x92, 0xaa, 0xd0, 0x55, 0x5a, 0xdf, 0x0c, 0x87, 0x81, 0x1f, 0xe2, 0xf5, 0x92, 0x5d,
0x78, 0x1c, 0x63, 0x2f, 0x0a, 0xdc, 0xf4, 0xbb, 0x20, 0x01, 0xe4, 0xa1, 0x26, 0xc8, 0x07, 0x18,
0x0a, 0x9d, 0x24, 0x2d, 0x9a, 0xca, 0xe4, 0x10, 0x36, 0x4c, 0x5f, 0xa6, 0x89, 0x98, 0x8f, 0x24,
0xf3, 0xc5, 0xc9, 0xc2, 0x93, 0xe4, 0x23, 0x29, 0x43, 0x7e, 0xa1, 0xb1, 0x7f, 0x00, 0x7f, 0xa1,
0x18, 0x63, 0xe8, 0x9a, 0xcb, 0xad, 0xfa, 0x01, 0xa9, 0xb6, 0xd8, 0x0a, 0x54, 0x93, 0x56, 0x80,
0x3c, 0x87, 0xb5, 0xee, 0x70, 0xf4, 0xce, 0x17, 0x9e, 0xcb, 0xd9, 0xcc, 0xac, 0x5c, 0x58, 0x1d,
0x6e, 0x43, 0x63, 0x88, 0xd8, 0xc9, 0x7a, 0xd8, 0x2a, 0xcd, 0x00, 0xf2, 0x9d, 0x05, 0x76, 0xa2,
0xe5, 0x48, 0x6d, 0xd8, 0x79, 0x8e, 0x68, 0x1f, 0x00, 0xc4, 0xa9, 0x64, 0xf2, 0xf7, 0x5f, 0x26,
0xff, 0x2e, 0x2e, 0x6f, 0x67, 0xc3, 0x5e, 0x28, 0xf8, 0x9c, 0xe6, 0x36, 0xdf, 0x7a, 0x02, 0xeb,
0xa5, 0x69, 0x7b, 0x03, 0xaa, 0xd9, 0xcf, 0x07, 0x39, 0x94, 0x97, 0xf3, 0x8c, 0x05, 0x53, 0x34,
0x04, 0xb5, 0xf0, 0xbf, 0xca, 0x7f, 0x2d, 0xf2, 0x8d, 0x05, 0x9b, 0x89, 0xc5, 0x0f, 0xa6, 0x93,
0xdc, 0x83, 0x4f, 0x56, 0xda, 0xed, 0x07, 0xca, 0x1f, 0xc7, 0x4b, 0xea, 0x27, 0xd5, 0xee, 0xcf,
0x01, 0x00, 0x00, 0xff, 0xff, 0x7c, 0xc0, 0x50, 0x01, 0xb5, 0x12, 0x00, 0x00,
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment