content: package com.alipay.antchain.bridge.plugins.fiscobcos.abi;
  
  import java.math.BigInteger;
  import java.util.ArrayList;
  import java.util.Arrays;
  import java.util.Collections;
  import java.util.List;
  import org.fisco.bcos.sdk.v3.client.Client;
  import org.fisco.bcos.sdk.v3.codec.datatypes.Address;
  import org.fisco.bcos.sdk.v3.codec.datatypes.Bool;
  import org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes;
  import org.fisco.bcos.sdk.v3.codec.datatypes.DynamicStruct;
  import org.fisco.bcos.sdk.v3.codec.datatypes.Event;
  import org.fisco.bcos.sdk.v3.codec.datatypes.Function;
  import org.fisco.bcos.sdk.v3.codec.datatypes.Type;
  import org.fisco.bcos.sdk.v3.codec.datatypes.TypeReference;
  import org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String;
  import org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32;
  import org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint16;
  import org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256;
  import org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint32;
  import org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint64;
  import org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint8;
  import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple1;
  import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple2;
  import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple3;
  import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple4;
  import org.fisco.bcos.sdk.v3.codec.datatypes.generated.tuples.generated.Tuple6;
  import org.fisco.bcos.sdk.v3.contract.Contract;
  import org.fisco.bcos.sdk.v3.crypto.CryptoSuite;
  import org.fisco.bcos.sdk.v3.crypto.keypair.CryptoKeyPair;
  import org.fisco.bcos.sdk.v3.eventsub.EventSubCallback;
  import org.fisco.bcos.sdk.v3.model.CryptoType;
  import org.fisco.bcos.sdk.v3.model.TransactionReceipt;
  import org.fisco.bcos.sdk.v3.model.callback.TransactionCallback;
  import org.fisco.bcos.sdk.v3.transaction.model.exception.ContractException;
  
  @SuppressWarnings("unchecked")
  public class SDPMsg extends Contract {
      public static final String[] BINARY_ARRAY = {"60806040523480156200001157600080fd5b506200001d336200002d565b620000276200007d565b6200014c565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600054600160a81b900460ff1615620000ec5760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff600160a01b909104811610156200014a576000805460ff60a01b191660ff60a01b17905560405160ff81527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b615bc3806200015c6000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063838a102c116100ad578063c09b261b11610071578063c09b261b14610275578063c1cecc5a14610288578063e1c7392a1461029b578063f2fde38b146102a3578063f76f703b146102b657600080fd5b8063838a102c1461020b5780638da5cb5b1461021e57806391198fcd1461022f578063a9d662af14610242578063b5db295a1461025557600080fd5b806360e8b9c9116100f457806360e8b9c9146101a55780636e109afe146101b8578063715018a6146101cb578063762f3d6e146101d35780638037d45e146101e657600080fd5b806305ca8da6146101315780630d9ae9e514610157578063203c2c851461017f5780633ac6dfb11461019457806356cb2d021461019c575b600080fd5b61014461013f366004614f30565b6102c9565b6040519081526020015b60405180910390f35b61016a610165366004614fbc565b610474565b60405163ffffffff909116815260200161014e565b61019261018d36600461503d565b61052e565b005b600254610144565b61014460025481565b6101926101b3366004615088565b61084f565b6101446101c63660046150b1565b6108f1565b610192610b1e565b6101446101e13660046150b1565b610b54565b6001546001600160a01b03165b6040516001600160a01b03909116815260200161014e565b6101926102193660046151a2565b610ceb565b6000546001600160a01b03166101f3565b61014461023d366004614f30565b610d44565b6001546101f3906001600160a01b031681565b61026861026336600461523a565b610e70565b60405161014e91906152d3565b610192610283366004615330565b610fb2565b610192610296366004615330565b611197565b610192611294565b6101926102b1366004615088565b6113c1565b6101926102c4366004615330565b611459565b6000604080516101208101825260028152600060208083018290528351601f8b0182900482028101820185528a81529193830191908b908b90819084018382808284376000920191909152505050908252506020810188905260400186610331576000610334565b60015b60ff16815260200161037f8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152503392508c91506115a89050565b63ffffffff166001600160401b0316815260200163ffffffff8016815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250938552505060408051602081810190925292835290920152506002549091506103fb908290611608565b6001546001600160a01b031663e41fb517336104168461180f565b6040518363ffffffff1660e01b81526004016104339291906153a9565b600060405180830381600087803b15801561044d57600080fd5b505af1158015610461573d6000803e3d6000fd5b5050505060200151979650505050505050565b6000600254848460405160200161048c9291906153d5565b60405160208183030381529060405280519060200120146104c85760405162461bcd60e51b81526004016104bf906153e5565b60405180910390fd5b600061050d88888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250879150611a839050565b60009081526004602052604090205463ffffffff1698975050505050505050565b6000546001600160a01b031633146105585760405162461bcd60e51b81526004016104bf9061541c565b610560614e7f565b6105a283838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508593925050611ae09050565b60e081015160ff1661060d5760405162461bcd60e51b815260206004820152602e60248201527f5344505f4d53475f4552524f523a20746865206d6573736167652074696d656f60448201526d075744d65617375726520697320360941b60648201526084016104bf565b8060e0015160ff16600214156107ee5780610100015160076000836040015160405160200161063c9190615451565b6040516020818303038152906040528051906020012081526020019081526020016000206003015411156107805760208082015160009081526008909152604090205460ff166106eb5760405162461bcd60e51b815260206004820152603460248201527f5344505f4d53475f4552524f523a20657863657074696f6e206d657373616765604482015273081a185cda08191bd95cc81b9bdd08195e1a5cdd60621b60648201526084016104bf565b6106f484611c9a565b6001600160a01b031663f6d750e48260200151836040015184606001518560c001518660a001518761012001518861014001516040518863ffffffff1660e01b8152600401610749979695949392919061546d565b600060405180830381600087803b15801561076357600080fd5b505af1158015610777573d6000803e3d6000fd5b50505050610849565b60405162461bcd60e51b815260206004820152603f60248201527f5344505f4d53475f4552524f523a20746865206d657373616765206973206e6f60448201527f742074696d656f757420776974682074696d656f75744d65617375726520320060648201526084016104bf565b60405162461bcd60e51b815260206004820152602a60248201527f5344505f4d53475f4552524f523a20756e737570706f727465642074696d656f6044820152697574206d65617375726560b01b60648201526084016104bf565b50505050565b6000546001600160a01b031633146108795760405162461bcd60e51b81526004016104bf9061541c565b6001600160a01b0381166108cf5760405162461bcd60e51b815260206004820152601b60248201527f5344504d73673a20696e76616c696420616d20636f6e7472616374000000000060448201526064016104bf565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000600460ff841611156109475760405162461bcd60e51b815260206004820152601c60248201527f5344503a20696e76616c69642074696d656f7574206d6561737572650000000060448201526064016104bf565b604080516101608101825260038152600060208083018290528351601f8d0182900482028101820185528c81528b949293928301918e908e908190840183828082843760009201919091525050509082525060208101849052604001896109af5760006109b2565b60015b60ff1681526020016001600160401b0380168152602001610a0c8d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250339250889150611ccd9050565b63ffffffff1681526020018660ff16815260200185815260200188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250506040805160208181019092529283529092015250600254909150610a82908290611d02565b6020808201516000908152600890915260409020805460ff19166001908117909155546001600160a01b031663e41fb51733610abd84611f66565b6040518363ffffffff1660e01b8152600401610ada9291906153a9565b600060405180830381600087803b158015610af457600080fd5b505af1158015610b08573d6000803e3d6000fd5b50505050602001519a9950505050505050505050565b6000546001600160a01b03163314610b485760405162461bcd60e51b81526004016104bf9061541c565b610b52600061226c565b565b6000600460ff84161115610baa5760405162461bcd60e51b815260206004820152601c60248201527f5344503a20696e76616c69642074696d656f7574206d6561737572650000000060448201526064016104bf565b604080516101608101825260038152600060208083018290528351601f8d0182900482028101820185528c81528b949293928301918e908e90819084018382808284376000920191909152505050908252506020810184905260400189610c12576000610c15565b60015b60ff168152602001610c608d8d8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152503392508891506115a89050565b63ffffffff166001600160401b0316815260200163ffffffff801681526020018660ff16815260200185815260200188888080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250506040805160208181019092529283529092015250600254909150610a82908290611d02565b6000546001600160a01b03163314610d155760405162461bcd60e51b81526004016104bf9061541c565b80604051602001610d269190615451565b60408051601f19818403018152919052805160209091012060025550565b6000604080516101208101825260028152600060208083018290528351601f8b0182900482028101820185528a81529193830191908b908b90819084018382808284376000920191909152505050908252506020810188905260400186610dac576000610daf565b60015b60ff1681526020016001600160401b0380168152602001610e098a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152503392508c9150611ccd9050565b63ffffffff16815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920182905250938552505060408051602081810190925292835290920152506002549091506103fb908290611608565b6040805160a0810182526000808252606060208301819052928201819052918101829052608081019190915260076000848460","4051602001610eb39291906153d5565b60408051601f198184030181529181528151602092830120835282820193909352908201600020825160a08101909352805461ffff1683526001810180549192840191610eff906154db565b80601f0160208091040260200160405190810160405280929190818152602001828054610f2b906154db565b8015610f785780601f10610f4d57610100808354040283529160200191610f78565b820191906000526020600020905b815481529060010190602001808311610f5b57829003601f168201915b505050918352505060028201546020820152600382015460408201526004909101546001600160401b031660609091015290505b92915050565b6001546001600160a01b0316331461100c5760405162461bcd60e51b815260206004820152601d60248201527f5344504d73673a206e6f742076616c696420616d20636f6e747261637400000060448201526064016104bf565b600061104d83838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506122bc92505050565b90508063ffffffff16600114156110a5576110a086868686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061232192505050565b61118f565b8063ffffffff16600214156110f6576110a086868686868080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506123c792505050565b8063ffffffff1660031415611147576110a086868686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061250992505050565b60405162461bcd60e51b815260206004820152601760248201527f756e737570706f72746564207364702076657273696f6e00000000000000000060448201526064016104bf565b505050505050565b6040805160a06020601f88018190040282018101909252608081018681526000928291908990899081908501838280828437600092019190915250505090825250602080820187905260408051601f8701839004830281018301825286815292019190869086908190840183828082843760009201919091525050509082525063ffffffff6020909101526001549091506001600160a01b031663e41fb517336112408461266c565b6040518363ffffffff1660e01b815260040161125d9291906153a9565b600060405180830381600087803b15801561127757600080fd5b505af115801561128b573d6000803e3d6000fd5b5050505061118f565b600054600160a81b900460ff16158080156112bc57506000546001600160a01b90910460ff16105b806112dd5750303b1580156112dd5750600054600160a01b900460ff166001145b6113405760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104bf565b6000805460ff60a01b1916600160a01b179055801561136d576000805460ff60a81b1916600160a81b1790555b6113763361226c565b80156113be576000805460ff60a81b19169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6000546001600160a01b031633146113eb5760405162461bcd60e51b81526004016104bf9061541c565b6001600160a01b0381166114505760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016104bf565b6113be8161226c565b6040805160a06020601f88018190040282018101909252608081018681526000928291908990899081908501838280828437600092019190915250505090825250602080820187905260408051601f87018390048302810183018252868152920191908690869081908401838280828437600092019190915250505090825250604080516020601f8a018190048102820181019092528881529181019161151e918a908a90819084018382808284376000920191909152503392508a9150611ccd9050565b63ffffffff169052905060006115338261266c565b60015460405163e41fb51760e01b81529192506001600160a01b03169063e41fb5179061156690339085906004016153a9565b600060405180830381600087803b15801561158057600080fd5b505af1158015611594573d6000803e3d6000fd5b5050505050505050505050565b5050505050565b6000806115b6858585612787565b6000818152600560205260408120805492935063ffffffff9092169182916115dd83615526565b91906101000a81548163ffffffff021916908363ffffffff1602179055505080925050509392505050565b816000015163ffffffff166002146116325760405162461bcd60e51b81526004016104bf9061554a565b63ffffffff8260e0015151111561165b5760405162461bcd60e51b81526004016104bf90615581565b60008260e0015151836040015151607961167591906155c8565b61167f91906155c8565b90506000816001600160401b0381111561169b5761169b615160565b6040519080825280601f01601f1916602001820160405280156116c5576020820181803683370190505b50845190915082906116ed9082906116e19063ff0000006155e0565b63ffffffff1690840152565b6116f760206127f6565b6117019082615608565b6040860151909150611714828285612a25565b80516117219060046155c8565b61172b9083615608565b6060870151818501529150611741602083615608565b915061175282876080015185612b13565b61175d600183615608565b915061176e828760a0015185612b24565b61177860406127f6565b6117829083615608565b9150611793828760c0015185612b35565b61179d60206127f6565b6117a79083615608565b91506117b8828760e0015185612a25565b60e0860151516117c99060046155c8565b6117d39083615608565b338185015291506117e5602083615608565b80840186905291506117f8602083615608565b505081516020928301209490910193909352505050565b6060816000015163ffffffff1660021461183b5760405162461bcd60e51b81526004016104bf9061554a565b63ffffffff8260e001515111156118645760405162461bcd60e51b81526004016104bf90615581565b60208201516118855760405162461bcd60e51b81526004016104bf9061561f565b6080820151600090600260ff9091161180156118df576101008401515160e0850151516040860151516118b99060596155c8565b6118c391906155c8565b6118ce9060046155c8565b6118d891906155c8565b9150611903565b60e0840151516040850151516118f69060596155c8565b61190091906155c8565b91505b6000826001600160401b0381111561191d5761191d615160565b6040519080825280601f01601f191660200182016040528015611947576020820181803683370190505b50855190915083906119639082906116e19063ff0000006155e0565b61196d60206127f6565b6119779082615608565b6020878101518285015290915061198e9082615608565b60408701519091506119a1828285612a25565b80516119ae9060046155c8565b6119b89083615608565b60608801518185015291506119ce602083615608565b91506119df82886080015185612b13565b6119ea600183615608565b91506119fb828860a0015185612b24565b611a0560406127f6565b611a0f9083615608565b9150611a20828860c0015185612b35565b611a2a60206127f6565b611a349083615608565b9150611a45828860e0015185612a25565b60e087015151611a569060046155c8565b611a609083615608565b91508315611a7857611a788288610100015185612a25565b509095945050505050565b600083604051602001611a969190615451565b60408051601f198184030181528282528051602091820120908301528101849052606081018390526080016040516020818303038152906040528051906020012090509392505050565b8051611aeb826122bc565b63ffffffff168352611afd6020612b46565b611b079082615608565b9050611b138183015190565b6020840152611b20602090565b611b2d9060ff1682615608565b90506000611b3b8284612b51565b604085018190528051909150611b529060046155c8565b611b5c9083615608565b9150611b688284015190565b6060850152611b78602083615608565b9150611b848284015190565b60ff166080850152611b97600183615608565b9150611ba38284015190565b6001600160401b031660a0850152611bbc600883615608565b9150611bc88284015190565b63ffffffff1660c0850152611bde600483615608565b9150611bea8284015190565b60ff1660e0850152611bfd600183615608565b91506000611c0b8385612b51565b9050611c1681612c57565b6101008601528051611c299060046155c8565b611c339084615608565b9250611c3f8385612b51565b610120860181905251611c539060046155c8565b611c5d9084615608565b9250600260ff16856080015160ff1611156115a157611c7c8385612b51565b610140860181905251611c909060046155c8565b61118f9084615608565b604080516020808252818301909252600091829190602082018180368337505050602081018490529050825b9392505050565b600080611cdb858585612787565b6000818152600360205260408120805492935063ffffffff9092169182916115dd83615526565b816000015163ffffffff16600314611d2c5760405162461bcd60e51b81526004016104bf9061554a565b63ffffffff826101200151511115611d565760405162461bcd60e51b81526004016104bf90615581565b6000611d66836101000151612d13565b90506000815184610120015151856040015151607e611d8591906155c8565b611d8f91906155c8565b611d9991906155c8565b90506000816001600160401b03811115611db557611db5615160565b6040519080825280601f01601f191660200182016040528015611ddf576020820181803683370190505b5085519091508290611e01908290611dfb9063ff0000006155e0565b84612b35565b611e0b60206127f6565b611e159082615608565b6040870151909150611e28828285612a25565b8051611e359060046155c8565b611e3f9083615608565b6060880151818501529150611e55602083615608565b9150611e6682886080015185612b13565b611e71600183615608565b9150611e82828860a0015185612b24565b611e8c60406127f6565b611e969083615608565b9150611ea7828860c001518561","2b35565b611eb160206127f6565b611ebb9083615608565b9150611ecc828860e0015185612b13565b611ed7600183615608565b9150611ee4828685612a25565b8451611ef19060046155c8565b611efb9083615608565b9150611f0d8288610120015185612a25565b61012087015151611f1f9060046155c8565b611f299083615608565b33818501529150611f3b602083615608565b8084018790529150611f4e602083615608565b50508151602092830120959091019490945250505050565b6060816000015163ffffffff16600314611f925760405162461bcd60e51b81526004016104bf9061554a565b63ffffffff826101200151511115611fbc5760405162461bcd60e51b81526004016104bf90615581565b6020820151611fdd5760405162461bcd60e51b81526004016104bf9061561f565b600080600260ff16846080015160ff161190506000612000856101000151612d13565b90508115612059576101408501515181516101208701515160408801515161202990605e6155c8565b61203391906155c8565b61203d91906155c8565b6120489060046155c8565b61205291906155c8565b925061208a565b80516101208601515160408701515161207390605e6155c8565b61207d91906155c8565b61208791906155c8565b92505b6000836001600160401b038111156120a4576120a4615160565b6040519080825280601f01601f1916602001820160405280156120ce576020820181803683370190505b50865190915084906120ea908290611dfb9063ff0000006155e0565b6120f460206127f6565b6120fe9082615608565b602088810151828501529091506121159082615608565b6040880151909150612128828285612a25565b80516121359060046155c8565b61213f9083615608565b6060890151818501529150612155602083615608565b915061216682896080015185612b13565b612171600183615608565b9150612182828960a0015185612b24565b61218c60406127f6565b6121969083615608565b91506121a7828960c0015185612b35565b6121b160206127f6565b6121bb9083615608565b91506121cc828960e0015185612b13565b6121d7600183615608565b91506121e4828585612a25565b83516121f19060046155c8565b6121fb9083615608565b915061220d8289610120015185612a25565b6101208801515161221f9060046155c8565b6122299083615608565b91508415612260576122418289610140015185612a25565b610140880151516122539060046155c8565b61225d9083615608565b91505b50909695505050505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8051601c81830101516000916001600160f81b03198083161415612317576040805160048082528183019092526000918291906020820181803683370190505095909201601d01516021860152505050600490910151919050565b5060019392505050565b60408051608081018252606080825260006020830181905292820181905281019190915261234f8183612dad565b60025481516040516123649190602001615451565b60405160208183030381529060405280519060200120146123975760405162461bcd60e51b81526004016104bf906153e5565b606081015163ffffffff90811614156123bb576123b685858584612f1e565b6115a1565b6115a185858584612f94565b604080516101208101825260008082526020820181905260609282018390528282018190526080820181905260a0820181905260c082015260e0810182905261010081019190915261241981836131b1565b60025481604001516040516020016124319190615451565b60405160208183030381529060405280519060200120146124645760405162461bcd60e51b81526004016104bf906153e5565b608081015160ff16158061247f5750608081015160ff166001145b15612490576123b685858584613303565b608081015160ff16600214156124ac576123b6858585846134c0565b608081015160ff16600314156124c8576123b6858585846135ae565b60405162461bcd60e51b8152602060048201526016602482015275756e65787065637465642061746f6d696320666c616760501b60448201526064016104bf565b612511614e7f565b61251b8183611ae0565b60025481604001516040516020016125339190615451565b60405160208183030381529060405280519060200120146125965760405162461bcd60e51b815260206004820152601f60248201527f5344505f4d73673a2077726f6e6720726563656976696e6720646f6d61696e0060448201526064016104bf565b608081015160ff1615806125b15750608081015160ff166001145b156125c2576123b68585858461369b565b608081015160ff16600214156125de576123b685858584613918565b608081015160ff16600314156125fa576123b685858584613a43565b608081015160ff1660041415612616576123b685858584613b1f565b60405162461bcd60e51b815260206004820152602560248201527f5344505f4d53475f4552524f523a20756e65787065637465642061746f6d696360448201526420666c616760d81b60648201526084016104bf565b6060600061267d8360000151613ce3565b61268a8460400151613ce3565b6126959060046155c8565b6126a09060206155c8565b6126aa91906155c8565b90506000816001600160401b038111156126c6576126c6615160565b6040519080825280601f01601f1916602001820160405280156126f0576020820181803683370190505b508451909150829061270490829084613d2f565b845161270f90613ce3565b6127199082615608565b602086810151828501529091506127309082615608565b905061274181866060015184612b35565b61274b6020612b46565b6127559082615608565b905061276681866040015184613d2f565b6127738560400151613ce3565b61277d9082615608565b5090949350505050565b60008061279384613d8d565b905080856040516020016127a79190615451565b60408051601f1981840301815282825280516020918201209083019390935281019190915260608101849052608001604051602081830303815290604052805190602001209150509392505050565b60008160088114612903576010811461290c5760188114612915576020811461291e5760288114612927576030811461293057603881146129395760408114612942576048811461294b5760508114612954576058811461295d5760608114612966576068811461296f57607081146129785760788114612981576080811461298a5760888114612993576090811461299c57609881146129a55760a081146129ae5760a881146129b75760b081146129c05760b881146129c95760c081146129d25760c881146129db5760d081146129e45760d881146129ed5760e081146129f65760e881146129ff5760f08114612a085760f88114612a11576101008114612a1a5760209150612a1f565b60019150612a1f565b60029150612a1f565b60039150612a1f565b60049150612a1f565b60059150612a1f565b60069150612a1f565b60079150612a1f565b60089150612a1f565b60099150612a1f565b600a9150612a1f565b600b9150612a1f565b600c9150612a1f565b600d9150612a1f565b600e9150612a1f565b600f9150612a1f565b60109150612a1f565b60119150612a1f565b60129150612a1f565b60139150612a1f565b60149150612a1f565b60159150612a1f565b60169150612a1f565b60179150612a1f565b60189150612a1f565b60199150612a1f565b601a9150612a1f565b601b9150612a1f565b601c9150612a1f565b601d9150612a1f565b601e9150612a1f565b601f9150612a1f565b602091505b50919050565b8151612a32848284612b35565b612a3d600485615608565b93508063ffffffff16841015612ab05760405162461bcd60e51b815260206004820152603260248201527f7661724279746573546f42797465733a206f6666736574206c657373207468616044820152710dc40e8d0ca40d2dce0eae840d8cadccee8d60731b60648201526084016104bf565b612ac063ffffffff821685615608565b935080158015612acf576115a1565b8483018051601f84168015602002818801018581018215602002838601015b81831015612b06578251815260209283019201612aee565b5050509152505050505050565b909101600019810180519290915252565b909101600719810180519290915252565b909101600319810180519290915252565b6000610fac826127f6565b60606000612b5f8484015190565b63ffffffff169050612b72600485615608565b935083811115612bdd5760405162461bcd60e51b815260206004820152603060248201527f6279746573546f56617242797465733a206f6666736574206c6573732074686160448201526f6e206c656e677468206f6620626f647960801b60648201526084016104bf565b612be78185615608565b9350606081158015612c0457604051915060208201604052612c4e565b6040519150601f8316801560200281840101848101888315602002848a0101015b81831015612c3d578051835260209283019201612c25565b5050848452601f01601f1916604052505b50949350505050565b80516000906020811115612cb95760405162461bcd60e51b815260206004820152602360248201527f333262797465732062696720696e7465676572206174206d6f737420666f72206044820152626e6f7760e81b60648201526084016104bf565b6000816001600160401b03811115612cd357612cd3615160565b6040519080825280601f01601f191660200182016040528015612cfd576020820181803683370190505b5084518152938201519190930151900392915050565b60408051602080825281830190925260609160009190602082018180368337505060408051602080825281830190925292935060009291508082018180368337019050509050606084602084015260015b6020811015612c4e578060208501035181602085010351808203612da35760405193506020860151838501528284528260208501016040525050612c4e565b5050600101612d64565b80516000612dbb8284015190565b612dc69060206155e0565b905060008163ffffffff166001600160401b03811115612de857612de8615160565b6040519080825280601f01601f191660200182016040528015612e12576020820181803683370190505b509050612e20838583613dbb565b612e2981613ce3565b612e339084615608565b92506000612e418486015190565b9050612e4e602085615608565b93506000612e5c8587015190565b9050612e6860206127f6565b612e729086615608565b94506000612e808688015190565b612e8b9060206155e0565b905060008163ffffffff166001600160401b03811115612e","ad57612ead615160565b6040519080825280601f01601f191660200182016040528015612ed7576020820181803683370190505b509050612ee5878983613dbb565b612eee81613ce3565b612ef89088615608565b5093885250602087019190915263ffffffff166060860152604090940193909352505050565b612f2781613dfa565b6001600160a01b031663ff098be785858585604001516040518563ffffffff1660e01b8152600401612f5c9493929190615689565b600060405180830381600087803b158015612f7657600080fd5b505af1158015612f8a573d6000803e3d6000fd5b5050505050505050565b6000612fdb85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050506020850151869150613e09565b90508063ffffffff16826060015163ffffffff161461303c5760405162461bcd60e51b815260206004820152601a60248201527f5344504d73673a2073657175656e6365206e6f7420657175616c00000000000060448201526064016104bf565b60006060600061304b85613dfa565b90506001600160a01b0381163b613094576000925060405180604001604052806014815260200173726563656976657220686173206e6f20636f646560601b8152509150613164565b604080860151905163c09b261b60e01b81526001600160a01b0383169163c09b261b916130c9918c918c918c91600401615689565b600060405180830381600087803b1580156130e357600080fd5b505af19250505080156130f4575060015b61315f576131006156c0565b806308c379a0141561312757506131156156dc565b806131205750613129565b9150613164565b505b3d808015613153576040519150601f19603f3d011682016040523d82523d6000602084013e613158565b606091505b5050613164565b600192505b7f5c739d2e6f1ca8bbfc6b71f12b702b9c87e02646edd83b3600d624abb67fab048888888488888860405161319f979695949392919061575a565b60405180910390a15050505050505050565b80516131bc826122bc565b63ffffffff1683526131ce6020612b46565b6131d89082615608565b90506131e48183015190565b60208401526131f1602090565b6131fe9060ff1682615608565b9050600061320c8284612b51565b6040850181905280519091506132239060046155c8565b61322d9083615608565b91506132398284015190565b6060850152613249602083615608565b91506132558284015190565b60ff166080850152613268600183615608565b91506132748284015190565b6001600160401b031660a085015261328d600883615608565b91506132998284015190565b63ffffffff1660c08501526132af600483615608565b91506132bb8284612b51565b60e08501819052516132ce9060046155c8565b6132d89083615608565b9150600260ff16846080015160ff161115610849576132f78284612b51565b61010085015250505050565b6000606063ffffffff80168360c0015163ffffffff16141561342957600061336b87878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050606087015160a0880151899250613e3e565b60008181526006602052604090205490915060ff16156133cd5760405162461bcd60e51b815260206004820181905260248201527f5344504d73673a206e6f6e636520686173206265656e2070726f63657373656460448201526064016104bf565b6133d987878787613e77565b6080860151919450925060ff1661340b5781836134095760405162461bcd60e51b81526004016104bf91906157aa565b505b6000908152600660205260409020805460ff1916600117905561343b565b61343586868686613fb1565b90925090505b7fd0831f2b07fd854a865c682cb68bd34a56d746ae81a34d87c820e51ab979c3d38360200151878787876040015161347289614194565b8960c001518a60a001518b608001518b8b60405161349a9b9a999897969594939291906157bd565b60405180910390a1608083015160ff166001141561118f5761118f8387878786866141a3565b6134c981614194565b6001600160a01b031663e5512e9782602001518686868660c001518760a001518860e001516040518863ffffffff1660e01b81526004016135109796959493929190615855565b600060405180830381600087803b15801561352a57600080fd5b505af115801561353e573d6000803e3d6000fd5b505050507fd0831f2b07fd854a865c682cb68bd34a56d746ae81a34d87c820e51ab979c3d38160200151858585856040015161357987614194565b8760c001518860a00151896080015160016040516135a09a999897969594939291906158a2565b60405180910390a150505050565b6135b781614194565b602082015160c083015160a084015160e0850151610100860151604051633db5d43960e21b81526001600160a01b03969096169563f6d750e4956136059590948c948c948c94600401615943565b600060405180830381600087803b15801561361f57600080fd5b505af1158015613633573d6000803e3d6000fd5b505050507fd0831f2b07fd854a865c682cb68bd34a56d746ae81a34d87c820e51ab979c3d38160200151858585856040015161366e87614194565b60c088015160a089015160808a01516101008b01516040516135a09a9998979695949392916001916157bd565b600060608260e0015160ff16600014806136bc57508260e0015160ff166002145b806136ce57508260e0015160ff166004145b6137325760405162461bcd60e51b815260206004820152602f60248201527f6f6e6c7920737570706f72742074696d656f7574206d65617375726520302c2060448201526e3220616e64203420666f72206e6f7760881b60648201526084016104bf565b8260e0015160ff166002141561378c5743836101000151116137875760405162461bcd60e51b815260206004820152600e60248201526d1b5cd9c81a5cc81d1a5b595bdd5d60921b60448201526064016104bf565b6137e1565b8260e0015160ff16600414156137e15742836101000151116137e15760405162461bcd60e51b815260206004820152600e60248201526d1b5cd9c81a5cc81d1a5b595bdd5d60921b60448201526064016104bf565b60c083015163ffffffff90811614156138375761380086868686614263565b6080850151919350915060ff166138325780826138305760405162461bcd60e51b81526004016104bf91906157aa565b505b613849565b613843868686866142f6565b90925090505b600080516020615b6e8339815191528360200151878787876040015161386e89614194565b8960c001518a60a001518b608001518b8b6040516138969b9a999897969594939291906157bd565b60405180910390a17f1e96d53fcbc2c0ed72154f086de48aea9ca84a0d40467cb73978a982e621cad283602001518460e001518561010001516040516138f29392919092835260ff919091166020830152604082015260600190565b60405180910390a1608083015160ff166001141561118f5761118f83878787868661443a565b61392181614194565b6001600160a01b031663e5512e9782602001518686868660c001518760a001518861012001516040518863ffffffff1660e01b81526004016139699796959493929190615855565b600060405180830381600087803b15801561398357600080fd5b505af1158015613997573d6000803e3d6000fd5b50505050600080516020615b6e833981519152816020015185858585604001516139c087614194565b8760c001518860a00151896080015160016040516139e79a999897969594939291906158a2565b60405180910390a17f1e96d53fcbc2c0ed72154f086de48aea9ca84a0d40467cb73978a982e621cad281602001518260e001518361010001516040516135a09392919092835260ff919091166020830152604082015260600190565b613a4c81614194565b602082015160c083015160a0840151610120850151610140860151604051633db5d43960e21b81526001600160a01b03969096169563f6d750e495613a9b9590948c948c948c94600401615943565b600060405180830381600087803b158015613ab557600080fd5b505af1158015613ac9573d6000803e3d6000fd5b50505050600080516020615b6e83398151915281602001518585858560400151613af287614194565b60c088015160a089015160808a01516101408b01516040516139e79a9998979695949392916001916157bd565b6000613b2f8261012001516144dd565b90508060400151600760008787604051602001613b4d9291906153d5565b604051602081830303815290604052805190602001208152602001908152602001600020600201819055508060800151600760008787604051602001613b949291906153d5565b60405160208183030381529060405280519060200120815260200190815260200160002060040160006101000a8154816001600160401b0302191690836001600160401b031602179055508060600151600760008787604051602001613bfb9291906153d5565b60405160208183030381529060405280519060200120815260200190815260200160002060030181905550600080516020615b6e83398151915282602001518686868660400151613c4b88614194565b60c089015160a08a015160808b01516101408c0151604051613c789a9998979695949392916001916157bd565b60405180910390a17f1e96d53fcbc2c0ed72154f086de48aea9ca84a0d40467cb73978a982e621cad282602001518360e00151846101000151604051613cd49392919092835260ff919091166020830152604082015260600190565b60405180910390a15050505050565b600060208251613cf391906159c9565b905060208251613d0391906159dd565b15613d165780613d12816159f1565b9150505b80613d20816159f1565b9150610fac9050602082615a0c565b600060208351613d3f91906159c9565b9050600060208451613d5191906159dd565b1115613d655780613d61816159f1565b9150505b60010160005b818110156115a1576020810284015183860152601f1990940193600101613d6b565b6040805160208082528183019092526000918291906020820181803683375050506020018390525090919050565b81830151600060208204600101601f831615613dd5576001015b5b8082101561118f578585015160208302850152602086039550600182019150613dd6565b6000610fac8260200151611c9a565b600080613e17858585611a83565b6000818152600460205260408120805492935063ffffffff9092169182916115dd83615526565b600084848484604051602001613e579493929190615a2b565b604051602081830303815290604052805190602001209050949350505050565b6000606060006060613e8885614194565b6001600160a01b03163b613ecb5750506040805180820190915260","14815273726563656976657220686173206e6f20636f646560601b6020820152600090613fa4565b613ed485614194565b6001600160a01b031663ff098be78989898960e001516040518563ffffffff1660e01b8152600401613f099493929190615689565b600060405180830381600087803b158015613f2357600080fd5b505af1925050508015613f34575060015b613f9f57613f406156c0565b806308c379a01415613f675750613f556156dc565b80613f605750613f69565b9050613fa4565b505b3d808015613f93576040519150601f19603f3d011682016040523d82523d6000602084013e613f98565b606091505b5050613fa4565b600191505b9097909650945050505050565b600060606000613ffc87878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050506060870151889150613e09565b90508063ffffffff168460c0015163ffffffff161461405d5760405162461bcd60e51b815260206004820152601a60248201527f5344504d73673a2073657175656e6365206e6f7420657175616c00000000000060448201526064016104bf565b60006060600061406c87614194565b90506001600160a01b0381163b6140b5576000925060405180604001604052806014815260200173726563656976657220686173206e6f20636f646560601b8152509150614185565b60e087015160405163c09b261b60e01b81526001600160a01b0383169163c09b261b916140ea918e918e918e91600401615689565b600060405180830381600087803b15801561410457600080fd5b505af1925050508015614115575060015b614180576141216156c0565b806308c379a0141561414857506141366156dc565b80614141575061414a565b9150614185565b505b3d808015614174576040519150601f19603f3d011682016040523d82523d6000602084013e614179565b606091505b5050614185565b600192505b50909890975095505050505050565b6000610fac8260600151611c9a565b60006141ae87614194565b905085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505050604088015260608701849052826141fe576003614201565b60025b60ff166080880152826142145781614225565b604051806020016040528060008152505b6101008801526001546001600160a01b031663e41fb517826142468a61180f565b6040518363ffffffff1660e01b81526004016115669291906153a9565b600060606000606061427485614194565b6001600160a01b03163b6142b7575050604080518082019091526014815273726563656976657220686173206e6f20636f646560601b6020820152600090613fa4565b6142c085614194565b6001600160a01b031663ff098be78989898961012001516040518563ffffffff1660e01b8152600401613f099493929190615689565b60006060600061434187878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050506060870151889150613e09565b90508063ffffffff168460c0015163ffffffff16146143ac5760405162461bcd60e51b815260206004820152602160248201527f5344505f4d53475f4552524f523a2073657175656e6365206e6f7420657175616044820152601b60fa1b60648201526084016104bf565b6000606060006143bb87614194565b90506001600160a01b0381163b614404576000925060405180604001604052806014815260200173726563656976657220686173206e6f20636f646560601b8152509150614185565b61012087015160405163c09b261b60e01b81526001600160a01b0383169163c09b261b916140ea918e918e918e91600401615689565b600061444587614194565b905085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060408801526060870184905282614495576003614498565b60025b60ff166080880152826144ab57816144bc565b604051806020016040528060008152505b6101408801526001546001600160a01b031663e41fb517826142468a611f66565b6040805160a080820183526000808352606060208085018290528486018390528185018390526080808601849052865194850187528385529084018290529483018290528201819052928101839052909161453784614653565b905060005b81602001515181101561464a5760008260200151828151811061456157614561615a67565b60200260200101519050806000015161ffff1660001415614590576145858161482e565b61ffff168452614637565b806000015161ffff16600114156145b05760408101516020850152614637565b806000015161ffff16600214156145e0576145d660206145d1836040015190565b015190565b6040850152614637565b806000015161ffff166003141561460e576146046145ff826040015190565b612c57565b6060850152614637565b806000015161ffff16600414156146375761462881614842565b6001600160401b031660808501525b5080614642816159f1565b91505061453c565b50909392505050565b6040805180820190915260008152606060208201526006825110156146ba5760405162461bcd60e51b815260206004820152601760248201527f696c6c6567616c207261772064617461206c656e67746800000000000000000060448201526064016104bf565b60408051808201909152600080825260606020830152906146e36146de858461485b565b614883565b61ffff1681526146f46006836155c8565b91506000825b855181101561474e5761471f61471a876147158460026155c8565b614924565b61494e565b61472a9060066155e0565b61473a9063ffffffff16826155c8565b905081614746816159f1565b9250506146fa565b6000826001600160401b0381111561476857614768615160565b6040519080825280602002602001820160405280156147b557816020015b604080516060808201835260008083526020830152918101919091528152602001906001900390816147865790505b509050600092505b865185101561481f57604080516060808201835260008083526020830152918101919091526147ec8887614a48565b965090508082856147fc816159f1565b96508151811061480e5761480e615a67565b6020026020010181905250506147bd565b60208401525090949350505050565b6000610fac6146de60028460400151015190565b6000610fac61485660088460400151015190565b614ba3565b815160009061486b8360026155c8565b111561487657600080fd5b50016002015161ffff1690565b60408051600280825281830190925260009160f084901b9183916020820181803683370190505090508160011a60f81b816000815181106148c6576148c6615a67565b60200101906001600160f81b031916908160001a9053508160001a60f81b816001815181106148f7576148f7615a67565b60200101906001600160f81b031916908160001a905350600061491b82600061485b565b95945050505050565b81516000906149348360046155c8565b111561493f57600080fd5b50016004015163ffffffff1690565b60408051600480825281830190925260009160e084901b9183916020820181803683370190505090508160031a60f81b8160008151811061499157614991615a67565b60200101906001600160f81b031916908160001a9053508160021a60f81b816001815181106149c2576149c2615a67565b60200101906001600160f81b031916908160001a9053508160011a60f81b816002815181106149f3576149f3615a67565b60200101906001600160f81b031916908160001a9053508160001a60f81b81600381518110614a2457614a24615a67565b60200101906001600160f81b031916908160001a905350600061491b826000614924565b60408051606080820183526000808352602083015291810191909152600082845111614ac25760405162461bcd60e51b815260206004820152602360248201527f6c656e677468206f66207261772064617461206c657373207468616e206f66666044820152621cd95d60ea1b60648201526084016104bf565b6006831015614b045760405162461bcd60e51b815260206004820152600e60248201526d1a5b1b1959d85b081bd9999cd95d60921b60448201526064016104bf565b60408051606080820183526000808352602083015291810191909152614b2d6146de868661485b565b61ffff168152614b3e6002856155c8565b9350614b4d61471a8686614924565b63ffffffff166020820152614b636004856155c8565b9350614b7a8585836020015163ffffffff16614d61565b60408201526020810151614b949063ffffffff16856155c8565b935091508290505b9250929050565b60408051600880825281830190925260009160c084901b9183916020820181803683370190505090508160071a60f81b81600081518110614be657614be6615a67565b60200101906001600160f81b031916908160001a9053508160061a60f81b81600181518110614c1757614c17615a67565b60200101906001600160f81b031916908160001a9053508160051a60f81b81600281518110614c4857614c48615a67565b60200101906001600160f81b031916908160001a9053508160041a60f81b81600381518110614c7957614c79615a67565b60200101906001600160f81b031916908160001a9053508160031a60f81b81600481518110614caa57614caa615a67565b60200101906001600160f81b031916908160001a9053508160021a60f81b81600581518110614cdb57614cdb615a67565b60200101906001600160f81b031916908160001a9053508160011a60f81b81600681518110614d0c57614d0c615a67565b60200101906001600160f81b031916908160001a9053508160001a60f81b81600781518110614d3d57614d3d615a67565b60200101906001600160f81b031916908160001a905350600061491b826000614dd7565b8251606090614d7083856155c8565b1115614d7b57600080fd5b6000826001600160401b03811115614d9557614d95615160565b6040519080825280601f01601f191660200182016040528015614dbf576020820181803683370190505b50905060208082019086860101611a78828287614e04565b8151600090614de78360086155c8565b1115614df257600080fd5b5001600801516001600160401b031690565b60208110614e3c5781518352614e1b6020846155c8565b9250614e286020836155c8565b9150614e35602082615608565b9050614e04565b80614e4657505050565b60006001614e55836020615608565b614e6190610100615b61565b614e6b9190615608565b925184518416931916929092179092525050565b604080516101608101825260008082526020820181905260609282018390528282018190","526080820181905260a0820181905260c0820181905260e08201819052610100820152610120810182905261014081019190915290565b60008083601f840112614eec57600080fd5b5081356001600160401b03811115614f0357600080fd5b602083019150836020828501011115614b9c57600080fd5b80358015158114614f2b57600080fd5b919050565b60008060008060008060808789031215614f4957600080fd5b86356001600160401b0380821115614f6057600080fd5b614f6c8a838b01614eda565b909850965060208901359550869150614f8760408a01614f1b565b94506060890135915080821115614f9d57600080fd5b50614faa89828a01614eda565b979a9699509497509295939492505050565b60008060008060008060808789031215614fd557600080fd5b86356001600160401b0380821115614fec57600080fd5b614ff88a838b01614eda565b909850965060208901359550604089013591508082111561501857600080fd5b5061502589828a01614eda565b979a9699509497949695606090950135949350505050565b60008060006040848603121561505257600080fd5b8335925060208401356001600160401b0381111561506f57600080fd5b61507b86828701614eda565b9497909650939450505050565b60006020828403121561509a57600080fd5b81356001600160a01b0381168114611cc657600080fd5b60008060008060008060008060c0898b0312156150cd57600080fd5b88356001600160401b03808211156150e457600080fd5b6150f08c838d01614eda565b909a50985060208b0135975088915061510b60408c01614f1b565b965060608b013591508082111561512157600080fd5b5061512e8b828c01614eda565b909550935050608089013560ff8116811461514857600080fd5b8092505060a089013590509295985092959890939650565b634e487b7160e01b600052604160045260246000fd5b601f8201601f191681016001600160401b038111828210171561519b5761519b615160565b6040525050565b600060208083850312156151b557600080fd5b82356001600160401b03808211156151cc57600080fd5b818501915085601f8301126151e057600080fd5b8135818111156151f2576151f2615160565b604051915061520a601f8201601f1916850183615176565b808252868482850101111561521e57600080fd5b8084840185840137600090820190930192909252509392505050565b6000806020838503121561524d57600080fd5b82356001600160401b0381111561526357600080fd5b61526f85828601614eda565b90969095509350505050565b60005b8381101561529657818101518382015260200161527e565b838111156108495750506000910152565b600081518084526152bf81602086016020860161527b565b601f01601f19169290920160200192915050565b6020815261ffff82511660208201526000602083015160a060408401526152fd60c08401826152a7565b905060408401516060840152606084015160808401526001600160401b0360808501511660a08401528091505092915050565b60008060008060006060868803121561534857600080fd5b85356001600160401b038082111561535f57600080fd5b61536b89838a01614eda565b909750955060208801359450604088013591508082111561538b57600080fd5b5061539888828901614eda565b969995985093965092949392505050565b6001600160a01b03831681526040602082018190526000906153cd908301846152a7565b949350505050565b8183823760009101908152919050565b6020808252601e908201527f5344504d73673a2077726f6e6720726563656976696e6720646f6d61696e0000604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000825161546381846020870161527b565b9190910192915050565b87815260e06020820152600061548660e08301896152a7565b87604084015263ffffffff871660608401526001600160401b038616608084015282810360a08401526154b981866152a7565b905082810360c08401526154cd81856152a7565b9a9950505050505050505050565b600181811c908216806154ef57607f821691505b60208210811415612a1f57634e487b7160e01b600052602260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600063ffffffff8083168181141561554057615540615510565b6001019392505050565b6020808252601f908201527f656e636f64655344504d6573736167653a2077726f6e672076657273696f6e00604082015260600190565b60208082526027908201527f656e636f64655344504d6573736167653a20626f6479206c656e677468206f76604082015266195c9b1a5b5a5d60ca1b606082015260800190565b600082198211156155db576155db615510565b500190565b600063ffffffff8083168185168083038211156155ff576155ff615510565b01949350505050565b60008282101561561a5761561a615510565b500390565b60208082526021908201527f656e636f64655344504d6573736167653a207a65726f206d65737361676520696040820152601960fa1b606082015260800190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600061569d606083018688615660565b84602084015282810360408401526156b581856152a7565b979650505050505050565b600060033d11156156d95760046000803e5060005160e01c5b90565b600060443d10156156ea5790565b6040516003193d81016004833e81513d6001600160401b03816024840111818411171561571957505050505090565b82850191508151818111156157315750505050505090565b843d870101602082850101111561574b5750505050505090565b611a7860208286010187615176565b60c08152600061576e60c08301898b615660565b602083018890526001600160a01b038716604084015263ffffffff86166060840152841515608084015282810360a08401526154cd81856152a7565b602081526000611cc660208301846152a7565b60006101408d83528060208401526157d88184018d8f615660565b90508a604084015282810360608401526157f2818b6152a7565b6001600160a01b038a16608085015263ffffffff891660a08501526001600160401b03881660c085015260ff871660e0850152851515610100850152838103610120850152905061584381856152a7565b9e9d5050505050505050505050505050565b87815260c06020820152600061586f60c08301888a615660565b86604084015263ffffffff861660608401526001600160401b038516608084015282810360a08401526154cd81856152a7565b60006101408c83528060208401526158bd8184018c8e615660565b905089604084015282810360608401526158d7818a6152a7565b6001600160a01b03989098166080840152505063ffffffff9490941660a08501526001600160401b039290921660c084015260ff1660e083015215156101008201528082036101209091015260078152667375636365737360c81b602082015260400195945050505050565b88815260e06020820152600061595d60e08301898b615660565b87604084015263ffffffff871660608401526001600160401b038616608084015282810360a084015261599081866152a7565b905082810360c08401526159a481856152a7565b9b9a5050505050505050505050565b634e487b7160e01b600052601260045260246000fd5b6000826159d8576159d86159b3565b500490565b6000826159ec576159ec6159b3565b500690565b6000600019821415615a0557615a05615510565b5060010190565b6000816000190483118215151615615a2657615a26615510565b500290565b60008551615a3d818460208a0161527b565b9190910193845250602083019190915260c01b6001600160c01b0319166040820152604801919050565b634e487b7160e01b600052603260045260246000fd5b600181815b80851115615ab8578160001904821115615a9e57615a9e615510565b80851615615aab57918102915b93841c9390800290615a82565b509250929050565b600082615acf57506001610fac565b81615adc57506000610fac565b8160018114615af25760028114615afc57615b18565b6001915050610fac565b60ff841115615b0d57615b0d615510565b50506001821b610fac565b5060208310610133831016604e8410600b8410161715615b3b575081810a610fac565b615b458383615a7d565b8060001904821115615b5957615b59615510565b029392505050565b6000611cc68383615ac056fecf362ac32ec1d372722255e0e7a9b99808ee047e0d29b8439c3e69c6317ab289a26469706673582212206d92d5c7388184eb5a7e58b2a2b2f35118099e1633e32d6d24eecd400d5ce23e64736f6c634300080b0033"};
  
      public static final String BINARY = org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", BINARY_ARRAY);
  
      public static final String[] SM_BINARY_ARRAY = {"60806040523480156200001157600080fd5b506200001d336200002d565b620000276200007d565b6200014d565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f5c7c30d4a0f08950cb23be4132957b357fa5dfdb0fcf218f81b86a1c036e47d09190a35050565b600054600160a81b900460ff1615620000ed57604051636381e58960e11b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60005460ff600160a01b909104811610156200014b576000805460ff60a01b191660ff60a01b17905560405160ff81527f962aa9df107bcee798aa1cede27b2de7fab57a1daae7109874a9a9170136cbfa9060200160405180910390a15b565b615bfc806200015d6000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063710631db116100ad578063b510a39211610071578063b510a39214610266578063d86e29e214610277578063e0c9e1ed1461027f578063f0faf11714610292578063f7d579c7146102ba57600080fd5b8063710631db1461021257806385e9ae14146102255780639118310214610238578063947f76311461024b578063abf915cd1461025e57600080fd5b806344a2c079116100f457806344a2c079146101b65780635089e2c8146101be57806360e6fbc4146101e3578063638704bd146101f657806365699d8d146101ff57600080fd5b80630204ebc21461013157806309c527541461014657806316cad12a1461016f578063281cf5e6146101825780634183bc3f14610195575b600080fd5b61014461013f366004614f54565b6102cd565b005b610159610154366004614fcd565b6103ce565b6040516101669190615066565b60405180910390f35b61014461017d3660046150c3565b610510565b610144610190366004614f54565b6105b6565b6101a86101a3366004615101565b610795565b604051908152602001610166565b6002546101a8565b6000546001600160a01b03165b6040516001600160a01b039091168152602001610166565b6101a86101f13660046151b0565b6109c9565b6101a860025481565b61014461020d366004614f54565b610b6e565b6101446102203660046150c3565b610cb6565b61014461023336600461527e565b610d5a565b6101a8610246366004615101565b610db4565b6001546101cb906001600160a01b031681565b610144610f46565b6001546001600160a01b03166101cb565b610144611073565b61014461028d366004615316565b6110aa565b6102a56102a0366004615361565b6113d0565b60405163ffffffff9091168152602001610166565b6101a86102c83660046151b0565b611482565b6040805160a06020601f88018190040282018101909252608081018681526000928291908990899081908501838280828437600092019190915250505090825250602080820187905260408051601f8701839004830281018301825286815292019190869086908190840183828082843760009201919091525050509082525063ffffffff6020909101526001549091506001600160a01b031663317c40ab33610376846115bb565b6040518363ffffffff1660e01b81526004016103939291906153e2565b600060405180830381600087803b1580156103ad57600080fd5b505af11580156103c1573d6000803e3d6000fd5b505050505b505050505050565b6040805160a0810182526000808252606060208301819052928201819052918101829052608081019190915260076000848460405160200161041192919061540e565b60408051601f198184030181529181528151602092830120835282820193909352908201600020825160a08101909352805461ffff168352600181018054919284019161045d9061541e565b80601f01602080910402602001604051908101604052809291908181526020018280546104899061541e565b80156104d65780601f106104ab576101008083540402835291602001916104d6565b820191906000526020600020905b8154815290600101906020018083116104b957829003601f168201915b505050918352505060028201546020820152600382015460408201526004909101546001600160401b031660609091015290505b92915050565b6000546001600160a01b0316331461054457604051636381e58960e11b815260040161053b90615453565b60405180910390fd5b6001600160a01b0381166105aa57604051636381e58960e11b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b606482015260840161053b565b6105b3816116d6565b50565b6001546001600160a01b0316331461061157604051636381e58960e11b815260206004820152601d60248201527f5344504d73673a206e6f742076616c696420616d20636f6e7472616374000000604482015260640161053b565b600061065283838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061172692505050565b90508063ffffffff16600114156106aa576106a586868686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061178b92505050565b6103c6565b8063ffffffff16600214156106fb576106a586868686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061183292505050565b8063ffffffff166003141561074c576106a586868686868080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525061197692505050565b604051636381e58960e11b815260206004820152601760248201527f756e737570706f72746564207364702076657273696f6e000000000000000000604482015260640161053b565b6000600460ff841611156107ec57604051636381e58960e11b815260206004820152601c60248201527f5344503a20696e76616c69642074696d656f7574206d65617375726500000000604482015260640161053b565b604080516101608101825260038152600060208083018290528351601f8d0182900482028101820185528c81528b949293928301918e908e90819084018382808284376000920191909152505050908252506020810184905260400189610854576000610857565b60015b60ff1681526020016108a28d8d8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250339250889150611adb9050565b63ffffffff166001600160401b0316815260200163ffffffff801681526020018660ff16815260200185815260200188888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050604080516020818101909252928352909201525060025490915061092d908290611b3b565b6020808201516000908152600890915260409020805460ff19166001908117909155546001600160a01b031663317c40ab3361096884611da1565b6040518363ffffffff1660e01b81526004016109859291906153e2565b600060405180830381600087803b15801561099f57600080fd5b505af11580156109b3573d6000803e3d6000fd5b50505050602001519a9950505050505050505050565b6000604080516101208101825260028152600060208083018290528351601f8b0182900482028101820185528a81529193830191908b908b90819084018382808284376000920191909152505050908252506020810188905260400186610a31576000610a34565b60015b60ff1681526020016001600160401b0380168152602001610a8e8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152503392508c91506120aa9050565b63ffffffff16815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250506040805160208181019092529283529092015250600254909150610af59082906120df565b6001546001600160a01b031663317c40ab33610b10846122e8565b6040518363ffffffff1660e01b8152600401610b2d9291906153e2565b600060405180830381600087803b158015610b4757600080fd5b505af1158015610b5b573d6000803e3d6000fd5b5050505060200151979650505050505050565b6040805160a06020601f88018190040282018101909252608081018681526000928291908990899081908501838280828437600092019190915250505090825250602080820187905260408051601f87018390048302810183018252868152920191908690869081908401838280828437600092019190915250505090825250604080516020601f8a0181900481028201810190925288815291810191610c33918a908a90819084018382808284376000920191909152503392508a91506120aa9050565b63ffffffff16905290506000610c48826115bb565b60015460405163317c40ab60e01b81529192506001600160a01b03169063317c40ab90610c7b90339085906004016153e2565b600060405180830381600087803b158015610c9557600080fd5b505af1158015610ca9573d6000803e3d6000fd5b5050505050505050505050565b6000546001600160a01b03163314610ce157604051636381e58960e11b815260040161053b90615453565b6001600160a01b038116610d3857604051636381e58960e11b815260206004820152601b60248201527f5344504d73673a20696e76616c696420616d20636f6e74726163740000000000604482015260640161053b565b600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b03163314610d8557604051636381e58960e11b815260040161053b90615453565b80604051602001610d969190615488565b60408051601f19818403018152919052805160209091012060025550565b6000600460ff84161115610e0b57604051636381e58960e11b815260206004820152601c60248201527f5344503a20696e76616c69642074696d656f7574206d65617375726500000000604482015260640161053b565b604080516101608101825260038152600060208083018290528351601f8d0182900482028101820185528c81528b949293928301918e908e90819084018382808284376000920191909152505050908252506020810184905260400189610e73576000610e76565b60015b60ff1681526020016001600160401b0380168152602001610ed08d8d8080601f016020809104026020016040","5190810160405280939291908181526020018383808284376000920191909152503392508891506120aa9050565b63ffffffff1681526020018660ff16815260200185815260200188888080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050604080516020818101909252928352909201525060025490915061092d908290611b3b565b600054600160a81b900460ff1615808015610f6e57506000546001600160a01b90910460ff16105b80610f8f5750303b158015610f8f5750600054600160a01b900460ff166001145b610ff357604051636381e58960e11b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840161053b565b6000805460ff60a01b1916600160a01b1790558015611020576000805460ff60a81b1916600160a81b1790555b611029336116d6565b80156105b3576000805460ff60a81b19169055604051600181527f962aa9df107bcee798aa1cede27b2de7fab57a1daae7109874a9a9170136cbfa9060200160405180910390a150565b6000546001600160a01b0316331461109e57604051636381e58960e11b815260040161053b90615453565b6110a860006116d6565b565b6000546001600160a01b031633146110d557604051636381e58960e11b815260040161053b90615453565b6110dd614eb8565b61111f83838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250859392505061255f9050565b60e081015160ff1661118b57604051636381e58960e11b815260206004820152602e60248201527f5344505f4d53475f4552524f523a20746865206d6573736167652074696d656f60448201526d075744d65617375726520697320360941b606482015260840161053b565b8060e0015160ff166002141561136e578061010001516007600083604001516040516020016111ba9190615488565b6040516020818303038152906040528051906020012081526020019081526020016000206003015411156112ff5760208082015160009081526008909152604090205460ff1661126a57604051636381e58960e11b815260206004820152603460248201527f5344505f4d53475f4552524f523a20657863657074696f6e206d657373616765604482015273081a185cda08191bd95cc81b9bdd08195e1a5cdd60621b606482015260840161053b565b61127384612719565b6001600160a01b031663d417dd188260200151836040015184606001518560c001518660a001518761012001518861014001516040518863ffffffff1660e01b81526004016112c897969594939291906154a4565b600060405180830381600087803b1580156112e257600080fd5b505af11580156112f6573d6000803e3d6000fd5b505050506113ca565b604051636381e58960e11b815260206004820152603f60248201527f5344505f4d53475f4552524f523a20746865206d657373616765206973206e6f60448201527f742074696d656f757420776974682074696d656f75744d656173757265203200606482015260840161053b565b604051636381e58960e11b815260206004820152602a60248201527f5344505f4d53475f4552524f523a20756e737570706f727465642074696d656f6044820152697574206d65617375726560b01b606482015260840161053b565b50505050565b600060025484846040516020016113e892919061540e565b604051602081830303815290604052805190602001201461141c57604051636381e58960e11b815260040161053b90615512565b600061146188888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a925087915061274c9050565b60009081526004602052604090205463ffffffff1698975050505050505050565b6000604080516101208101825260028152600060208083018290528351601f8b0182900482028101820185528a81529193830191908b908b908190840183828082843760009201919091525050509082525060208101889052604001866114ea5760006114ed565b60015b60ff1681526020016115388a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152503392508c9150611adb9050565b63ffffffff166001600160401b0316815260200163ffffffff8016815260200185858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093855250506040805160208181019092529283529092015250600254909150610af59082906120df565b5050505050565b606060006115cc83600001516127a9565b6115d984604001516127a9565b6115e490600461555f565b6115ef90602061555f565b6115f9919061555f565b90506000816001600160401b038111156116155761161561523c565b6040519080825280601f01601f19166020018201604052801561163f576020820181803683370190505b5084519091508290611653908290846127f5565b845161165e906127a9565b6116689082615577565b6020868101518285015290915061167f9082615577565b905061169081866060015184612853565b61169a6020612864565b6116a49082615577565b90506116b5818660400151846127f5565b6116c285604001516127a9565b6116cc9082615577565b5090949350505050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f5c7c30d4a0f08950cb23be4132957b357fa5dfdb0fcf218f81b86a1c036e47d09190a35050565b8051601c81830101516000916001600160f81b03198083161415611781576040805160048082528183019092526000918291906020820181803683370190505095909201601d01516021860152505050600490910151919050565b5060019392505050565b6040805160808101825260608082526000602083018190529282018190528101919091526117b9818361286f565b60025481516040516117ce9190602001615488565b604051602081830303815290604052805190602001201461180257604051636381e58960e11b815260040161053b90615512565b606081015163ffffffff908116141561182657611821858585846129e0565b6115b4565b6115b485858584612a56565b604080516101208101825260008082526020820181905260609282018390528282018190526080820181905260a0820181905260c082015260e081018290526101008101919091526118848183612c74565b600254816040015160405160200161189c9190615488565b60405160208183030381529060405280519060200120146118d057604051636381e58960e11b815260040161053b90615512565b608081015160ff1615806118eb5750608081015160ff166001145b156118fc5761182185858584612dc6565b608081015160ff16600214156119185761182185858584612f85565b608081015160ff16600314156119345761182185858584613073565b604051636381e58960e11b8152602060048201526016602482015275756e65787065637465642061746f6d696320666c616760501b604482015260640161053b565b61197e614eb8565b611988818361255f565b60025481604001516040516020016119a09190615488565b6040516020818303038152906040528051906020012014611a0457604051636381e58960e11b815260206004820152601f60248201527f5344505f4d73673a2077726f6e6720726563656976696e6720646f6d61696e00604482015260640161053b565b608081015160ff161580611a1f5750608081015160ff166001145b15611a305761182185858584613160565b608081015160ff1660021415611a4c57611821858585846133e1565b608081015160ff1660031415611a68576118218585858461350c565b608081015160ff1660041415611a8457611821858585846135e8565b604051636381e58960e11b815260206004820152602560248201527f5344505f4d53475f4552524f523a20756e65787065637465642061746f6d696360448201526420666c616760d81b606482015260840161053b565b600080611ae98585856137ac565b6000818152600560205260408120805492935063ffffffff909216918291611b108361558e565b91906101000a81548163ffffffff021916908363ffffffff1602179055505080925050509392505050565b816000015163ffffffff16600314611b6657604051636381e58960e11b815260040161053b906155b2565b63ffffffff826101200151511115611b9157604051636381e58960e11b815260040161053b906155e9565b6000611ba183610100015161381b565b90506000815184610120015151856040015151607e611bc0919061555f565b611bca919061555f565b611bd4919061555f565b90506000816001600160401b03811115611bf057611bf061523c565b6040519080825280601f01601f191660200182016040528015611c1a576020820181803683370190505b5085519091508290611c3c908290611c369063ff000000615630565b84612853565b611c4660206138be565b611c509082615577565b6040870151909150611c63828285613aed565b8051611c7090600461555f565b611c7a9083615577565b6060880151818501529150611c90602083615577565b9150611ca182886080015185613bdc565b611cac600183615577565b9150611cbd828860a0015185613bed565b611cc760406138be565b611cd19083615577565b9150611ce2828860c0015185612853565b611cec60206138be565b611cf69083615577565b9150611d07828860e0015185613bdc565b611d12600183615577565b9150611d1f828685613aed565b8451611d2c90600461555f565b611d369083615577565b9150611d488288610120015185613aed565b61012087015151611d5a90600461555f565b611d649083615577565b33818501529150611d76602083615577565b8084018790529150611d89602083615577565b50508151602092830120959091019490945250505050565b6060816000015163ffffffff16600314611dce57604051636381e58960e11b815260040161053b906155b2565b63ffffffff826101200151511115611df957604051636381e58960e11b815260040161053b906155e9565b6020820151611e1b57604051636381e58960e11b815260040161053b90615658565b600080600260ff16846080015160ff161190506000611e3e85610100015161381b565b90508115611e975761014085015151815161012087015151604088015151611e6790605e61555f565b611e71919061555f565b611e7b919061555f565b611e8690600461555f565b611e90919061555f565b9250611ec8565b8051610120860151516040","87015151611eb190605e61555f565b611ebb919061555f565b611ec5919061555f565b92505b6000836001600160401b03811115611ee257611ee261523c565b6040519080825280601f01601f191660200182016040528015611f0c576020820181803683370190505b5086519091508490611f28908290611c369063ff000000615630565b611f3260206138be565b611f3c9082615577565b60208881015182850152909150611f539082615577565b6040880151909150611f66828285613aed565b8051611f7390600461555f565b611f7d9083615577565b6060890151818501529150611f93602083615577565b9150611fa482896080015185613bdc565b611faf600183615577565b9150611fc0828960a0015185613bed565b611fca60406138be565b611fd49083615577565b9150611fe5828960c0015185612853565b611fef60206138be565b611ff99083615577565b915061200a828960e0015185613bdc565b612015600183615577565b9150612022828585613aed565b835161202f90600461555f565b6120399083615577565b915061204b8289610120015185613aed565b6101208801515161205d90600461555f565b6120679083615577565b9150841561209e5761207f8289610140015185613aed565b6101408801515161209190600461555f565b61209b9083615577565b91505b50909695505050505050565b6000806120b88585856137ac565b6000818152600360205260408120805492935063ffffffff909216918291611b108361558e565b816000015163ffffffff1660021461210a57604051636381e58960e11b815260040161053b906155b2565b63ffffffff8260e0015151111561213457604051636381e58960e11b815260040161053b906155e9565b60008260e0015151836040015151607961214e919061555f565b612158919061555f565b90506000816001600160401b038111156121745761217461523c565b6040519080825280601f01601f19166020018201604052801561219e576020820181803683370190505b50845190915082906121c69082906121ba9063ff000000615630565b63ffffffff1690840152565b6121d060206138be565b6121da9082615577565b60408601519091506121ed828285613aed565b80516121fa90600461555f565b6122049083615577565b606087015181850152915061221a602083615577565b915061222b82876080015185613bdc565b612236600183615577565b9150612247828760a0015185613bed565b61225160406138be565b61225b9083615577565b915061226c828760c0015185612853565b61227660206138be565b6122809083615577565b9150612291828760e0015185613aed565b60e0860151516122a290600461555f565b6122ac9083615577565b338185015291506122be602083615577565b80840186905291506122d1602083615577565b505081516020928301209490910193909352505050565b6060816000015163ffffffff1660021461231557604051636381e58960e11b815260040161053b906155b2565b63ffffffff8260e0015151111561233f57604051636381e58960e11b815260040161053b906155e9565b602082015161236157604051636381e58960e11b815260040161053b90615658565b6080820151600090600260ff9091161180156123bb576101008401515160e08501515160408601515161239590605961555f565b61239f919061555f565b6123aa90600461555f565b6123b4919061555f565b91506123df565b60e0840151516040850151516123d290605961555f565b6123dc919061555f565b91505b6000826001600160401b038111156123f9576123f961523c565b6040519080825280601f01601f191660200182016040528015612423576020820181803683370190505b508551909150839061243f9082906121ba9063ff000000615630565b61244960206138be565b6124539082615577565b6020878101518285015290915061246a9082615577565b604087015190915061247d828285613aed565b805161248a90600461555f565b6124949083615577565b60608801518185015291506124aa602083615577565b91506124bb82886080015185613bdc565b6124c6600183615577565b91506124d7828860a0015185613bed565b6124e160406138be565b6124eb9083615577565b91506124fc828860c0015185612853565b61250660206138be565b6125109083615577565b9150612521828860e0015185613aed565b60e08701515161253290600461555f565b61253c9083615577565b91508315612554576125548288610100015185613aed565b509095945050505050565b805161256a82611726565b63ffffffff16835261257c6020612864565b6125869082615577565b90506125928183015190565b602084015261259f602090565b6125ac9060ff1682615577565b905060006125ba8284613bfe565b6040850181905280519091506125d190600461555f565b6125db9083615577565b91506125e78284015190565b60608501526125f7602083615577565b91506126038284015190565b60ff166080850152612616600183615577565b91506126228284015190565b6001600160401b031660a085015261263b600883615577565b91506126478284015190565b63ffffffff1660c085015261265d600483615577565b91506126698284015190565b60ff1660e085015261267c600183615577565b9150600061268a8385613bfe565b905061269581613d04565b61010086015280516126a890600461555f565b6126b29084615577565b92506126be8385613bfe565b6101208601819052516126d290600461555f565b6126dc9084615577565b9250600260ff16856080015160ff1611156115b4576126fb8385613bfe565b61014086018190525161270f90600461555f565b6103c69084615577565b604080516020808252818301909252600091829190602082018180368337505050602081018490529050825b9392505050565b60008360405160200161275f9190615488565b60408051601f198184030181528282528051602091820120908301528101849052606081018390526080016040516020818303038152906040528051906020012090509392505050565b6000602082516127b991906156af565b9050602082516127c991906156c3565b156127dc57806127d8816156d7565b9150505b806127e6816156d7565b915061050a90506020826156f2565b60006020835161280591906156af565b905060006020845161281791906156c3565b111561282b5780612827816156d7565b9150505b60010160005b818110156115b4576020810284015183860152601f1990940193600101612831565b909101600319810180519290915252565b600061050a826138be565b8051600061287d8284015190565b612888906020615630565b905060008163ffffffff166001600160401b038111156128aa576128aa61523c565b6040519080825280601f01601f1916602001820160405280156128d4576020820181803683370190505b5090506128e2838583613dc1565b6128eb816127a9565b6128f59084615577565b925060006129038486015190565b9050612910602085615577565b9350600061291e8587015190565b905061292a60206138be565b6129349086615577565b945060006129428688015190565b61294d906020615630565b905060008163ffffffff166001600160401b0381111561296f5761296f61523c565b6040519080825280601f01601f191660200182016040528015612999576020820181803683370190505b5090506129a7878983613dc1565b6129b0816127a9565b6129ba9088615577565b5093885250602087019190915263ffffffff166060860152604090940193909352505050565b6129e981613e00565b6001600160a01b031663e5b813ad85858585604001516040518563ffffffff1660e01b8152600401612a1e949392919061573a565b600060405180830381600087803b158015612a3857600080fd5b505af1158015612a4c573d6000803e3d6000fd5b5050505050505050565b6000612a9d85858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050506020850151869150613e0f565b90508063ffffffff16826060015163ffffffff1614612aff57604051636381e58960e11b815260206004820152601a60248201527f5344504d73673a2073657175656e6365206e6f7420657175616c000000000000604482015260640161053b565b600060606000612b0e85613e00565b90506001600160a01b0381163b612b57576000925060405180604001604052806014815260200173726563656976657220686173206e6f20636f646560601b8152509150612c27565b604080860151905163140e7af360e11b81526001600160a01b0383169163281cf5e691612b8c918c918c918c9160040161573a565b600060405180830381600087803b158015612ba657600080fd5b505af1925050508015612bb7575060015b612c2257612bc3615771565b8063c703cb121415612bea5750612bd861578d565b80612be35750612bec565b9150612c27565b505b3d808015612c16576040519150601f19603f3d011682016040523d82523d6000602084013e612c1b565b606091505b5050612c27565b600192505b7fa7b67603ab1ccc49bd49f413615eec42635893f21e8a6ecf8bd542465fa536e788888884888888604051612c62979695949392919061580b565b60405180910390a15050505050505050565b8051612c7f82611726565b63ffffffff168352612c916020612864565b612c9b9082615577565b9050612ca78183015190565b6020840152612cb4602090565b612cc19060ff1682615577565b90506000612ccf8284613bfe565b604085018190528051909150612ce690600461555f565b612cf09083615577565b9150612cfc8284015190565b6060850152612d0c602083615577565b9150612d188284015190565b60ff166080850152612d2b600183615577565b9150612d378284015190565b6001600160401b031660a0850152612d50600883615577565b9150612d5c8284015190565b63ffffffff1660c0850152612d72600483615577565b9150612d7e8284613bfe565b60e0850181905251612d9190600461555f565b612d9b9083615577565b9150600260ff16846080015160ff1611156113ca57612dba8284613bfe565b61010085015250505050565b6000606063ffffffff80168360c0015163ffffffff161415612eee576000612e2e87878080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050606087015160a0880151899250613e44565b60008181526006602052604090205490915060ff1615612e9157604051636381e58960e11b815260206004820181905260248201527f5344504d73673a206e6f6e636520686173206265656e2070726f636573736564604482015260640161053b565b612e9d87878787613e7d565b6080860151","919450925060ff16612ed0578183612ece57604051636381e58960e11b815260040161053b919061585b565b505b6000908152600660205260409020805460ff19166001179055612f00565b612efa86868686613fb7565b90925090505b7fe5b48da3ec5c2477fc166b4d1382803ec27d0bd0a8e507b7b5919a94dbee8c1d83602001518787878760400151612f378961419b565b8960c001518a60a001518b608001518b8b604051612f5f9b9a9998979695949392919061586e565b60405180910390a1608083015160ff16600114156103c6576103c68387878786866141aa565b612f8e8161419b565b6001600160a01b031663fbec456382602001518686868660c001518760a001518860e001516040518863ffffffff1660e01b8152600401612fd59796959493929190615906565b600060405180830381600087803b158015612fef57600080fd5b505af1158015613003573d6000803e3d6000fd5b505050507fe5b48da3ec5c2477fc166b4d1382803ec27d0bd0a8e507b7b5919a94dbee8c1d8160200151858585856040015161303e8761419b565b8760c001518860a00151896080015160016040516130659a99989796959493929190615953565b60405180910390a150505050565b61307c8161419b565b602082015160c083015160a084015160e0850151610100860151604051631a82fba360e31b81526001600160a01b03969096169563d417dd18956130ca9590948c948c948c946004016159f4565b600060405180830381600087803b1580156130e457600080fd5b505af11580156130f8573d6000803e3d6000fd5b505050507fe5b48da3ec5c2477fc166b4d1382803ec27d0bd0a8e507b7b5919a94dbee8c1d816020015185858585604001516131338761419b565b60c088015160a089015160808a01516101008b01516040516130659a99989796959493929160019161586e565b600060608260e0015160ff166000148061318157508260e0015160ff166002145b8061319357508260e0015160ff166004145b6131f857604051636381e58960e11b815260206004820152602f60248201527f6f6e6c7920737570706f72742074696d656f7574206d65617375726520302c2060448201526e3220616e64203420666f72206e6f7760881b606482015260840161053b565b8260e0015160ff166002141561325357438361010001511161324e57604051636381e58960e11b815260206004820152600e60248201526d1b5cd9c81a5cc81d1a5b595bdd5d60921b604482015260640161053b565b6132a9565b8260e0015160ff16600414156132a95742836101000151116132a957604051636381e58960e11b815260206004820152600e60248201526d1b5cd9c81a5cc81d1a5b595bdd5d60921b604482015260640161053b565b60c083015163ffffffff9081161415613300576132c88686868661426a565b6080850151919350915060ff166132fb5780826132f957604051636381e58960e11b815260040161053b919061585b565b505b613312565b61330c868686866142fd565b90925090505b600080516020615ba7833981519152836020015187878787604001516133378961419b565b8960c001518a60a001518b608001518b8b60405161335f9b9a9998979695949392919061586e565b60405180910390a17f1004fc84ea78f1fe82b0602bce1da56b8c8d936d74474e76308ef7054ed6951b83602001518460e001518561010001516040516133bb9392919092835260ff919091166020830152604082015260600190565b60405180910390a1608083015160ff16600114156103c6576103c6838787878686614442565b6133ea8161419b565b6001600160a01b031663fbec456382602001518686868660c001518760a001518861012001516040518863ffffffff1660e01b81526004016134329796959493929190615906565b600060405180830381600087803b15801561344c57600080fd5b505af1158015613460573d6000803e3d6000fd5b50505050600080516020615ba7833981519152816020015185858585604001516134898761419b565b8760c001518860a00151896080015160016040516134b09a99989796959493929190615953565b60405180910390a17f1004fc84ea78f1fe82b0602bce1da56b8c8d936d74474e76308ef7054ed6951b81602001518260e001518361010001516040516130659392919092835260ff919091166020830152604082015260600190565b6135158161419b565b602082015160c083015160a0840151610120850151610140860151604051631a82fba360e31b81526001600160a01b03969096169563d417dd18956135649590948c948c948c946004016159f4565b600060405180830381600087803b15801561357e57600080fd5b505af1158015613592573d6000803e3d6000fd5b50505050600080516020615ba7833981519152816020015185858585604001516135bb8761419b565b60c088015160a089015160808a01516101408b01516040516134b09a99989796959493929160019161586e565b60006135f88261012001516144e5565b9050806040015160076000878760405160200161361692919061540e565b60405160208183030381529060405280519060200120815260200190815260200160002060020181905550806080015160076000878760405160200161365d92919061540e565b60405160208183030381529060405280519060200120815260200190815260200160002060040160006101000a8154816001600160401b0302191690836001600160401b0316021790555080606001516007600087876040516020016136c492919061540e565b60405160208183030381529060405280519060200120815260200190815260200160002060030181905550600080516020615ba7833981519152826020015186868686604001516137148861419b565b60c089015160a08a015160808b01516101408c01516040516137419a99989796959493929160019161586e565b60405180910390a17f1004fc84ea78f1fe82b0602bce1da56b8c8d936d74474e76308ef7054ed6951b82602001518360e0015184610100015160405161379d9392919092835260ff919091166020830152604082015260600190565b60405180910390a15050505050565b6000806137b88461465b565b905080856040516020016137cc9190615488565b60408051601f1981840301815282825280516020918201209083019390935281019190915260608101849052608001604051602081830303815290604052805190602001209150509392505050565b60408051602080825281830190925260609160009190602082018180368337505060408051602080825281830190925292935060009291508082018180368337019050509050606084602084015260015b60208110156138b55780602085010351816020850103518082036138ab57604051935060208601518385015282845282602085010160405250506138b5565b505060010161386c565b50949350505050565b600081600881146139cb57601081146139d457601881146139dd57602081146139e657602881146139ef57603081146139f85760388114613a015760408114613a0a5760488114613a135760508114613a1c5760588114613a255760608114613a2e5760688114613a375760708114613a405760788114613a495760808114613a525760888114613a5b5760908114613a645760988114613a6d5760a08114613a765760a88114613a7f5760b08114613a885760b88114613a915760c08114613a9a5760c88114613aa35760d08114613aac5760d88114613ab55760e08114613abe5760e88114613ac75760f08114613ad05760f88114613ad9576101008114613ae25760209150613ae7565b60019150613ae7565b60029150613ae7565b60039150613ae7565b60049150613ae7565b60059150613ae7565b60069150613ae7565b60079150613ae7565b60089150613ae7565b60099150613ae7565b600a9150613ae7565b600b9150613ae7565b600c9150613ae7565b600d9150613ae7565b600e9150613ae7565b600f9150613ae7565b60109150613ae7565b60119150613ae7565b60129150613ae7565b60139150613ae7565b60149150613ae7565b60159150613ae7565b60169150613ae7565b60179150613ae7565b60189150613ae7565b60199150613ae7565b601a9150613ae7565b601b9150613ae7565b601c9150613ae7565b601d9150613ae7565b601e9150613ae7565b601f9150613ae7565b602091505b50919050565b8151613afa848284612853565b613b05600485615577565b93508063ffffffff16841015613b7957604051636381e58960e11b815260206004820152603260248201527f7661724279746573546f42797465733a206f6666736574206c657373207468616044820152710dc40e8d0ca40d2dce0eae840d8cadccee8d60731b606482015260840161053b565b613b8963ffffffff821685615577565b935080158015613b98576115b4565b8483018051601f84168015602002818801018581018215602002838601015b81831015613bcf578251815260209283019201613bb7565b5050509152505050505050565b909101600019810180519290915252565b909101600719810180519290915252565b60606000613c0c8484015190565b63ffffffff169050613c1f600485615577565b935083811115613c8b57604051636381e58960e11b815260206004820152603060248201527f6279746573546f56617242797465733a206f6666736574206c6573732074686160448201526f6e206c656e677468206f6620626f647960801b606482015260840161053b565b613c958185615577565b9350606081158015613cb2576040519150602082016040526138b5565b6040519150601f8316801560200281840101848101888315602002848a0101015b81831015613ceb578051835260209283019201613cd3565b5050848452601f01601f19166040525050949350505050565b80516000906020811115613d6757604051636381e58960e11b815260206004820152602360248201527f333262797465732062696720696e7465676572206174206d6f737420666f72206044820152626e6f7760e81b606482015260840161053b565b6000816001600160401b03811115613d8157613d8161523c565b6040519080825280601f01601f191660200182016040528015613dab576020820181803683370190505b5084518152938201519190930151900392915050565b81830151600060208204600101601f831615613ddb576001015b5b808210156103c6578585015160208302850152602086039550600182019150613ddc565b600061050a8260200151612719565b600080613e1d85858561274c565b6000818152600460205260408120805492935063ffffffff909216918291611b108361558e565b600084848484604051602001613e5d9493929190615a64565b604051602081830303815290604052805190602001209050949350505050565b6000606060006060613e8e8561419b565b6001600160a01b03163b613ed157505060408051","8082019091526014815273726563656976657220686173206e6f20636f646560601b6020820152600090613faa565b613eda8561419b565b6001600160a01b031663e5b813ad8989898960e001516040518563ffffffff1660e01b8152600401613f0f949392919061573a565b600060405180830381600087803b158015613f2957600080fd5b505af1925050508015613f3a575060015b613fa557613f46615771565b8063c703cb121415613f6d5750613f5b61578d565b80613f665750613f6f565b9050613faa565b505b3d808015613f99576040519150601f19603f3d011682016040523d82523d6000602084013e613f9e565b606091505b5050613faa565b600191505b9097909650945050505050565b60006060600061400287878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050506060870151889150613e0f565b90508063ffffffff168460c0015163ffffffff161461406457604051636381e58960e11b815260206004820152601a60248201527f5344504d73673a2073657175656e6365206e6f7420657175616c000000000000604482015260640161053b565b6000606060006140738761419b565b90506001600160a01b0381163b6140bc576000925060405180604001604052806014815260200173726563656976657220686173206e6f20636f646560601b815250915061418c565b60e087015160405163140e7af360e11b81526001600160a01b0383169163281cf5e6916140f1918e918e918e9160040161573a565b600060405180830381600087803b15801561410b57600080fd5b505af192505050801561411c575060015b61418757614128615771565b8063c703cb12141561414f575061413d61578d565b806141485750614151565b915061418c565b505b3d80801561417b576040519150601f19603f3d011682016040523d82523d6000602084013e614180565b606091505b505061418c565b600192505b50909890975095505050505050565b600061050a8260600151612719565b60006141b58761419b565b905085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050505060408801526060870184905282614205576003614208565b60025b60ff1660808801528261421b578161422c565b604051806020016040528060008152505b6101008801526001546001600160a01b031663317c40ab8261424d8a6122e8565b6040518363ffffffff1660e01b8152600401610c7b9291906153e2565b600060606000606061427b8561419b565b6001600160a01b03163b6142be575050604080518082019091526014815273726563656976657220686173206e6f20636f646560601b6020820152600090613faa565b6142c78561419b565b6001600160a01b031663e5b813ad8989898961012001516040518563ffffffff1660e01b8152600401613f0f949392919061573a565b60006060600061434887878080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050506060870151889150613e0f565b90508063ffffffff168460c0015163ffffffff16146143b457604051636381e58960e11b815260206004820152602160248201527f5344505f4d53475f4552524f523a2073657175656e6365206e6f7420657175616044820152601b60fa1b606482015260840161053b565b6000606060006143c38761419b565b90506001600160a01b0381163b61440c576000925060405180604001604052806014815260200173726563656976657220686173206e6f20636f646560601b815250915061418c565b61012087015160405163140e7af360e11b81526001600160a01b0383169163281cf5e6916140f1918e918e918e9160040161573a565b600061444d8761419b565b905085858080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152505050506040880152606087018490528261449d5760036144a0565b60025b60ff166080880152826144b357816144c4565b604051806020016040528060008152505b6101408801526001546001600160a01b031663317c40ab8261424d8a611da1565b6040805160a080820183526000808352606060208085018290528486018390528185018390526080808601849052865194850187528385529084018290529483018290528201819052928101839052909161453f84614689565b905060005b8160200151518110156146525760008260200151828151811061456957614569615aa0565b60200260200101519050806000015161ffff16600014156145985761458d81614865565b61ffff16845261463f565b806000015161ffff16600114156145b8576040810151602085015261463f565b806000015161ffff16600214156145e8576145de60206145d9836040015190565b015190565b604085015261463f565b806000015161ffff16600314156146165761460c614607826040015190565b613d04565b606085015261463f565b806000015161ffff166004141561463f5761463081614879565b6001600160401b031660808501525b508061464a816156d7565b915050614544565b50909392505050565b6040805160208082528183019092526000918291906020820181803683375050506020018390525090919050565b6040805180820190915260008152606060208201526006825110156146f157604051636381e58960e11b815260206004820152601760248201527f696c6c6567616c207261772064617461206c656e677468000000000000000000604482015260640161053b565b604080518082019091526000808252606060208301529061471a6147158584614892565b6148ba565b61ffff16815261472b60068361555f565b91506000825b8551811015614785576147566147518761474c84600261555f565b61495b565b614985565b614761906006615630565b6147719063ffffffff168261555f565b90508161477d816156d7565b925050614731565b6000826001600160401b0381111561479f5761479f61523c565b6040519080825280602002602001820160405280156147ec57816020015b604080516060808201835260008083526020830152918101919091528152602001906001900390816147bd5790505b509050600092505b865185101561485657604080516060808201835260008083526020830152918101919091526148238887614a7f565b96509050808285614833816156d7565b96508151811061484557614845615aa0565b6020026020010181905250506147f4565b60208401525090949350505050565b600061050a61471560028460400151015190565b600061050a61488d60088460400151015190565b614bdc565b81516000906148a283600261555f565b11156148ad57600080fd5b50016002015161ffff1690565b60408051600280825281830190925260009160f084901b9183916020820181803683370190505090508160011a60f81b816000815181106148fd576148fd615aa0565b60200101906001600160f81b031916908160001a9053508160001a60f81b8160018151811061492e5761492e615aa0565b60200101906001600160f81b031916908160001a9053506000614952826000614892565b95945050505050565b815160009061496b83600461555f565b111561497657600080fd5b50016004015163ffffffff1690565b60408051600480825281830190925260009160e084901b9183916020820181803683370190505090508160031a60f81b816000815181106149c8576149c8615aa0565b60200101906001600160f81b031916908160001a9053508160021a60f81b816001815181106149f9576149f9615aa0565b60200101906001600160f81b031916908160001a9053508160011a60f81b81600281518110614a2a57614a2a615aa0565b60200101906001600160f81b031916908160001a9053508160001a60f81b81600381518110614a5b57614a5b615aa0565b60200101906001600160f81b031916908160001a905350600061495282600061495b565b60408051606080820183526000808352602083015291810191909152600082845111614afa57604051636381e58960e11b815260206004820152602360248201527f6c656e677468206f66207261772064617461206c657373207468616e206f66666044820152621cd95d60ea1b606482015260840161053b565b6006831015614b3d57604051636381e58960e11b815260206004820152600e60248201526d1a5b1b1959d85b081bd9999cd95d60921b604482015260640161053b565b60408051606080820183526000808352602083015291810191909152614b666147158686614892565b61ffff168152614b7760028561555f565b9350614b86614751868661495b565b63ffffffff166020820152614b9c60048561555f565b9350614bb38585836020015163ffffffff16614d9a565b60408201526020810151614bcd9063ffffffff168561555f565b935091508290505b9250929050565b60408051600880825281830190925260009160c084901b9183916020820181803683370190505090508160071a60f81b81600081518110614c1f57614c1f615aa0565b60200101906001600160f81b031916908160001a9053508160061a60f81b81600181518110614c5057614c50615aa0565b60200101906001600160f81b031916908160001a9053508160051a60f81b81600281518110614c8157614c81615aa0565b60200101906001600160f81b031916908160001a9053508160041a60f81b81600381518110614cb257614cb2615aa0565b60200101906001600160f81b031916908160001a9053508160031a60f81b81600481518110614ce357614ce3615aa0565b60200101906001600160f81b031916908160001a9053508160021a60f81b81600581518110614d1457614d14615aa0565b60200101906001600160f81b031916908160001a9053508160011a60f81b81600681518110614d4557614d45615aa0565b60200101906001600160f81b031916908160001a9053508160001a60f81b81600781518110614d7657614d76615aa0565b60200101906001600160f81b031916908160001a9053506000614952826000614e10565b8251606090614da9838561555f565b1115614db457600080fd5b6000826001600160401b03811115614dce57614dce61523c565b6040519080825280601f01601f191660200182016040528015614df8576020820181803683370190505b50905060208082019086860101612554828287614e3d565b8151600090614e2083600861555f565b1115614e2b57600080fd5b5001600801516001600160401b031690565b60208110614e755781518352614e5460208461555f565b9250614e6160208361555f565b9150614e6e602082615577565b9050614e3d565b80614e7f57505050565b60006001614e8e836020615577565b614e9a90610100615b9a565b614ea49190615577","565b925184518416931916929092179092525050565b604080516101608101825260008082526020820181905260609282018390528282018190526080820181905260a0820181905260c0820181905260e08201819052610100820152610120810182905261014081019190915290565b60008083601f840112614f2557600080fd5b5081356001600160401b03811115614f3c57600080fd5b602083019150836020828501011115614bd557600080fd5b600080600080600060608688031215614f6c57600080fd5b85356001600160401b0380821115614f8357600080fd5b614f8f89838a01614f13565b9097509550602088013594506040880135915080821115614faf57600080fd5b50614fbc88828901614f13565b969995985093965092949392505050565b60008060208385031215614fe057600080fd5b82356001600160401b03811115614ff657600080fd5b61500285828601614f13565b90969095509350505050565b60005b83811015615029578181015183820152602001615011565b838111156113ca5750506000910152565b6000815180845261505281602086016020860161500e565b601f01601f19169290920160200192915050565b6020815261ffff82511660208201526000602083015160a0604084015261509060c084018261503a565b905060408401516060840152606084015160808401526001600160401b0360808501511660a08401528091505092915050565b6000602082840312156150d557600080fd5b81356001600160a01b038116811461274557600080fd5b803580151581146150fc57600080fd5b919050565b60008060008060008060008060c0898b03121561511d57600080fd5b88356001600160401b038082111561513457600080fd5b6151408c838d01614f13565b909a50985060208b0135975088915061515b60408c016150ec565b965060608b013591508082111561517157600080fd5b5061517e8b828c01614f13565b909550935050608089013560ff8116811461519857600080fd5b8092505060a089013590509295985092959890939650565b600080600080600080608087890312156151c957600080fd5b86356001600160401b03808211156151e057600080fd5b6151ec8a838b01614f13565b90985096506020890135955086915061520760408a016150ec565b9450606089013591508082111561521d57600080fd5b5061522a89828a01614f13565b979a9699509497509295939492505050565b63b95aa35560e01b600052604160045260246000fd5b601f8201601f191681016001600160401b03811182821017156152775761527761523c565b6040525050565b6000602080838503121561529157600080fd5b82356001600160401b03808211156152a857600080fd5b818501915085601f8301126152bc57600080fd5b8135818111156152ce576152ce61523c565b60405191506152e6601f8201601f1916850183615252565b80825286848285010111156152fa57600080fd5b8084840185840137600090820190930192909252509392505050565b60008060006040848603121561532b57600080fd5b8335925060208401356001600160401b0381111561534857600080fd5b61535486828701614f13565b9497909650939450505050565b6000806000806000806080878903121561537a57600080fd5b86356001600160401b038082111561539157600080fd5b61539d8a838b01614f13565b90985096506020890135955060408901359150808211156153bd57600080fd5b506153ca89828a01614f13565b979a9699509497949695606090950135949350505050565b6001600160a01b03831681526040602082018190526000906154069083018461503a565b949350505050565b8183823760009101908152919050565b600181811c9082168061543257607f821691505b60208210811415613ae75763b95aa35560e01b600052602260045260246000fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6000825161549a81846020870161500e565b9190910192915050565b87815260e0602082015260006154bd60e083018961503a565b87604084015263ffffffff871660608401526001600160401b038616608084015282810360a08401526154f0818661503a565b905082810360c0840152615504818561503a565b9a9950505050505050505050565b6020808252601e908201527f5344504d73673a2077726f6e6720726563656976696e6720646f6d61696e0000604082015260600190565b63b95aa35560e01b600052601160045260246000fd5b6000821982111561557257615572615549565b500190565b60008282101561558957615589615549565b500390565b600063ffffffff808316818114156155a8576155a8615549565b6001019392505050565b6020808252601f908201527f656e636f64655344504d6573736167653a2077726f6e672076657273696f6e00604082015260600190565b60208082526027908201527f656e636f64655344504d6573736167653a20626f6479206c656e677468206f76604082015266195c9b1a5b5a5d60ca1b606082015260800190565b600063ffffffff80831681851680830382111561564f5761564f615549565b01949350505050565b60208082526021908201527f656e636f64655344504d6573736167653a207a65726f206d65737361676520696040820152601960fa1b606082015260800190565b63b95aa35560e01b600052601260045260246000fd5b6000826156be576156be615699565b500490565b6000826156d2576156d2615699565b500690565b60006000198214156156eb576156eb615549565b5060010190565b600081600019048311821515161561570c5761570c615549565b500290565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60608152600061574e606083018688615711565b8460208401528281036040840152615766818561503a565b979650505050505050565b600060033d111561578a5760046000803e5060005160e01c5b90565b600060443d101561579b5790565b6040516003193d81016004833e81513d6001600160401b0381602484011181841117156157ca57505050505090565b82850191508151818111156157e25750505050505090565b843d87010160208285010111156157fc5750505050505090565b61255460208286010187615252565b60c08152600061581f60c08301898b615711565b602083018890526001600160a01b038716604084015263ffffffff86166060840152841515608084015282810360a0840152615504818561503a565b602081526000612745602083018461503a565b60006101408d83528060208401526158898184018d8f615711565b90508a604084015282810360608401526158a3818b61503a565b6001600160a01b038a16608085015263ffffffff891660a08501526001600160401b03881660c085015260ff871660e085015285151561010085015283810361012085015290506158f4818561503a565b9e9d5050505050505050505050505050565b87815260c06020820152600061592060c08301888a615711565b86604084015263ffffffff861660608401526001600160401b038516608084015282810360a0840152615504818561503a565b60006101408c835280602084015261596e8184018c8e615711565b90508960408401528281036060840152615988818a61503a565b6001600160a01b03989098166080840152505063ffffffff9490941660a08501526001600160401b039290921660c084015260ff1660e083015215156101008201528082036101209091015260078152667375636365737360c81b602082015260400195945050505050565b88815260e060208201526000615a0e60e08301898b615711565b87604084015263ffffffff871660608401526001600160401b038616608084015282810360a0840152615a41818661503a565b905082810360c0840152615a55818561503a565b9b9a5050505050505050505050565b60008551615a76818460208a0161500e565b9190910193845250602083019190915260c01b6001600160c01b0319166040820152604801919050565b63b95aa35560e01b600052603260045260246000fd5b600181815b80851115615af1578160001904821115615ad757615ad7615549565b80851615615ae457918102915b93841c9390800290615abb565b509250929050565b600082615b085750600161050a565b81615b155750600061050a565b8160018114615b2b5760028114615b3557615b51565b600191505061050a565b60ff841115615b4657615b46615549565b50506001821b61050a565b5060208310610133831016604e8410600b8410161715615b74575081810a61050a565b615b7e8383615ab6565b8060001904821115615b9257615b92615549565b029392505050565b60006127458383615af956fed9ba89f3055586e080520bb7f889d74607fb690663921504f30701bbe605253ba2646970667358221220ac591cd19ef68a939e97c733aad766fc94cd0676c114c18467665beebf3cbfb064736f6c634300080b0033"};
  
      public static final String SM_BINARY = org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", SM_BINARY_ARRAY);
  
      public static final String[] ABI_ARRAY = {"[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"timeoutMeasure\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"timeout\",\"type\":\"uint256\"}],\"name\":\"MessageV3TimeoutInfo\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"senderDomain\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"senderID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"receiverDomain\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiverID\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"sequence\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"atomicFlag\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"errMsg\",\"type\":\"string\"}],\"name\":\"ReceiveMessageV2\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"messageId\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"senderDomain\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"senderID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"receiverDomain\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiverID\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"sequence\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"nonce\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"atomicFlag\",\"type\":\"uint8\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"errMsg\",\"type\":\"string\"}],\"name\":\"ReceiveMessageV3\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"senderDomain\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"senderID\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"receiverID\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint32\",\"name\":\"sequence\",\"type\":\"uint32\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"result\",\"type\":\"bool\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"errMsg\",\"type\":\"string\"}],\"name\":\"receiveMessage\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"amAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAmAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLocalDomain\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"init\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"localDomainHash\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"senderDomain\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"senderID\",\"type\":\"bytes32\"},{\"internalType\":\"string\",\"name\":\"receiverDomain\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"receiverID\",\"type\":\"bytes32\"}],\"name\":\"querySDPMessageSeq\",\"outputs\":[{\"internalType\":\"uint32\",\"name\":\"\",\"type\":\"uint32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"recvDomain\",\"type\":\"string\"}],\"name\":\"queryValidatedBlockStateByDomain\",\"outputs\":[{\"components\":[{\"internalType\":\"uint16\",\"name\":\"version\",\"type\":\"uint16\"},{\"internalType\":\"string\",\"name\":\"domain\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"internalType\":\"uint256\",\"name\":\"blockHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint64\",\"name\":\"blockTimestamp\",\"type\":\"uint64\"}],\"internalType\":\"struct BlockState\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"senderDomain\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"senderID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"pkg\",\"type\":\"bytes\"}],\"name\":\"recvMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"exceptionMsgAuthor\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"exceptionMsgPkg\",\"type\":\"bytes\"}],\"name\":\"recvOffChainException\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"receiverDomain\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"receiverID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"sendMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"receiverDomain\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"receiverID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"atomic\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"sendMessageV2\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"receiverDomain\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"receiverID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"atomic\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"_timeoutMeasure\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_timeout\",\"type\":\"uint256\"}],\"name\":\"sendMessageV3\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"receiverDomain\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"receiverID\",\"type\":\"bytes32\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"sendUnorderedMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"receiverDomain\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"receiverID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"atomic\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"sendUnorderedMessageV2\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"receiverDomain\",\"type\":\"string\"},{\"internalType\":\"bytes32\",\"name\":\"receiverID\",\"type\":\"bytes32\"},{\"internalType\":\"bool\",\"name\":\"atomic\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"},{\"internalType\":\"uint8\",\"name\":\"_timeoutMeasure\",\"type\":\"uint8\"},{\"internalType\":\"uint256\",\"name\":\"_timeout\",\"type\":\"uint256\"}],\"name\":\"sendUnorderedMessageV3\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAmContract\",\"type\":\"address\"}],\"name\":\"setAmContract\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"domain\",\"type\":\"string\"}],\"name\":\"setLocalDomain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnershi","p\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]"};
  
      public static final String ABI = org.fisco.bcos.sdk.v3.utils.StringUtils.joinAll("", ABI_ARRAY);
  
      public static final String FUNC_AMADDRESS = "amAddress";
  
      public static final String FUNC_GETAMADDRESS = "getAmAddress";
  
      public static final String FUNC_GETLOCALDOMAIN = "getLocalDomain";
  
      public static final String FUNC_INIT = "init";
  
      public static final String FUNC_LOCALDOMAINHASH = "localDomainHash";
  
      public static final String FUNC_OWNER = "owner";
  
      public static final String FUNC_QUERYSDPMESSAGESEQ = "querySDPMessageSeq";
  
      public static final String FUNC_QUERYVALIDATEDBLOCKSTATEBYDOMAIN = "queryValidatedBlockStateByDomain";
  
      public static final String FUNC_RECVMESSAGE = "recvMessage";
  
      public static final String FUNC_RECVOFFCHAINEXCEPTION = "recvOffChainException";
  
      public static final String FUNC_RENOUNCEOWNERSHIP = "renounceOwnership";
  
      public static final String FUNC_SENDMESSAGE = "sendMessage";
  
      public static final String FUNC_SENDMESSAGEV2 = "sendMessageV2";
  
      public static final String FUNC_SENDMESSAGEV3 = "sendMessageV3";
  
      public static final String FUNC_SENDUNORDEREDMESSAGE = "sendUnorderedMessage";
  
      public static final String FUNC_SENDUNORDEREDMESSAGEV2 = "sendUnorderedMessageV2";
  
      public static final String FUNC_SENDUNORDEREDMESSAGEV3 = "sendUnorderedMessageV3";
  
      public static final String FUNC_SETAMCONTRACT = "setAmContract";
  
      public static final String FUNC_SETLOCALDOMAIN = "setLocalDomain";
  
      public static final String FUNC_TRANSFEROWNERSHIP = "transferOwnership";
  
      public static final Event INITIALIZED_EVENT = new Event("Initialized", 
              Arrays.<TypeReference<?>>asList(new TypeReference<Uint8>() {}));
      ;
  
      public static final Event MESSAGEV3TIMEOUTINFO_EVENT = new Event("MessageV3TimeoutInfo", 
              Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}, new TypeReference<Uint8>() {}, new TypeReference<Uint256>() {}));
      ;
  
      public static final Event OWNERSHIPTRANSFERRED_EVENT = new Event("OwnershipTransferred", 
              Arrays.<TypeReference<?>>asList(new TypeReference<Address>(true) {}, new TypeReference<Address>(true) {}));
      ;
  
      public static final Event RECEIVEMESSAGEV2_EVENT = new Event("ReceiveMessageV2", 
              Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Bytes32>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Address>() {}, new TypeReference<Uint32>() {}, new TypeReference<Uint64>() {}, new TypeReference<Uint8>() {}, new TypeReference<Bool>() {}, new TypeReference<Utf8String>() {}));
      ;
  
      public static final Event RECEIVEMESSAGEV3_EVENT = new Event("ReceiveMessageV3", 
              Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Bytes32>() {}, new TypeReference<Utf8String>() {}, new TypeReference<Address>() {}, new TypeReference<Uint32>() {}, new TypeReference<Uint64>() {}, new TypeReference<Uint8>() {}, new TypeReference<Bool>() {}, new TypeReference<Utf8String>() {}));
      ;
  
      public static final Event RECEIVEMESSAGE_EVENT = new Event("receiveMessage", 
              Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Bytes32>() {}, new TypeReference<Address>() {}, new TypeReference<Uint32>() {}, new TypeReference<Bool>() {}, new TypeReference<Utf8String>() {}));
      ;
  
      protected SDPMsg(String contractAddress, Client client, CryptoKeyPair credential) {
          super(getBinary(client.getCryptoSuite()), contractAddress, client, credential);
      }
  
      public static String getBinary(CryptoSuite cryptoSuite) {
          return (cryptoSuite.getCryptoTypeConfig() == CryptoType.ECDSA_TYPE ? BINARY : SM_BINARY);
      }
  
      public static String getABI() {
          return ABI;
      }
  
      public List<InitializedEventResponse> getInitializedEvents(
              TransactionReceipt transactionReceipt) {
          List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(INITIALIZED_EVENT, transactionReceipt);
          ArrayList<InitializedEventResponse> responses = new ArrayList<InitializedEventResponse>(valueList.size());
          for (Contract.EventValuesWithLog eventValues : valueList) {
              InitializedEventResponse typedResponse = new InitializedEventResponse();
              typedResponse.log = eventValues.getLog();
              typedResponse.version = (BigInteger) eventValues.getNonIndexedValues().get(0).getValue();
              responses.add(typedResponse);
          }
          return responses;
      }
  
      public void subscribeInitializedEvent(BigInteger fromBlock, BigInteger toBlock,
              List<String> otherTopics, EventSubCallback callback) {
          String topic0 = eventEncoder.encode(INITIALIZED_EVENT);
          subscribeEvent(topic0,otherTopics,fromBlock,toBlock,callback);
      }
  
      public void subscribeInitializedEvent(EventSubCallback callback) {
          String topic0 = eventEncoder.encode(INITIALIZED_EVENT);
          subscribeEvent(topic0,callback);
      }
  
      public List<MessageV3TimeoutInfoEventResponse> getMessageV3TimeoutInfoEvents(
              TransactionReceipt transactionReceipt) {
          List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(MESSAGEV3TIMEOUTINFO_EVENT, transactionReceipt);
          ArrayList<MessageV3TimeoutInfoEventResponse> responses = new ArrayList<MessageV3TimeoutInfoEventResponse>(valueList.size());
          for (Contract.EventValuesWithLog eventValues : valueList) {
              MessageV3TimeoutInfoEventResponse typedResponse = new MessageV3TimeoutInfoEventResponse();
              typedResponse.log = eventValues.getLog();
              typedResponse.messageId = (byte[]) eventValues.getNonIndexedValues().get(0).getValue();
              typedResponse.timeoutMeasure = (BigInteger) eventValues.getNonIndexedValues().get(1).getValue();
              typedResponse.timeout = (BigInteger) eventValues.getNonIndexedValues().get(2).getValue();
              responses.add(typedResponse);
          }
          return responses;
      }
  
      public void subscribeMessageV3TimeoutInfoEvent(BigInteger fromBlock, BigInteger toBlock,
              List<String> otherTopics, EventSubCallback callback) {
          String topic0 = eventEncoder.encode(MESSAGEV3TIMEOUTINFO_EVENT);
          subscribeEvent(topic0,otherTopics,fromBlock,toBlock,callback);
      }
  
      public void subscribeMessageV3TimeoutInfoEvent(EventSubCallback callback) {
          String topic0 = eventEncoder.encode(MESSAGEV3TIMEOUTINFO_EVENT);
          subscribeEvent(topic0,callback);
      }
  
      public List<OwnershipTransferredEventResponse> getOwnershipTransferredEvents(
              TransactionReceipt transactionReceipt) {
          List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(OWNERSHIPTRANSFERRED_EVENT, transactionReceipt);
          ArrayList<OwnershipTransferredEventResponse> responses = new ArrayList<OwnershipTransferredEventResponse>(valueList.size());
          for (Contract.EventValuesWithLog eventValues : valueList) {
              OwnershipTransferredEventResponse typedResponse = new OwnershipTransferredEventResponse();
              typedResponse.log = eventValues.getLog();
              typedResponse.previousOwner = (String) eventValues.getIndexedValues().get(0).getValue();
              typedResponse.newOwner = (String) eventValues.getIndexedValues().get(1).getValue();
              responses.add(typedResponse);
          }
          return responses;
      }
  
      public void subscribeOwnershipTransferredEvent(BigInteger fromBlock, BigInteger toBlock,
              List<String> otherTopics, EventSubCallback callback) {
          String topic0 = eventEncoder.encode(OWNERSHIPTRANSFERRED_EVENT);
          subscribeEvent(topic0,otherTopics,fromBlock,toBlock,callback);
      }
  
      public void subscribeOwnershipTransferredEvent(EventSubCallback callback) {
          String topic0 = eventEncoder.encode(OWNERSHIPTRANSFERRED_EVENT);
          subscribeEvent(topic0,callback);
      }
  
      public List<ReceiveMessageV2EventResponse> getReceiveMessageV2Events(
              TransactionReceipt transactionReceipt) {
          List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(RECEIVEMESSAGEV2_EVENT, transactionReceipt);
          ArrayList<ReceiveMessageV2EventResponse> responses = new ArrayList<ReceiveMessageV2EventResponse>(valueList.size());
          for (Contract.EventValuesWithLog eventValues : valueList) {
              ReceiveMessageV2EventResponse typedResponse = new ReceiveMessageV2EventResponse();
              typedResponse.log = eventValues.getLog();
              typedResponse.messageId = (byte[]) eventValues.getNonIndexedValues().get(0).getValue();
              typedResponse.senderDomain = (String) eventValues.getNonIndexedValues().get(1).getValue();
              typedResponse.senderID = (byte[]) eventValues.getNonIndexedValues().get(2).getValue();
              typedResponse.receiverDomain = (String) eventValues.getNonIndexedValues().get(3).getValue();
              typedResponse.receiverID = (String) eventValues.getNonIndexedValues().get(4).getValue();
              typedResponse.sequence = (BigInteger) eventValues.getNonIndexedValues().get(5).getValue();
              typedResponse.nonce = (BigInteger) eventValues.getNonIndexedValues().get(6).getValue();
              typedResponse.atomicFlag = (BigInteger) eventValues.getNonIndexedValues().get(7).getValue();
              typedResponse.result = (Boolean) eventValues.getNonIndexedValues().get(8).getValue();
              typedResponse.errMsg = (String) eventValues.getNonIndexedValues().get(9).getValue();
              responses.add(typedResponse);
          }
          return responses;
      }
  
      public void subscribeReceiveMessageV2Event(BigInteger fromBlock, BigInteger toBlock,
              List<String> otherTopics, EventSubCallback callback) {
          String topic0 = eventEncoder.encode(RECEIVEMESSAGEV2_EVENT);
          subscribeEvent(topic0,otherTopics,fromBlock,toBlock,callback);
      }
  
      public void subscribeReceiveMessageV2Event(EventSubCallback callback) {
          String topic0 = eventEncoder.encode(RECEIVEMESSAGEV2_EVENT);
          subscribeEvent(topic0,callback);
      }
  
      public List<ReceiveMessageV3EventResponse> getReceiveMessageV3Events(
              TransactionReceipt transactionReceipt) {
          List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(RECEIVEMESSAGEV3_EVENT, transactionReceipt);
          ArrayList<ReceiveMessageV3EventResponse> responses = new ArrayList<ReceiveMessageV3EventResponse>(valueList.size());
          for (Contract.EventValuesWithLog eventValues : valueList) {
              ReceiveMessageV3EventResponse typedResponse = new ReceiveMessageV3EventResponse();
              typedResponse.log = eventValues.getLog();
              typedResponse.messageId = (byte[]) eventValues.getNonIndexedValues().get(0).getValue();
              typedResponse.senderDomain = (String) eventValues.getNonIndexedValues().get(1).getValue();
              typedResponse.senderID = (byte[]) eventValues.getNonIndexedValues().get(2).getValue();
              typedResponse.receiverDomain = (String) eventValues.getNonIndexedValues().get(3).getValue();
              typedResponse.receiverID = (String) eventValues.getNonIndexedValues().get(4).getValue();
              typedResponse.sequence = (BigInteger) eventValues.getNonIndexedValues().get(5).getValue();
              typedResponse.nonce = (BigInteger) eventValues.getNonIndexedValues().get(6).getValue();
              typedResponse.atomicFlag = (BigInteger) eventValues.getNonIndexedValues().get(7).getValue();
              typedResponse.result = (Boolean) eventValues.getNonIndexedValues().get(8).getValue();
              typedResponse.errMsg = (String) eventValues.getNonIndexedValues().get(9).getValue();
              responses.add(typedResponse);
          }
          return responses;
      }
  
      public void subscribeReceiveMessageV3Event(BigInteger fromBlock, BigInteger toBlock,
              List<String> otherTopics, EventSubCallback callback) {
          String topic0 = eventEncoder.encode(RECEIVEMESSAGEV3_EVENT);
          subscribeEvent(topic0,otherTopics,fromBlock,toBlock,callback);
      }
  
      public void subscribeReceiveMessageV3Event(EventSubCallback callback) {
          String topic0 = eventEncoder.encode(RECEIVEMESSAGEV3_EVENT);
          subscribeEvent(topic0,callback);
      }
  
      public List<ReceiveMessageEventResponse> getReceiveMessageEvents(
              TransactionReceipt transactionReceipt) {
          List<Contract.EventValuesWithLog> valueList = extractEventParametersWithLog(RECEIVEMESSAGE_EVENT, transactionReceipt);
          ArrayList<ReceiveMessageEventResponse> responses = new ArrayList<ReceiveMessageEventResponse>(valueList.size());
          for (Contract.EventValuesWithLog eventValues : valueList) {
              ReceiveMessageEventResponse typedResponse = new ReceiveMessageEventResponse();
              typedResponse.log = eventValues.getLog();
              typedResponse.senderDomain = (String) eventValues.getNonIndexedValues().get(0).getValue();
              typedResponse.senderID = (byte[]) eventValues.getNonIndexedValues().get(1).getValue();
              typedResponse.receiverID = (String) eventValues.getNonIndexedValues().get(2).getValue();
              typedResponse.sequence = (BigInteger) eventValues.getNonIndexedValues().get(3).getValue();
              typedResponse.result = (Boolean) eventValues.getNonIndexedValues().get(4).getValue();
              typedResponse.errMsg = (String) eventValues.getNonIndexedValues().get(5).getValue();
              responses.add(typedResponse);
          }
          return responses;
      }
  
      public void subscribeReceiveMessageEvent(BigInteger fromBlock, BigInteger toBlock,
              List<String> otherTopics, EventSubCallback callback) {
          String topic0 = eventEncoder.encode(RECEIVEMESSAGE_EVENT);
          subscribeEvent(topic0,otherTopics,fromBlock,toBlock,callback);
      }
  
      public void subscribeReceiveMessageEvent(EventSubCallback callback) {
          String topic0 = eventEncoder.encode(RECEIVEMESSAGE_EVENT);
          subscribeEvent(topic0,callback);
      }
  
      public String amAddress() throws ContractException {
          final Function function = new Function(FUNC_AMADDRESS, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
          return executeCallWithSingleValueReturn(function, String.class);
      }
  
      public Function getMethodAmAddressRawFunction() throws ContractException {
          final Function function = new Function(FUNC_AMADDRESS, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
          return function;
      }
  
      public String getAmAddress() throws ContractException {
          final Function function = new Function(FUNC_GETAMADDRESS, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
          return executeCallWithSingleValueReturn(function, String.class);
      }
  
      public Function getMethodGetAmAddressRawFunction() throws ContractException {
          final Function function = new Function(FUNC_GETAMADDRESS, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
          return function;
      }
  
      public byte[] getLocalDomain() throws ContractException {
          final Function function = new Function(FUNC_GETLOCALDOMAIN, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}));
          return executeCallWithSingleValueReturn(function, byte[].class);
      }
  
      public Function getMethodGetLocalDomainRawFunction() throws ContractException {
          final Function function = new Function(FUNC_GETLOCALDOMAIN, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}));
          return function;
      }
  
      public TransactionReceipt init() {
          final Function function = new Function(
                  FUNC_INIT, 
                  Arrays.<Type>asList(), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return executeTransaction(function);
      }
  
      public Function getMethodInitRawFunction() throws ContractException {
          final Function function = new Function(FUNC_INIT, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList());
          return function;
      }
  
      public String getSignedTransactionForInit() {
          final Function function = new Function(
                  FUNC_INIT, 
                  Arrays.<Type>asList(), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return createSignedTransaction(function);
      }
  
      public String init(TransactionCallback callback) {
          final Function function = new Function(
                  FUNC_INIT, 
                  Arrays.<Type>asList(), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return asyncExecuteTransaction(function, callback);
      }
  
      public byte[] localDomainHash() throws ContractException {
          final Function function = new Function(FUNC_LOCALDOMAINHASH, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}));
          return executeCallWithSingleValueReturn(function, byte[].class);
      }
  
      public Function getMethodLocalDomainHashRawFunction() throws ContractException {
          final Function function = new Function(FUNC_LOCALDOMAINHASH, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}));
          return function;
      }
  
      public String owner() throws ContractException {
          final Function function = new Function(FUNC_OWNER, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
          return executeCallWithSingleValueReturn(function, String.class);
      }
  
      public Function getMethodOwnerRawFunction() throws ContractException {
          final Function function = new Function(FUNC_OWNER, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
          return function;
      }
  
      public BigInteger querySDPMessageSeq(String senderDomain, byte[] senderID,
              String receiverDomain, byte[] receiverID) throws ContractException {
          final Function function = new Function(FUNC_QUERYSDPMESSAGESEQ, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(senderDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(senderID), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(receiverDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(receiverID)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Uint32>() {}));
          return executeCallWithSingleValueReturn(function, BigInteger.class);
      }
  
      public Function getMethodQuerySDPMessageSeqRawFunction(String senderDomain, byte[] senderID,
              String receiverDomain, byte[] receiverID) throws ContractException {
          final Function function = new Function(FUNC_QUERYSDPMESSAGESEQ, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(senderDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(senderID), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(receiverDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(receiverID)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Uint32>() {}));
          return function;
      }
  
      public BlockState queryValidatedBlockStateByDomain(String recvDomain) throws ContractException {
          final Function function = new Function(FUNC_QUERYVALIDATEDBLOCKSTATEBYDOMAIN, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(recvDomain)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<BlockState>() {}));
          return executeCallWithSingleValueReturn(function, BlockState.class);
      }
  
      public Function getMethodQueryValidatedBlockStateByDomainRawFunction(String recvDomain) throws
              ContractException {
          final Function function = new Function(FUNC_QUERYVALIDATEDBLOCKSTATEBYDOMAIN, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(recvDomain)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<BlockState>() {}));
          return function;
      }
  
      public TransactionReceipt recvMessage(String senderDomain, byte[] senderID, byte[] pkg) {
          final Function function = new Function(
                  FUNC_RECVMESSAGE, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(senderDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(senderID), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(pkg)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return executeTransaction(function);
      }
  
      public Function getMethodRecvMessageRawFunction(String senderDomain, byte[] senderID,
              byte[] pkg) throws ContractException {
          final Function function = new Function(FUNC_RECVMESSAGE, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(senderDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(senderID), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(pkg)), 
                  Arrays.<TypeReference<?>>asList());
          return function;
      }
  
      public String getSignedTransactionForRecvMessage(String senderDomain, byte[] senderID,
              byte[] pkg) {
          final Function function = new Function(
                  FUNC_RECVMESSAGE, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(senderDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(senderID), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(pkg)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return createSignedTransaction(function);
      }
  
      public String recvMessage(String senderDomain, byte[] senderID, byte[] pkg,
              TransactionCallback callback) {
          final Function function = new Function(
                  FUNC_RECVMESSAGE, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(senderDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(senderID), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(pkg)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return asyncExecuteTransaction(function, callback);
      }
  
      public Tuple3<String, byte[], byte[]> getRecvMessageInput(
              TransactionReceipt transactionReceipt) {
          String data = transactionReceipt.getInput().substring(10);
          final Function function = new Function(FUNC_RECVMESSAGE, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Bytes32>() {}, new TypeReference<DynamicBytes>() {}));
          List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
          return new Tuple3<String, byte[], byte[]>(
  
                  (String) results.get(0).getValue(), 
                  (byte[]) results.get(1).getValue(), 
                  (byte[]) results.get(2).getValue()
                  );
      }
  
      public TransactionReceipt recvOffChainException(byte[] exceptionMsgAuthor,
              byte[] exceptionMsgPkg) {
          final Function function = new Function(
                  FUNC_RECVOFFCHAINEXCEPTION, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(exceptionMsgAuthor), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(exceptionMsgPkg)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return executeTransaction(function);
      }
  
      public Function getMethodRecvOffChainExceptionRawFunction(byte[] exceptionMsgAuthor,
              byte[] exceptionMsgPkg) throws ContractException {
          final Function function = new Function(FUNC_RECVOFFCHAINEXCEPTION, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(exceptionMsgAuthor), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(exceptionMsgPkg)), 
                  Arrays.<TypeReference<?>>asList());
          return function;
      }
  
      public String getSignedTransactionForRecvOffChainException(byte[] exceptionMsgAuthor,
              byte[] exceptionMsgPkg) {
          final Function function = new Function(
                  FUNC_RECVOFFCHAINEXCEPTION, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(exceptionMsgAuthor), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(exceptionMsgPkg)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return createSignedTransaction(function);
      }
  
      public String recvOffChainException(byte[] exceptionMsgAuthor, byte[] exceptionMsgPkg,
              TransactionCallback callback) {
          final Function function = new Function(
                  FUNC_RECVOFFCHAINEXCEPTION, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(exceptionMsgAuthor), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(exceptionMsgPkg)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return asyncExecuteTransaction(function, callback);
      }
  
      public Tuple2<byte[], byte[]> getRecvOffChainExceptionInput(
              TransactionReceipt transactionReceipt) {
          String data = transactionReceipt.getInput().substring(10);
          final Function function = new Function(FUNC_RECVOFFCHAINEXCEPTION, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}, new TypeReference<DynamicBytes>() {}));
          List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
          return new Tuple2<byte[], byte[]>(
  
                  (byte[]) results.get(0).getValue(), 
                  (byte[]) results.get(1).getValue()
                  );
      }
  
      public TransactionReceipt renounceOwnership() {
          final Function function = new Function(
                  FUNC_RENOUNCEOWNERSHIP, 
                  Arrays.<Type>asList(), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return executeTransaction(function);
      }
  
      public Function getMethodRenounceOwnershipRawFunction() throws ContractException {
          final Function function = new Function(FUNC_RENOUNCEOWNERSHIP, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList());
          return function;
      }
  
      public String getSignedTransactionForRenounceOwnership() {
          final Function function = new Function(
                  FUNC_RENOUNCEOWNERSHIP, 
                  Arrays.<Type>asList(), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return createSignedTransaction(function);
      }
  
      public String renounceOwnership(TransactionCallback callback) {
          final Function function = new Function(
                  FUNC_RENOUNCEOWNERSHIP, 
                  Arrays.<Type>asList(), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return asyncExecuteTransaction(function, callback);
      }
  
      public TransactionReceipt sendMessage(String receiverDomain, byte[] receiverID,
              byte[] message) {
          final Function function = new Function(
                  FUNC_SENDMESSAGE, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(receiverDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(receiverID), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(message)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return executeTransaction(function);
      }
  
      public Function getMethodSendMessageRawFunction(String receiverDomain, byte[] receiverID,
              byte[] message) throws ContractException {
          final Function function = new Function(FUNC_SENDMESSAGE, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(receiverDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(receiverID), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(message)), 
                  Arrays.<TypeReference<?>>asList());
          return function;
      }
  
      public String getSignedTransactionForSendMessage(String receiverDomain, byte[] receiverID,
              byte[] message) {
          final Function function = new Function(
                  FUNC_SENDMESSAGE, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(receiverDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(receiverID), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(message)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return createSignedTransaction(function);
      }
  
      public String sendMessage(String receiverDomain, byte[] receiverID, byte[] message,
              TransactionCallback callback) {
          final Function function = new Function(
                  FUNC_SENDMESSAGE, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(receiverDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(receiverID), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(message)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return asyncExecuteTransaction(function, callback);
      }
  
      public Tuple3<String, byte[], byte[]> getSendMessageInput(
              TransactionReceipt transactionReceipt) {
          String data = transactionReceipt.getInput().substring(10);
          final Function function = new Function(FUNC_SENDMESSAGE, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Bytes32>() {}, new TypeReference<DynamicBytes>() {}));
          List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
          return new Tuple3<String, byte[], byte[]>(
  
                  (String) results.get(0).getValue(), 
                  (byte[]) results.get(1).getValue(), 
                  (byte[]) results.get(2).getValue()
                  );
      }
  
      public TransactionReceipt sendMessageV2(String receiverDomain, byte[] receiverID,
              Boolean atomic, byte[] message) {
          final Function function = new Function(
                  FUNC_SENDMESSAGEV2, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(receiverDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(receiverID), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.Bool(atomic), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(message)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return executeTransaction(function);
      }
  
      public Function getMethodSendMessageV2RawFunction(String receiverDomain, byte[] receiverID,
              Boolean atomic, byte[] message) throws ContractException {
          final Function function = new Function(FUNC_SENDMESSAGEV2, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(receiverDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(receiverID), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.Bool(atomic), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(message)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}));
          return function;
      }
  
      public String getSignedTransactionForSendMessageV2(String receiverDomain, byte[] receiverID,
              Boolean atomic, byte[] message) {
          final Function function = new Function(
                  FUNC_SENDMESSAGEV2, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(receiverDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(receiverID), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.Bool(atomic), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(message)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return createSignedTransaction(function);
      }
  
      public String sendMessageV2(String receiverDomain, byte[] receiverID, Boolean atomic,
              byte[] message, TransactionCallback callback) {
          final Function function = new Function(
                  FUNC_SENDMESSAGEV2, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(receiverDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(receiverID), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.Bool(atomic), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(message)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return asyncExecuteTransaction(function, callback);
      }
  
      public Tuple4<String, byte[], Boolean, byte[]> getSendMessageV2Input(
              TransactionReceipt transactionReceipt) {
          String data = transactionReceipt.getInput().substring(10);
          final Function function = new Function(FUNC_SENDMESSAGEV2, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Bytes32>() {}, new TypeReference<Bool>() {}, new TypeReference<DynamicBytes>() {}));
          List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
          return new Tuple4<String, byte[], Boolean, byte[]>(
  
                  (String) results.get(0).getValue(), 
                  (byte[]) results.get(1).getValue(), 
                  (Boolean) results.get(2).getValue(), 
                  (byte[]) results.get(3).getValue()
                  );
      }
  
      public Tuple1<byte[]> getSendMessageV2Output(TransactionReceipt transactionReceipt) {
          String data = transactionReceipt.getOutput();
          final Function function = new Function(FUNC_SENDMESSAGEV2, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}));
          List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
          return new Tuple1<byte[]>(
  
                  (byte[]) results.get(0).getValue()
                  );
      }
  
      public TransactionReceipt sendMessageV3(String receiverDomain, byte[] receiverID,
              Boolean atomic, byte[] message, BigInteger _timeoutMeasure, BigInteger _timeout) {
          final Function function = new Function(
                  FUNC_SENDMESSAGEV3, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(receiverDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(receiverID), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.Bool(atomic), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(message), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint8(_timeoutMeasure), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(_timeout)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return executeTransaction(function);
      }
  
      public Function getMethodSendMessageV3RawFunction(String receiverDomain, byte[] receiverID,
              Boolean atomic, byte[] message, BigInteger _timeoutMeasure, BigInteger _timeout) throws
              ContractException {
          final Function function = new Function(FUNC_SENDMESSAGEV3, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(receiverDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(receiverID), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.Bool(atomic), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(message), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint8(_timeoutMeasure), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(_timeout)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}));
          return function;
      }
  
      public String getSignedTransactionForSendMessageV3(String receiverDomain, byte[] receiverID,
              Boolean atomic, byte[] message, BigInteger _timeoutMeasure, BigInteger _timeout) {
          final Function function = new Function(
                  FUNC_SENDMESSAGEV3, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(receiverDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(receiverID), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.Bool(atomic), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(message), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint8(_timeoutMeasure), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(_timeout)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return createSignedTransaction(function);
      }
  
      public String sendMessageV3(String receiverDomain, byte[] receiverID, Boolean atomic,
              byte[] message, BigInteger _timeoutMeasure, BigInteger _timeout,
              TransactionCallback callback) {
          final Function function = new Function(
                  FUNC_SENDMESSAGEV3, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(receiverDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(receiverID), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.Bool(atomic), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(message), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint8(_timeoutMeasure), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(_timeout)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return asyncExecuteTransaction(function, callback);
      }
  
      public Tuple6<String, byte[], Boolean, byte[], BigInteger, BigInteger> getSendMessageV3Input(
              TransactionReceipt transactionReceipt) {
          String data = transactionReceipt.getInput().substring(10);
          final Function function = new Function(FUNC_SENDMESSAGEV3, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Bytes32>() {}, new TypeReference<Bool>() {}, new TypeReference<DynamicBytes>() {}, new TypeReference<Uint8>() {}, new TypeReference<Uint256>() {}));
          List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
          return new Tuple6<String, byte[], Boolean, byte[], BigInteger, BigInteger>(
  
                  (String) results.get(0).getValue(), 
                  (byte[]) results.get(1).getValue(), 
                  (Boolean) results.get(2).getValue(), 
                  (byte[]) results.get(3).getValue(), 
                  (BigInteger) results.get(4).getValue(), 
                  (BigInteger) results.get(5).getValue()
                  );
      }
  
      public Tuple1<byte[]> getSendMessageV3Output(TransactionReceipt transactionReceipt) {
          String data = transactionReceipt.getOutput();
          final Function function = new Function(FUNC_SENDMESSAGEV3, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}));
          List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
          return new Tuple1<byte[]>(
  
                  (byte[]) results.get(0).getValue()
                  );
      }
  
      public TransactionReceipt sendUnorderedMessage(String receiverDomain, byte[] receiverID,
              byte[] message) {
          final Function function = new Function(
                  FUNC_SENDUNORDEREDMESSAGE, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(receiverDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(receiverID), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(message)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return executeTransaction(function);
      }
  
      public Function getMethodSendUnorderedMessageRawFunction(String receiverDomain,
              byte[] receiverID, byte[] message) throws ContractException {
          final Function function = new Function(FUNC_SENDUNORDEREDMESSAGE, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(receiverDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(receiverID), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(message)), 
                  Arrays.<TypeReference<?>>asList());
          return function;
      }
  
      public String getSignedTransactionForSendUnorderedMessage(String receiverDomain,
              byte[] receiverID, byte[] message) {
          final Function function = new Function(
                  FUNC_SENDUNORDEREDMESSAGE, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(receiverDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(receiverID), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(message)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return createSignedTransaction(function);
      }
  
      public String sendUnorderedMessage(String receiverDomain, byte[] receiverID, byte[] message,
              TransactionCallback callback) {
          final Function function = new Function(
                  FUNC_SENDUNORDEREDMESSAGE, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(receiverDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(receiverID), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(message)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return asyncExecuteTransaction(function, callback);
      }
  
      public Tuple3<String, byte[], byte[]> getSendUnorderedMessageInput(
              TransactionReceipt transactionReceipt) {
          String data = transactionReceipt.getInput().substring(10);
          final Function function = new Function(FUNC_SENDUNORDEREDMESSAGE, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Bytes32>() {}, new TypeReference<DynamicBytes>() {}));
          List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
          return new Tuple3<String, byte[], byte[]>(
  
                  (String) results.get(0).getValue(), 
                  (byte[]) results.get(1).getValue(), 
                  (byte[]) results.get(2).getValue()
                  );
      }
  
      public TransactionReceipt sendUnorderedMessageV2(String receiverDomain, byte[] receiverID,
              Boolean atomic, byte[] message) {
          final Function function = new Function(
                  FUNC_SENDUNORDEREDMESSAGEV2, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(receiverDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(receiverID), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.Bool(atomic), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(message)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return executeTransaction(function);
      }
  
      public Function getMethodSendUnorderedMessageV2RawFunction(String receiverDomain,
              byte[] receiverID, Boolean atomic, byte[] message) throws ContractException {
          final Function function = new Function(FUNC_SENDUNORDEREDMESSAGEV2, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(receiverDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(receiverID), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.Bool(atomic), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(message)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}));
          return function;
      }
  
      public String getSignedTransactionForSendUnorderedMessageV2(String receiverDomain,
              byte[] receiverID, Boolean atomic, byte[] message) {
          final Function function = new Function(
                  FUNC_SENDUNORDEREDMESSAGEV2, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(receiverDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(receiverID), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.Bool(atomic), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(message)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return createSignedTransaction(function);
      }
  
      public String sendUnorderedMessageV2(String receiverDomain, byte[] receiverID, Boolean atomic,
              byte[] message, TransactionCallback callback) {
          final Function function = new Function(
                  FUNC_SENDUNORDEREDMESSAGEV2, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(receiverDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(receiverID), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.Bool(atomic), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(message)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return asyncExecuteTransaction(function, callback);
      }
  
      public Tuple4<String, byte[], Boolean, byte[]> getSendUnorderedMessageV2Input(
              TransactionReceipt transactionReceipt) {
          String data = transactionReceipt.getInput().substring(10);
          final Function function = new Function(FUNC_SENDUNORDEREDMESSAGEV2, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Bytes32>() {}, new TypeReference<Bool>() {}, new TypeReference<DynamicBytes>() {}));
          List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
          return new Tuple4<String, byte[], Boolean, byte[]>(
  
                  (String) results.get(0).getValue(), 
                  (byte[]) results.get(1).getValue(), 
                  (Boolean) results.get(2).getValue(), 
                  (byte[]) results.get(3).getValue()
                  );
      }
  
      public Tuple1<byte[]> getSendUnorderedMessageV2Output(TransactionReceipt transactionReceipt) {
          String data = transactionReceipt.getOutput();
          final Function function = new Function(FUNC_SENDUNORDEREDMESSAGEV2, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}));
          List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
          return new Tuple1<byte[]>(
  
                  (byte[]) results.get(0).getValue()
                  );
      }
  
      public TransactionReceipt sendUnorderedMessageV3(String receiverDomain, byte[] receiverID,
              Boolean atomic, byte[] message, BigInteger _timeoutMeasure, BigInteger _timeout) {
          final Function function = new Function(
                  FUNC_SENDUNORDEREDMESSAGEV3, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(receiverDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(receiverID), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.Bool(atomic), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(message), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint8(_timeoutMeasure), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(_timeout)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return executeTransaction(function);
      }
  
      public Function getMethodSendUnorderedMessageV3RawFunction(String receiverDomain,
              byte[] receiverID, Boolean atomic, byte[] message, BigInteger _timeoutMeasure,
              BigInteger _timeout) throws ContractException {
          final Function function = new Function(FUNC_SENDUNORDEREDMESSAGEV3, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(receiverDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(receiverID), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.Bool(atomic), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(message), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint8(_timeoutMeasure), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(_timeout)), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}));
          return function;
      }
  
      public String getSignedTransactionForSendUnorderedMessageV3(String receiverDomain,
              byte[] receiverID, Boolean atomic, byte[] message, BigInteger _timeoutMeasure,
              BigInteger _timeout) {
          final Function function = new Function(
                  FUNC_SENDUNORDEREDMESSAGEV3, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(receiverDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(receiverID), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.Bool(atomic), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(message), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint8(_timeoutMeasure), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(_timeout)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return createSignedTransaction(function);
      }
  
      public String sendUnorderedMessageV3(String receiverDomain, byte[] receiverID, Boolean atomic,
              byte[] message, BigInteger _timeoutMeasure, BigInteger _timeout,
              TransactionCallback callback) {
          final Function function = new Function(
                  FUNC_SENDUNORDEREDMESSAGEV3, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(receiverDomain), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(receiverID), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.Bool(atomic), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.DynamicBytes(message), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint8(_timeoutMeasure), 
                  new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(_timeout)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return asyncExecuteTransaction(function, callback);
      }
  
      public Tuple6<String, byte[], Boolean, byte[], BigInteger, BigInteger> getSendUnorderedMessageV3Input(
              TransactionReceipt transactionReceipt) {
          String data = transactionReceipt.getInput().substring(10);
          final Function function = new Function(FUNC_SENDUNORDEREDMESSAGEV3, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}, new TypeReference<Bytes32>() {}, new TypeReference<Bool>() {}, new TypeReference<DynamicBytes>() {}, new TypeReference<Uint8>() {}, new TypeReference<Uint256>() {}));
          List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
          return new Tuple6<String, byte[], Boolean, byte[], BigInteger, BigInteger>(
  
                  (String) results.get(0).getValue(), 
                  (byte[]) results.get(1).getValue(), 
                  (Boolean) results.get(2).getValue(), 
                  (byte[]) results.get(3).getValue(), 
                  (BigInteger) results.get(4).getValue(), 
                  (BigInteger) results.get(5).getValue()
                  );
      }
  
      public Tuple1<byte[]> getSendUnorderedMessageV3Output(TransactionReceipt transactionReceipt) {
          String data = transactionReceipt.getOutput();
          final Function function = new Function(FUNC_SENDUNORDEREDMESSAGEV3, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Bytes32>() {}));
          List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
          return new Tuple1<byte[]>(
  
                  (byte[]) results.get(0).getValue()
                  );
      }
  
      public TransactionReceipt setAmContract(String newAmContract) {
          final Function function = new Function(
                  FUNC_SETAMCONTRACT, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(newAmContract)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return executeTransaction(function);
      }
  
      public Function getMethodSetAmContractRawFunction(String newAmContract) throws
              ContractException {
          final Function function = new Function(FUNC_SETAMCONTRACT, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(newAmContract)), 
                  Arrays.<TypeReference<?>>asList());
          return function;
      }
  
      public String getSignedTransactionForSetAmContract(String newAmContract) {
          final Function function = new Function(
                  FUNC_SETAMCONTRACT, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(newAmContract)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return createSignedTransaction(function);
      }
  
      public String setAmContract(String newAmContract, TransactionCallback callback) {
          final Function function = new Function(
                  FUNC_SETAMCONTRACT, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(newAmContract)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return asyncExecuteTransaction(function, callback);
      }
  
      public Tuple1<String> getSetAmContractInput(TransactionReceipt transactionReceipt) {
          String data = transactionReceipt.getInput().substring(10);
          final Function function = new Function(FUNC_SETAMCONTRACT, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
          List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
          return new Tuple1<String>(
  
                  (String) results.get(0).getValue()
                  );
      }
  
      public TransactionReceipt setLocalDomain(String domain) {
          final Function function = new Function(
                  FUNC_SETLOCALDOMAIN, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(domain)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return executeTransaction(function);
      }
  
      public Function getMethodSetLocalDomainRawFunction(String domain) throws ContractException {
          final Function function = new Function(FUNC_SETLOCALDOMAIN, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(domain)), 
                  Arrays.<TypeReference<?>>asList());
          return function;
      }
  
      public String getSignedTransactionForSetLocalDomain(String domain) {
          final Function function = new Function(
                  FUNC_SETLOCALDOMAIN, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(domain)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return createSignedTransaction(function);
      }
  
      public String setLocalDomain(String domain, TransactionCallback callback) {
          final Function function = new Function(
                  FUNC_SETLOCALDOMAIN, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(domain)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return asyncExecuteTransaction(function, callback);
      }
  
      public Tuple1<String> getSetLocalDomainInput(TransactionReceipt transactionReceipt) {
          String data = transactionReceipt.getInput().substring(10);
          final Function function = new Function(FUNC_SETLOCALDOMAIN, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Utf8String>() {}));
          List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
          return new Tuple1<String>(
  
                  (String) results.get(0).getValue()
                  );
      }
  
      public TransactionReceipt transferOwnership(String newOwner) {
          final Function function = new Function(
                  FUNC_TRANSFEROWNERSHIP, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(newOwner)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return executeTransaction(function);
      }
  
      public Function getMethodTransferOwnershipRawFunction(String newOwner) throws
              ContractException {
          final Function function = new Function(FUNC_TRANSFEROWNERSHIP, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(newOwner)), 
                  Arrays.<TypeReference<?>>asList());
          return function;
      }
  
      public String getSignedTransactionForTransferOwnership(String newOwner) {
          final Function function = new Function(
                  FUNC_TRANSFEROWNERSHIP, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(newOwner)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return createSignedTransaction(function);
      }
  
      public String transferOwnership(String newOwner, TransactionCallback callback) {
          final Function function = new Function(
                  FUNC_TRANSFEROWNERSHIP, 
                  Arrays.<Type>asList(new org.fisco.bcos.sdk.v3.codec.datatypes.Address(newOwner)), 
                  Collections.<TypeReference<?>>emptyList(), 0);
          return asyncExecuteTransaction(function, callback);
      }
  
      public Tuple1<String> getTransferOwnershipInput(TransactionReceipt transactionReceipt) {
          String data = transactionReceipt.getInput().substring(10);
          final Function function = new Function(FUNC_TRANSFEROWNERSHIP, 
                  Arrays.<Type>asList(), 
                  Arrays.<TypeReference<?>>asList(new TypeReference<Address>() {}));
          List<Type> results = this.functionReturnDecoder.decode(data, function.getOutputParameters());
          return new Tuple1<String>(
  
                  (String) results.get(0).getValue()
                  );
      }
  
      public static SDPMsg load(String contractAddress, Client client, CryptoKeyPair credential) {
          return new SDPMsg(contractAddress, client, credential);
      }
  
      public static SDPMsg deploy(Client client, CryptoKeyPair credential) throws ContractException {
          return deploy(SDPMsg.class, client, credential, getBinary(client.getCryptoSuite()), getABI(), null, null);
      }
  
      public static class BlockState extends DynamicStruct {
          public BigInteger version;
  
          public String domain;
  
          public byte[] blockHash;
  
          public BigInteger blockHeight;
  
          public BigInteger blockTimestamp;
  
          public BlockState(Uint16 version, Utf8String domain, Bytes32 blockHash, Uint256 blockHeight,
                  Uint64 blockTimestamp) {
              super(version,domain,blockHash,blockHeight,blockTimestamp);
              this.version = version.getValue();
              this.domain = domain.getValue();
              this.blockHash = blockHash.getValue();
              this.blockHeight = blockHeight.getValue();
              this.blockTimestamp = blockTimestamp.getValue();
          }
  
          public BlockState(BigInteger version, String domain, byte[] blockHash,
                  BigInteger blockHeight, BigInteger blockTimestamp) {
              super(new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint16(version),new org.fisco.bcos.sdk.v3.codec.datatypes.Utf8String(domain),new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Bytes32(blockHash),new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint256(blockHeight),new org.fisco.bcos.sdk.v3.codec.datatypes.generated.Uint64(blockTimestamp));
              this.version = version;
              this.domain = domain;
              this.blockHash = blockHash;
              this.blockHeight = blockHeight;
              this.blockTimestamp = blockTimestamp;
          }
      }
  
      public static class InitializedEventResponse {
          public TransactionReceipt.Logs log;
  
          public BigInteger version;
      }
  
      public static class MessageV3TimeoutInfoEventResponse {
          public TransactionReceipt.Logs log;
  
          public byte[] messageId;
  
          public BigInteger timeoutMeasure;
  
          public BigInteger timeout;
      }
  
      public static class OwnershipTransferredEventResponse {
          public TransactionReceipt.Logs log;
  
          public String previousOwner;
  
          public String newOwner;
      }
  
      public static class ReceiveMessageV2EventResponse {
          public TransactionReceipt.Logs log;
  
          public byte[] messageId;
  
          public String senderDomain;
  
          public byte[] senderID;
  
          public String receiverDomain;
  
          public String receiverID;
  
          public BigInteger sequence;
  
          public BigInteger nonce;
  
          public BigInteger atomicFlag;
  
          public Boolean result;
  
          public String errMsg;
      }
  
      public static class ReceiveMessageV3EventResponse {
          public TransactionReceipt.Logs log;
  
          public byte[] messageId;
  
          public String senderDomain;
  
          public byte[] senderID;
  
          public String receiverDomain;
  
          public String receiverID;
  
          public BigInteger sequence;
  
          public BigInteger nonce;
  
          public BigInteger atomicFlag;
  
          public Boolean result;
  
          public String errMsg;
      }
  
      public static class ReceiveMessageEventResponse {
          public TransactionReceipt.Logs log;
  
          public String senderDomain;
  
          public byte[] senderID;
  
          public String receiverID;
  
          public BigInteger sequence;
  
          public Boolean result;
  
          public String errMsg;
      }
  }
  