diff --git a/contracts/prototypes/zevm/GatewayZEVM.sol b/contracts/prototypes/zevm/GatewayZEVM.sol index 274b440e..6b8f872b 100644 --- a/contracts/prototypes/zevm/GatewayZEVM.sol +++ b/contracts/prototypes/zevm/GatewayZEVM.sol @@ -7,25 +7,29 @@ import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; import "../../zevm/interfaces/IZRC20.sol"; import "../../zevm/interfaces/zContract.sol"; import "./interfaces.sol"; +import "../../zevm/interfaces/IWZETA.sol"; + // The GatewayZEVM contract is the endpoint to call smart contracts on omnichain // The contract doesn't hold any funds and should never have active allowances contract GatewayZEVM is IGatewayZEVMEvents, IGatewayZEVMErrors, Initializable, OwnableUpgradeable, UUPSUpgradeable { address public constant FUNGIBLE_MODULE_ADDRESS = 0x735b14BB79463307AAcBED86DAf3322B1e6226aB; + address public wzeta; /// @custom:oz-upgrades-unsafe-allow constructor constructor() { _disableInitializers(); } - function initialize() public initializer { + function initialize(address _wzeta) public initializer { __Ownable_init(); __UUPSUpgradeable_init(); + wzeta = wzeta; } function _authorizeUpgrade(address newImplementation) internal override onlyOwner() {} - function _withdraw(uint256 amount, address zrc20) internal returns (uint256) { + function _withdrawZRC20(uint256 amount, address zrc20) internal returns (uint256) { (address gasZRC20, uint256 gasFee) = IZRC20(zrc20).withdrawGasFee(); if (!IZRC20(gasZRC20).transferFrom(msg.sender, FUNGIBLE_MODULE_ADDRESS, gasFee)) { revert GasFeeTransferFailed(); @@ -40,16 +44,35 @@ contract GatewayZEVM is IGatewayZEVMEvents, IGatewayZEVMErrors, Initializable, O return gasFee; } + function _withdrawZETA(uint256 amount) internal { + if (!IWETH9(wzeta).transferFrom(msg.sender, address(this), amount)) revert WZETATransferFailed(); + IWETH9(wzeta).withdraw(amount); + (bool sent, ) = FUNGIBLE_MODULE_ADDRESS.call{value: amount}(""); + if (!sent) revert FailedZetaSent(); + } + // Withdraw ZRC20 tokens to external chain function withdraw(bytes memory receiver, uint256 amount, address zrc20) external { - uint256 gasFee = _withdraw(amount, zrc20); - emit Withdrawal(msg.sender, receiver, amount, gasFee, IZRC20(zrc20).PROTOCOL_FLAT_FEE(), ""); + uint256 gasFee = _withdrawZRC20(amount, zrc20); + emit Withdrawal(msg.sender, zrc20, receiver, amount, gasFee, IZRC20(zrc20).PROTOCOL_FLAT_FEE(), ""); } // Withdraw ZRC20 tokens and call smart contract on external chain function withdrawAndCall(bytes memory receiver, uint256 amount, address zrc20, bytes calldata message) external { - uint256 gasFee = _withdraw(amount, zrc20); - emit Withdrawal(msg.sender, receiver, amount, gasFee, IZRC20(zrc20).PROTOCOL_FLAT_FEE(), message); + uint256 gasFee = _withdrawZRC20(amount, zrc20); + emit Withdrawal(msg.sender, zrc20, receiver, amount, gasFee, IZRC20(zrc20).PROTOCOL_FLAT_FEE(), message); + } + + // Withdraw ZETA to external chain + function withdraw(uint256 amount) external { + _withdrawZETA(amount); + emit Withdrawal(msg.sender, address(0), abi.encodePacked(FUNGIBLE_MODULE_ADDRESS), amount, 0, 0, ""); + } + + // Withdraw ZETA and call smart contract on external chain + function withdrawAndCall(uint256 amount, bytes calldata message) external { + _withdrawZETA(amount); + emit Withdrawal(msg.sender, address(0), abi.encodePacked(FUNGIBLE_MODULE_ADDRESS), amount, 0, 0, message); } // Call smart contract on external chain without asset transfer diff --git a/contracts/prototypes/zevm/interfaces.sol b/contracts/prototypes/zevm/interfaces.sol index bc4be8aa..fda7bcae 100644 --- a/contracts/prototypes/zevm/interfaces.sol +++ b/contracts/prototypes/zevm/interfaces.sol @@ -35,7 +35,7 @@ interface IGatewayZEVM { interface IGatewayZEVMEvents { event Call(address indexed sender, bytes receiver, bytes message); - event Withdrawal(address indexed from, bytes to, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message); + event Withdrawal(address indexed from, address zrc20, bytes to, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message); } interface IGatewayZEVMErrors { @@ -46,4 +46,6 @@ interface IGatewayZEVMErrors { error GasFeeTransferFailed(); error CallerIsNotFungibleModule(); error InvalidTarget(); + error WZETATransferFailed(); + error FailedZetaSent(); } \ No newline at end of file diff --git a/foundry.toml b/foundry.toml index 9f6482d0..5c1df4c3 100644 --- a/foundry.toml +++ b/foundry.toml @@ -4,4 +4,5 @@ out = 'out' libs = ['node_modules', 'lib'] test = 'test' cache_path = 'cache_forge' -no-match-contract = '.*EchidnaTest$' \ No newline at end of file +no-match-contract = '.*EchidnaTest$' +auto_detect_solc = true \ No newline at end of file diff --git a/pkg/contracts/prototypes/test/gatewayevmzevm.t.sol/gatewayevmzevmtest.go b/pkg/contracts/prototypes/test/gatewayevmzevm.t.sol/gatewayevmzevmtest.go index 72455345..a5e7dd0e 100644 --- a/pkg/contracts/prototypes/test/gatewayevmzevm.t.sol/gatewayevmzevmtest.go +++ b/pkg/contracts/prototypes/test/gatewayevmzevm.t.sol/gatewayevmzevmtest.go @@ -49,8 +49,8 @@ type StdInvariantFuzzSelector struct { // GatewayEVMZEVMTestMetaData contains all meta data concerning the GatewayEVMZEVMTest contract. var GatewayEVMZEVMTestMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"ApprovalFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerIsNotFungibleModule\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CustodyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DepositFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExecutionFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasFeeTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientERC20Amount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientETHAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientZRC20Amount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTarget\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WithdrawalFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20BurnFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"Call\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"Call\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Executed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ExecutedWithERC20\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"ReceivedERC20\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ReceivedNoParams\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string[]\",\"name\":\"strs\",\"type\":\"string[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"nums\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"name\":\"ReceivedNonPayable\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"num\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"name\":\"ReceivedPayable\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"to\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasfee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolFlatFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testCallReceiverEVMFromZEVM\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60806040526001600c60006101000a81548160ff0219169083151502179055506001601f60006101000a81548160ff02191690831515021790555034801561004657600080fd5b5062012d6280620000586000396000f3fe60806040523480156200001157600080fd5b5060043610620001005760003560e01c8063916a17c61162000099578063b5508aa9116200006f578063b5508aa9146200022d578063ba414fa6146200024f578063e20c9f711462000271578063fa7626d414620002935762000100565b8063916a17c614620001dd5780639683c69514620001ff578063b0464fdc146200020b5762000100565b80633e5e3c2311620000db5780633e5e3c2314620001555780633f7286f4146200017757806366d9a9a0146200019957806385226c8114620001bb5762000100565b80630a9254e414620001055780631ed7831c14620001115780632ade38801462000133575b600080fd5b6200010f620002b5565b005b6200011b6200135c565b6040516200012a919062002fcc565b60405180910390f35b6200013d620013ec565b6040516200014c919062003038565b60405180910390f35b6200015f62001586565b6040516200016e919062002fcc565b60405180910390f35b6200018162001616565b60405162000190919062002fcc565b60405180910390f35b620001a3620016a6565b604051620001b2919062003014565b60405180910390f35b620001c56200183d565b604051620001d4919062002ff0565b60405180910390f35b620001e762001920565b604051620001f691906200305c565b60405180910390f35b6200020962001a73565b005b6200021562002112565b6040516200022491906200305c565b60405180910390f35b6200023762002265565b60405162000246919062002ff0565b60405180910390f35b6200025962002348565b60405162000268919062003080565b60405180910390f35b6200027b6200247b565b6040516200028a919062002fcc565b60405180910390f35b6200029d6200250b565b604051620002ac919062003080565b60405180910390f35b30602560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611234602660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550615678602760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614321602c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051620003cd906200251e565b620003d890620032a2565b604051809103906000f080158015620003f5573d6000803e3d6000fd5b50602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405162000444906200251e565b6200044f90620031d3565b604051809103906000f0801580156200046c573d6000803e3d6000fd5b50602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051620004bb906200252c565b604051809103906000f080158015620004d8573d6000803e3d6000fd5b50601f60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516200054a906200253a565b62000556919062002e5d565b604051809103906000f08015801562000573573d6000803e3d6000fd5b50602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051620006089062002548565b6200061592919062002e7a565b604051809103906000f08015801562000632573d6000803e3d6000fd5b50602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663485cc955602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016200071692919062002e7a565b600060405180830381600087803b1580156200073157600080fd5b505af115801562000746573d6000803e3d6000fd5b50505050601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516200077b906200253a565b62000787919062002e5d565b604051809103906000f080158015620007a4573d6000803e3d6000fd5b50602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae7a3a6f602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040162000864919062002e5d565b600060405180830381600087803b1580156200087f57600080fd5b505af115801562000894573d6000803e3d6000fd5b50505050601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166310188aef602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040162000917919062002e5d565b600060405180830381600087803b1580156200093257600080fd5b505af115801562000947573d6000803e3d6000fd5b50505050602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620f42406040518363ffffffff1660e01b8152600401620009cf92919062002f45565b600060405180830381600087803b158015620009ea57600080fd5b505af1158015620009ff573d6000803e3d6000fd5b50505050602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166207a1206040518363ffffffff1660e01b815260040162000a8792919062002f72565b602060405180830381600087803b15801562000aa257600080fd5b505af115801562000ab7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000add919062002648565b5060405162000aec9062002556565b604051809103906000f08015801562000b09573d6000803e3d6000fd5b50602460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405162000b589062002564565b604051809103906000f08015801562000b75573d6000803e3d6000fd5b50602860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405162000be79062002572565b62000bf3919062002e5d565b604051809103906000f08015801562000c10573d6000803e3d6000fd5b50602960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073735b14bb79463307aacbed86daf3322b1e6226ab90507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff166306447d56826040518263ffffffff1660e01b815260040162000cc8919062002e5d565b600060405180830381600087803b15801562000ce357600080fd5b505af115801562000cf8573d6000803e3d6000fd5b50505050600080600060405162000d0f9062002580565b62000d1d9392919062002ea7565b604051809103906000f08015801562000d3a573d6000803e3d6000fd5b50602a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060126001600080602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405162000dd6906200258e565b62000de7969594939291906200320a565b604051809103906000f08015801562000e04573d6000803e3d6000fd5b50602b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ee2815ba6001602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b815260040162000ec792919062003135565b600060405180830381600087803b15801562000ee257600080fd5b505af115801562000ef7573d6000803e3d6000fd5b50505050602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a7cb05076001806040518363ffffffff1660e01b815260040162000f5b92919062003162565b600060405180830381600087803b15801562000f7657600080fd5b505af115801562000f8b573d6000803e3d6000fd5b50505050602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166347e7ef24602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620f42406040518363ffffffff1660e01b81526004016200101392919062002f45565b602060405180830381600087803b1580156200102e57600080fd5b505af115801562001043573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001069919062002648565b50602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166347e7ef24602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620f42406040518363ffffffff1660e01b8152600401620010ee92919062002f45565b602060405180830381600087803b1580156200110957600080fd5b505af11580156200111e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001144919062002648565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620011b157600080fd5b505af1158015620011c6573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff1663ca669fa7602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016200124a919062002e5d565b600060405180830381600087803b1580156200126557600080fd5b505af11580156200127a573d6000803e3d6000fd5b50505050602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620f42406040518363ffffffff1660e01b81526004016200130292919062002f45565b602060405180830381600087803b1580156200131d57600080fd5b505af115801562001332573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001358919062002648565b5050565b60606016805480602002602001604051908101604052809291908181526020018280548015620013e257602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831162001397575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156200157d57838290600052602060002090600202016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201805480602002602001604051908101604052809291908181526020016000905b8282101562001565578382906000526020600020018054620014d190620036a8565b80601f0160208091040260200160405190810160405280929190818152602001828054620014ff90620036a8565b8015620015505780601f10620015245761010080835404028352916020019162001550565b820191906000526020600020905b8154815290600101906020018083116200153257829003601f168201915b505050505081526020019060010190620014af565b50505050815250508152602001906001019062001410565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156200160c57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311620015c1575b5050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156200169c57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831162001651575b5050505050905090565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156200183457838290600052602060002090600202016040518060400160405290816000820180546200170090620036a8565b80601f01602080910402602001604051908101604052809291908181526020018280546200172e90620036a8565b80156200177f5780601f1062001753576101008083540402835291602001916200177f565b820191906000526020600020905b8154815290600101906020018083116200176157829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156200181b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411620017c75790505b50505050508152505081526020019060010190620016ca565b50505050905090565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015620019175783829060005260206000200180546200188390620036a8565b80601f0160208091040260200160405190810160405280929190818152602001828054620018b190620036a8565b8015620019025780601f10620018d65761010080835404028352916020019162001902565b820191906000526020600020905b815481529060010190602001808311620018e457829003601f168201915b50505050508152602001906001019062001861565b50505050905090565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101562001a6a57838290600052602060002090600202016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820180548060200260200160405190810160405280929190818152602001828054801562001a5157602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411620019fd5790505b5050505050815250508152602001906001019062001944565b50505050905090565b60006040518060400160405280600f81526020017f48656c6c6f2c204861726468617421000000000000000000000000000000000081525090506000602a90506000600190506000670de0b6b3a76400009050600063e04d4f9760e01b85858560405160240162001ae7939291906200318f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff1663ca669fa7602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040162001bc6919062002e5d565b600060405180830381600087803b15801562001be157600080fd5b505af115801562001bf6573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff166381bad6f3600180600180602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518663ffffffff1660e01b815260040162001c849594939291906200309d565b600060405180830381600087803b15801562001c9f57600080fd5b505af115801562001cb4573d6000803e3d6000fd5b50505050602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f2b5af078ce280d812dc2241658dc5435c93408020e5418eef55a2b536de51c0f602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405160200162001d47919062002e40565b6040516020818303038152906040528360405162001d67929190620030fa565b60405180910390a2602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ac7c44c602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405160200162001de2919062002e40565b604051602081830303815290604052836040518363ffffffff1660e01b815260040162001e11929190620030fa565b600060405180830381600087803b15801562001e2c57600080fd5b505af115801562001e41573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff1663c88a5e6d601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b815260040162001ec792919062002f9f565b600060405180830381600087803b15801562001ee257600080fd5b505af115801562001ef7573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff166381bad6f3600180600180601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518663ffffffff1660e01b815260040162001f859594939291906200309d565b600060405180830381600087803b15801562001fa057600080fd5b505af115801562001fb5573d6000803e3d6000fd5b50505050602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f838360405162002025929190620032d9565b60405180910390a2601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631cff79cd83602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401620020af92919062002f11565b6000604051808303818588803b158015620020c957600080fd5b505af1158015620020de573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f820116820180604052508101906200210a9190620026ac565b505050505050565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156200225c57838290600052602060002090600202016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182018054806020026020016040519081016040528092919081815260200182805480156200224357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411620021ef5790505b5050505050815250508152602001906001019062002136565b50505050905090565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156200233f578382906000526020600020018054620022ab90620036a8565b80601f0160208091040260200160405190810160405280929190818152602001828054620022d990620036a8565b80156200232a5780601f10620022fe576101008083540402835291602001916200232a565b820191906000526020600020905b8154815290600101906020018083116200230c57829003601f168201915b50505050508152602001906001019062002289565b50505050905090565b6000600860009054906101000a900460ff16156200237857600860009054906101000a900460ff16905062002478565b6000801b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff1663667f9d707f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c7f6661696c656400000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b81526004016200241f92919062002ee4565b60206040518083038186803b1580156200243857600080fd5b505afa1580156200244d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200247391906200267a565b141590505b90565b606060158054806020026020016040519081016040528092919081815260200182805480156200250157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311620024b6575b5050505050905090565b601f60009054906101000a900460ff1681565b611813806200393d83390190565b613564806200515083390190565b61109080620086b483390190565b6111b9806200974483390190565b6110aa806200a8fd83390190565b612eb5806200b9a783390190565b610bcd806200e85c83390190565b6110d7806200f42983390190565b61282d806201050083390190565b6000620025b3620025ad8462003336565b6200330d565b905082815260208101848484011115620025d257620025d1620037ce565b5b620025df84828562003672565b509392505050565b600081519050620025f88162003908565b92915050565b6000815190506200260f8162003922565b92915050565b600082601f8301126200262d576200262c620037c9565b5b81516200263f8482602086016200259c565b91505092915050565b600060208284031215620026615762002660620037d8565b5b60006200267184828501620025e7565b91505092915050565b600060208284031215620026935762002692620037d8565b5b6000620026a384828501620025fe565b91505092915050565b600060208284031215620026c557620026c4620037d8565b5b600082015167ffffffffffffffff811115620026e657620026e5620037d3565b5b620026f48482850162002615565b91505092915050565b60006200270b838362002789565b60208301905092915050565b600062002725838362002b26565b60208301905092915050565b60006200273f838362002bf9565b905092915050565b600062002755838362002d65565b905092915050565b60006200276b838362002dad565b905092915050565b600062002781838362002dee565b905092915050565b62002794816200351c565b82525050565b620027a5816200351c565b82525050565b6000620027b882620033cc565b620027c4818562003472565b9350620027d1836200336c565b8060005b8381101562002808578151620027ec8882620026fd565b9750620027f98362003424565b925050600181019050620027d5565b5085935050505092915050565b60006200282282620033d7565b6200282e818562003483565b93506200283b836200337c565b8060005b838110156200287257815162002856888262002717565b9750620028638362003431565b9250506001810190506200283f565b5085935050505092915050565b60006200288c82620033e2565b62002898818562003494565b935083602082028501620028ac856200338c565b8060005b85811015620028ee5784840389528151620028cc858262002731565b9450620028d9836200343e565b925060208a01995050600181019050620028b0565b50829750879550505050505092915050565b60006200290d82620033e2565b620029198185620034a5565b9350836020820285016200292d856200338c565b8060005b858110156200296f57848403895281516200294d858262002731565b94506200295a836200343e565b925060208a0199505060018101905062002931565b50829750879550505050505092915050565b60006200298e82620033ed565b6200299a8185620034b6565b935083602082028501620029ae856200339c565b8060005b85811015620029f05784840389528151620029ce858262002747565b9450620029db836200344b565b925060208a01995050600181019050620029b2565b50829750879550505050505092915050565b600062002a0f82620033f8565b62002a1b8185620034c7565b93508360208202850162002a2f85620033ac565b8060005b8581101562002a71578484038952815162002a4f85826200275d565b945062002a5c8362003458565b925060208a0199505060018101905062002a33565b50829750879550505050505092915050565b600062002a908262003403565b62002a9c8185620034d8565b93508360208202850162002ab085620033bc565b8060005b8581101562002af2578484038952815162002ad0858262002773565b945062002add8362003465565b925060208a0199505060018101905062002ab4565b50829750879550505050505092915050565b62002b0f8162003530565b82525050565b62002b20816200353c565b82525050565b62002b318162003546565b82525050565b600062002b44826200340e565b62002b508185620034e9565b935062002b6281856020860162003672565b62002b6d81620037dd565b840191505092915050565b62002b8d62002b8782620035be565b62003714565b82525050565b62002b9e81620035d2565b82525050565b62002baf81620035e6565b82525050565b62002bc081620035fa565b82525050565b62002bd1816200360e565b82525050565b62002be28162003622565b82525050565b62002bf38162003636565b82525050565b600062002c068262003419565b62002c128185620034fa565b935062002c2481856020860162003672565b62002c2f81620037dd565b840191505092915050565b600062002c478262003419565b62002c5381856200350b565b935062002c6581856020860162003672565b62002c7081620037dd565b840191505092915050565b600062002c8a6003836200350b565b915062002c9782620037fb565b602082019050919050565b600062002cb16004836200350b565b915062002cbe8262003824565b602082019050919050565b600062002cd86004836200350b565b915062002ce5826200384d565b602082019050919050565b600062002cff6005836200350b565b915062002d0c8262003876565b602082019050919050565b600062002d266004836200350b565b915062002d33826200389f565b602082019050919050565b600062002d4d6003836200350b565b915062002d5a82620038c8565b602082019050919050565b6000604083016000830151848203600086015262002d84828262002bf9565b9150506020830151848203602086015262002da0828262002815565b9150508091505092915050565b600060408301600083015162002dc7600086018262002789565b506020830151848203602086015262002de182826200287f565b9150508091505092915050565b600060408301600083015162002e08600086018262002789565b506020830151848203602086015262002e22828262002815565b9150508091505092915050565b62002e3a81620035a7565b82525050565b600062002e4e828462002b78565b60148201915081905092915050565b600060208201905062002e7460008301846200279a565b92915050565b600060408201905062002e9160008301856200279a565b62002ea060208301846200279a565b9392505050565b600060608201905062002ebe60008301866200279a565b62002ecd60208301856200279a565b62002edc60408301846200279a565b949350505050565b600060408201905062002efb60008301856200279a565b62002f0a602083018462002b15565b9392505050565b600060408201905062002f2860008301856200279a565b818103602083015262002f3c818462002b37565b90509392505050565b600060408201905062002f5c60008301856200279a565b62002f6b602083018462002bb5565b9392505050565b600060408201905062002f8960008301856200279a565b62002f98602083018462002be8565b9392505050565b600060408201905062002fb660008301856200279a565b62002fc5602083018462002e2f565b9392505050565b6000602082019050818103600083015262002fe88184620027ab565b905092915050565b600060208201905081810360008301526200300c818462002900565b905092915050565b6000602082019050818103600083015262003030818462002981565b905092915050565b6000602082019050818103600083015262003054818462002a02565b905092915050565b6000602082019050818103600083015262003078818462002a83565b905092915050565b600060208201905062003097600083018462002b04565b92915050565b600060a082019050620030b4600083018862002b04565b620030c3602083018762002b04565b620030d2604083018662002b04565b620030e1606083018562002b04565b620030f060808301846200279a565b9695505050505050565b6000604082019050818103600083015262003116818562002b37565b905081810360208301526200312c818462002b37565b90509392505050565b60006040820190506200314c600083018562002bd7565b6200315b60208301846200279a565b9392505050565b600060408201905062003179600083018562002bd7565b62003188602083018462002bd7565b9392505050565b60006060820190508181036000830152620031ab818662002c3a565b9050620031bc602083018562002e2f565b620031cb604083018462002b04565b949350505050565b60006040820190508181036000830152620031ee8162002ca2565b90508181036020830152620032038162002cc9565b9050919050565b6000610100820190508181036000830152620032268162002cf0565b905081810360208301526200323b8162002d3e565b90506200324c604083018962002bc6565b6200325b606083018862002bd7565b6200326a608083018762002b93565b6200327960a083018662002ba4565b6200328860c08301856200279a565b6200329760e08301846200279a565b979650505050505050565b60006040820190508181036000830152620032bd8162002d17565b90508181036020830152620032d28162002c7b565b9050919050565b6000604082019050620032f0600083018562002e2f565b818103602083015262003304818462002b37565b90509392505050565b6000620033196200332c565b9050620033278282620036de565b919050565b6000604051905090565b600067ffffffffffffffff8211156200335457620033536200379a565b5b6200335f82620037dd565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000620035298262003587565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60008190506200358282620038f1565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000620035cb826200364a565b9050919050565b6000620035df8262003572565b9050919050565b6000620035f382620035a7565b9050919050565b60006200360782620035a7565b9050919050565b60006200361b82620035b1565b9050919050565b60006200362f82620035a7565b9050919050565b60006200364382620035a7565b9050919050565b600062003657826200365e565b9050919050565b60006200366b8262003587565b9050919050565b60005b838110156200369257808201518184015260208101905062003675565b83811115620036a2576000848401525b50505050565b60006002820490506001821680620036c157607f821691505b60208210811415620036d857620036d76200376b565b5b50919050565b620036e982620037dd565b810181811067ffffffffffffffff821117156200370b576200370a6200379a565b5b80604052505050565b6000620037218262003728565b9050919050565b60006200373582620037ee565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f54544b0000000000000000000000000000000000000000000000000000000000600082015250565b7f7a65746100000000000000000000000000000000000000000000000000000000600082015250565b7f5a45544100000000000000000000000000000000000000000000000000000000600082015250565b7f544f4b454e000000000000000000000000000000000000000000000000000000600082015250565b7f7465737400000000000000000000000000000000000000000000000000000000600082015250565b7f544b4e0000000000000000000000000000000000000000000000000000000000600082015250565b600381106200390557620039046200373c565b5b50565b620039138162003530565b81146200391f57600080fd5b50565b6200392d816200353c565b81146200393957600080fd5b5056fe60806040523480156200001157600080fd5b5060405162001813380380620018138339818101604052810190620000379190620001a3565b818181600390805190602001906200005192919062000075565b5080600490805190602001906200006a92919062000075565b5050505050620003ac565b8280546200008390620002bd565b90600052602060002090601f016020900481019282620000a75760008555620000f3565b82601f10620000c257805160ff1916838001178555620000f3565b82800160010185558215620000f3579182015b82811115620000f2578251825591602001919060010190620000d5565b5b50905062000102919062000106565b5090565b5b808211156200012157600081600090555060010162000107565b5090565b60006200013c620001368462000251565b62000228565b9050828152602081018484840111156200015b576200015a6200038c565b5b6200016884828562000287565b509392505050565b600082601f83011262000188576200018762000387565b5b81516200019a84826020860162000125565b91505092915050565b60008060408385031215620001bd57620001bc62000396565b5b600083015167ffffffffffffffff811115620001de57620001dd62000391565b5b620001ec8582860162000170565b925050602083015167ffffffffffffffff81111562000210576200020f62000391565b5b6200021e8582860162000170565b9150509250929050565b60006200023462000247565b9050620002428282620002f3565b919050565b6000604051905090565b600067ffffffffffffffff8211156200026f576200026e62000358565b5b6200027a826200039b565b9050602081019050919050565b60005b83811015620002a75780820151818401526020810190506200028a565b83811115620002b7576000848401525b50505050565b60006002820490506001821680620002d657607f821691505b60208210811415620002ed57620002ec62000329565b5b50919050565b620002fe826200039b565b810181811067ffffffffffffffff8211171562000320576200031f62000358565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b61145780620003bc6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806340c10f191161007157806340c10f19146101a357806370a08231146101bf57806395d89b41146101ef578063a457c2d71461020d578063a9059cbb1461023d578063dd62ed3e1461026d576100b4565b806306fdde03146100b9578063095ea7b3146100d757806318160ddd1461010757806323b872dd14610125578063313ce567146101555780633950935114610173575b600080fd5b6100c161029d565b6040516100ce9190610ecf565b60405180910390f35b6100f160048036038101906100ec9190610cf6565b61032f565b6040516100fe9190610eb4565b60405180910390f35b61010f610352565b60405161011c9190610ff1565b60405180910390f35b61013f600480360381019061013a9190610ca3565b61035c565b60405161014c9190610eb4565b60405180910390f35b61015d61038b565b60405161016a919061100c565b60405180910390f35b61018d60048036038101906101889190610cf6565b610394565b60405161019a9190610eb4565b60405180910390f35b6101bd60048036038101906101b89190610cf6565b6103cb565b005b6101d960048036038101906101d49190610c36565b6103d9565b6040516101e69190610ff1565b60405180910390f35b6101f7610421565b6040516102049190610ecf565b60405180910390f35b61022760048036038101906102229190610cf6565b6104b3565b6040516102349190610eb4565b60405180910390f35b61025760048036038101906102529190610cf6565b61052a565b6040516102649190610eb4565b60405180910390f35b61028760048036038101906102829190610c63565b61054d565b6040516102949190610ff1565b60405180910390f35b6060600380546102ac90611121565b80601f01602080910402602001604051908101604052809291908181526020018280546102d890611121565b80156103255780601f106102fa57610100808354040283529160200191610325565b820191906000526020600020905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b60008061033a6105d4565b90506103478185856105dc565b600191505092915050565b6000600254905090565b6000806103676105d4565b90506103748582856107a7565b61037f858585610833565b60019150509392505050565b60006012905090565b60008061039f6105d4565b90506103c08185856103b1858961054d565b6103bb9190611043565b6105dc565b600191505092915050565b6103d58282610aab565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461043090611121565b80601f016020809104026020016040519081016040528092919081815260200182805461045c90611121565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b5050505050905090565b6000806104be6105d4565b905060006104cc828661054d565b905083811015610511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050890610fb1565b60405180910390fd5b61051e82868684036105dc565b60019250505092915050565b6000806105356105d4565b9050610542818585610833565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561064c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064390610f91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156106bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b390610f11565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161079a9190610ff1565b60405180910390a3505050565b60006107b3848461054d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461082d578181101561081f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081690610f31565b60405180910390fd5b61082c84848484036105dc565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089a90610f71565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090a90610ef1565b60405180910390fd5b61091e838383610c02565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156109a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099b90610f51565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a929190610ff1565b60405180910390a3610aa5848484610c07565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1290610fd1565b60405180910390fd5b610b2760008383610c02565b8060026000828254610b399190611043565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610bea9190610ff1565b60405180910390a3610bfe60008383610c07565b5050565b505050565b505050565b600081359050610c1b816113f3565b92915050565b600081359050610c308161140a565b92915050565b600060208284031215610c4c57610c4b6111b1565b5b6000610c5a84828501610c0c565b91505092915050565b60008060408385031215610c7a57610c796111b1565b5b6000610c8885828601610c0c565b9250506020610c9985828601610c0c565b9150509250929050565b600080600060608486031215610cbc57610cbb6111b1565b5b6000610cca86828701610c0c565b9350506020610cdb86828701610c0c565b9250506040610cec86828701610c21565b9150509250925092565b60008060408385031215610d0d57610d0c6111b1565b5b6000610d1b85828601610c0c565b9250506020610d2c85828601610c21565b9150509250929050565b610d3f816110ab565b82525050565b6000610d5082611027565b610d5a8185611032565b9350610d6a8185602086016110ee565b610d73816111b6565b840191505092915050565b6000610d8b602383611032565b9150610d96826111c7565b604082019050919050565b6000610dae602283611032565b9150610db982611216565b604082019050919050565b6000610dd1601d83611032565b9150610ddc82611265565b602082019050919050565b6000610df4602683611032565b9150610dff8261128e565b604082019050919050565b6000610e17602583611032565b9150610e22826112dd565b604082019050919050565b6000610e3a602483611032565b9150610e458261132c565b604082019050919050565b6000610e5d602583611032565b9150610e688261137b565b604082019050919050565b6000610e80601f83611032565b9150610e8b826113ca565b602082019050919050565b610e9f816110d7565b82525050565b610eae816110e1565b82525050565b6000602082019050610ec96000830184610d36565b92915050565b60006020820190508181036000830152610ee98184610d45565b905092915050565b60006020820190508181036000830152610f0a81610d7e565b9050919050565b60006020820190508181036000830152610f2a81610da1565b9050919050565b60006020820190508181036000830152610f4a81610dc4565b9050919050565b60006020820190508181036000830152610f6a81610de7565b9050919050565b60006020820190508181036000830152610f8a81610e0a565b9050919050565b60006020820190508181036000830152610faa81610e2d565b9050919050565b60006020820190508181036000830152610fca81610e50565b9050919050565b60006020820190508181036000830152610fea81610e73565b9050919050565b60006020820190506110066000830184610e96565b92915050565b60006020820190506110216000830184610ea5565b92915050565b600081519050919050565b600082825260208201905092915050565b600061104e826110d7565b9150611059836110d7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561108e5761108d611153565b5b828201905092915050565b60006110a4826110b7565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561110c5780820151818401526020810190506110f1565b8381111561111b576000848401525b50505050565b6000600282049050600182168061113957607f821691505b6020821081141561114d5761114c611182565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6113fc81611099565b811461140757600080fd5b50565b611413816110d7565b811461141e57600080fd5b5056fea2646970667358221220d4c96329400732e284f624232c8d7228fc90c00ee7b1a48a85080262107815d864736f6c6343000807003360a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b81525034801561004657600080fd5b5060805160601c6134e361008160003960008181610768015281816107f701528181610b2201528181610bb10152610fcd01526134e36000f3fe60806040526004361061011f5760003560e01c80635b112591116100a0578063dda79b7511610064578063dda79b7514610382578063f2fde38b146103ad578063f31e62bf146103d6578063f340fa0114610401578063f45346dc1461041d5761011f565b80635b112591146102c3578063715018a6146102ee5780638c6f037f146103055780638da5cb5b1461032e578063ae7a3a6f146103595761011f565b8063485cc955116100e7578063485cc955146101eb5780634f1ef286146102145780635131ab591461023057806352d1902d1461026d57806357bec62f146102985761011f565b806310188aef146101245780631b8b921d1461014d5780631cff79cd1461017657806329c59b5d146101a65780633659cfe6146101c2575b600080fd5b34801561013057600080fd5b5061014b6004803603810190610146919061244e565b610446565b005b34801561015957600080fd5b50610174600480360381019061016f9190612543565b610512565b005b610190600480360381019061018b9190612543565b61057e565b60405161019d9190612bd6565b60405180910390f35b6101c060048036038101906101bb9190612543565b6105ec565b005b3480156101ce57600080fd5b506101e960048036038101906101e4919061244e565b610766565b005b3480156101f757600080fd5b50610212600480360381019061020d919061247b565b6108ef565b005b61022e600480360381019061022991906125a3565b610b20565b005b34801561023c57600080fd5b50610257600480360381019061025291906124bb565b610c5d565b6040516102649190612bd6565b60405180910390f35b34801561027957600080fd5b50610282610fc9565b60405161028f9190612b97565b60405180910390f35b3480156102a457600080fd5b506102ad611082565b6040516102ba9190612af3565b60405180910390f35b3480156102cf57600080fd5b506102d86110a8565b6040516102e59190612af3565b60405180910390f35b3480156102fa57600080fd5b506103036110ce565b005b34801561031157600080fd5b5061032c60048036038101906103279190612652565b6110e2565b005b34801561033a57600080fd5b50610343611260565b6040516103509190612af3565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b919061244e565b61128a565b005b34801561038e57600080fd5b50610397611356565b6040516103a49190612af3565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf919061244e565b61137c565b005b3480156103e257600080fd5b506103eb611400565b6040516103f89190612af3565b60405180910390f35b61041b6004803603810190610416919061244e565b611426565b005b34801561042957600080fd5b50610444600480360381019061043f91906125ff565b61159a565b005b600073ffffffffffffffffffffffffffffffffffffffff1660cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146104ce576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060cb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610571929190612bb2565b60405180910390a3505050565b6060600061058d858585611712565b90508473ffffffffffffffffffffffffffffffffffffffff167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f3486866040516105d993929190612e51565b60405180910390a2809150509392505050565b6000341415610627576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163460405161066f90612ade565b60006040518083038185875af1925050503d80600081146106ac576040519150601f19603f3d011682016040523d82523d6000602084013e6106b1565b606091505b505090506000151581151514156106f4576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a434600087876040516107589493929190612dd5565b60405180910390a350505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614156107f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ec90612c55565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108346117c9565b73ffffffffffffffffffffffffffffffffffffffff161461088a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088190612c75565b60405180910390fd5b61089381611820565b6108ec81600067ffffffffffffffff8111156108b2576108b1613012565b5b6040519080825280601f01601f1916602001820160405280156108e45781602001600182028036833780820191505090505b50600061182b565b50565b60008060019054906101000a900460ff161590508080156109205750600160008054906101000a900460ff1660ff16105b8061094d575061092f306119a8565b15801561094c5750600160008054906101000a900460ff1660ff16145b5b61098c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098390612cf5565b60405180910390fd5b60016000806101000a81548160ff021916908360ff16021790555080156109c9576001600060016101000a81548160ff0219169083151502179055505b6109d16119cb565b6109d9611a24565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a40576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260ca60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160cc60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015610b1b5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610b129190612bf8565b60405180910390a15b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba690612c55565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610bee6117c9565b73ffffffffffffffffffffffffffffffffffffffff1614610c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3b90612c75565b60405180910390fd5b610c4d82611820565b610c598282600161182b565b5050565b60606000841415610c9a576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ca48686611a75565b610cda576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff1663095ea7b386866040518363ffffffff1660e01b8152600401610d15929190612b6e565b602060405180830381600087803b158015610d2f57600080fd5b505af1158015610d43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6791906126da565b610d9d576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610daa868585611712565b9050610db68787611a75565b610dec576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e279190612af3565b60206040518083038186803b158015610e3f57600080fd5b505afa158015610e53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e779190612734565b90506000811115610f5257600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060cc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161415610f255760cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b610f5081838b73ffffffffffffffffffffffffffffffffffffffff16611b0d9092919063ffffffff16565b505b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382888888604051610fb393929190612e51565b60405180910390a3819250505095945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105090612cb5565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110d6611b93565b6110e06000611c11565b565b600084141561111d576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060cc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156111c05760cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b6111ed3382878773ffffffffffffffffffffffffffffffffffffffff16611cd7909392919063ffffffff16565b8573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4878787876040516112509493929190612dd5565b60405180910390a3505050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff1660c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611312576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060c960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611384611b93565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113eb90612c35565b60405180910390fd5b6113fd81611c11565b50565b60cc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000341415611461576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16346040516114a990612ade565b60006040518083038185875af1925050503d80600081146114e6576040519150601f19603f3d011682016040523d82523d6000602084013e6114eb565b606091505b5050905060001515811515141561152e576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a434600060405161158e929190612e15565b60405180910390a35050565b60008214156115d5576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060cc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116785760cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b6116a53382858573ffffffffffffffffffffffffffffffffffffffff16611cd7909392919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48585604051611704929190612e15565b60405180910390a350505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1634868660405161173f929190612aae565b60006040518083038185875af1925050503d806000811461177c576040519150601f19603f3d011682016040523d82523d6000602084013e611781565b606091505b5091509150816117bd576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80925050509392505050565b60006117f77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611d60565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611828611b93565b50565b6118577f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611d6a565b60000160009054906101000a900460ff161561187b5761187683611d74565b6119a3565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156118c157600080fd5b505afa9250505080156118f257506040513d601f19601f820116820180604052508101906118ef9190612707565b60015b611931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192890612d15565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d90612cd5565b60405180910390fd5b506119a2838383611e2d565b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1190612d95565b60405180910390fd5b611a22611e59565b565b600060019054906101000a900460ff16611a73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6a90612d95565b60405180910390fd5b565b60008273ffffffffffffffffffffffffffffffffffffffff1663095ea7b38360006040518363ffffffff1660e01b8152600401611ab3929190612b45565b602060405180830381600087803b158015611acd57600080fd5b505af1158015611ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0591906126da565b905092915050565b611b8e8363a9059cbb60e01b8484604051602401611b2c929190612b6e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611eba565b505050565b611b9b611f81565b73ffffffffffffffffffffffffffffffffffffffff16611bb9611260565b73ffffffffffffffffffffffffffffffffffffffff1614611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0690612d55565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611d5a846323b872dd60e01b858585604051602401611cf893929190612b0e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611eba565b50505050565b6000819050919050565b6000819050919050565b611d7d816119a8565b611dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db390612d35565b60405180910390fd5b80611de97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611d60565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611e3683611f89565b600082511180611e435750805b15611e5457611e528383611fd8565b505b505050565b600060019054906101000a900460ff16611ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9f90612d95565b60405180910390fd5b611eb8611eb3611f81565b611c11565b565b6000611f1c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166120059092919063ffffffff16565b9050600081511115611f7c5780806020019051810190611f3c91906126da565b611f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7290612db5565b60405180910390fd5b5b505050565b600033905090565b611f9281611d74565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611ffd83836040518060600160405280602781526020016134876027913961201d565b905092915050565b606061201484846000856120a3565b90509392505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516120479190612ac7565b600060405180830381855af49150503d8060008114612082576040519150601f19603f3d011682016040523d82523d6000602084013e612087565b606091505b509150915061209886838387612170565b925050509392505050565b6060824710156120e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120df90612c95565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516121119190612ac7565b60006040518083038185875af1925050503d806000811461214e576040519150601f19603f3d011682016040523d82523d6000602084013e612153565b606091505b5091509150612164878383876121e6565b92505050949350505050565b606083156121d3576000835114156121cb5761218b856119a8565b6121ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c190612d75565b60405180910390fd5b5b8290506121de565b6121dd838361225c565b5b949350505050565b606083156122495760008351141561224157612201856122ac565b612240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223790612d75565b60405180910390fd5b5b829050612254565b61225383836122cf565b5b949350505050565b60008251111561226f5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a39190612c13565b60405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156122e25781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123169190612c13565b60405180910390fd5b600061233261232d84612ea8565b612e83565b90508281526020810184848401111561234e5761234d613050565b5b612359848285612f9f565b509392505050565b6000813590506123708161342a565b92915050565b60008151905061238581613441565b92915050565b60008151905061239a81613458565b92915050565b60008083601f8401126123b6576123b5613046565b5b8235905067ffffffffffffffff8111156123d3576123d2613041565b5b6020830191508360018202830111156123ef576123ee61304b565b5b9250929050565b600082601f83011261240b5761240a613046565b5b813561241b84826020860161231f565b91505092915050565b6000813590506124338161346f565b92915050565b6000815190506124488161346f565b92915050565b6000602082840312156124645761246361305a565b5b600061247284828501612361565b91505092915050565b600080604083850312156124925761249161305a565b5b60006124a085828601612361565b92505060206124b185828601612361565b9150509250929050565b6000806000806000608086880312156124d7576124d661305a565b5b60006124e588828901612361565b95505060206124f688828901612361565b945050604061250788828901612424565b935050606086013567ffffffffffffffff81111561252857612527613055565b5b612534888289016123a0565b92509250509295509295909350565b60008060006040848603121561255c5761255b61305a565b5b600061256a86828701612361565b935050602084013567ffffffffffffffff81111561258b5761258a613055565b5b612597868287016123a0565b92509250509250925092565b600080604083850312156125ba576125b961305a565b5b60006125c885828601612361565b925050602083013567ffffffffffffffff8111156125e9576125e8613055565b5b6125f5858286016123f6565b9150509250929050565b6000806000606084860312156126185761261761305a565b5b600061262686828701612361565b935050602061263786828701612424565b925050604061264886828701612361565b9150509250925092565b60008060008060006080868803121561266e5761266d61305a565b5b600061267c88828901612361565b955050602061268d88828901612424565b945050604061269e88828901612361565b935050606086013567ffffffffffffffff8111156126bf576126be613055565b5b6126cb888289016123a0565b92509250509295509295909350565b6000602082840312156126f0576126ef61305a565b5b60006126fe84828501612376565b91505092915050565b60006020828403121561271d5761271c61305a565b5b600061272b8482850161238b565b91505092915050565b60006020828403121561274a5761274961305a565b5b600061275884828501612439565b91505092915050565b61276a81612f1c565b82525050565b61277981612f3a565b82525050565b600061278b8385612eef565b9350612798838584612f9f565b6127a18361305f565b840190509392505050565b60006127b88385612f00565b93506127c5838584612f9f565b82840190509392505050565b60006127dc82612ed9565b6127e68185612eef565b93506127f6818560208601612fae565b6127ff8161305f565b840191505092915050565b600061281582612ed9565b61281f8185612f00565b935061282f818560208601612fae565b80840191505092915050565b61284481612f7b565b82525050565b61285381612f8d565b82525050565b600061286482612ee4565b61286e8185612f0b565b935061287e818560208601612fae565b6128878161305f565b840191505092915050565b600061289f602683612f0b565b91506128aa82613070565b604082019050919050565b60006128c2602c83612f0b565b91506128cd826130bf565b604082019050919050565b60006128e5602c83612f0b565b91506128f08261310e565b604082019050919050565b6000612908602683612f0b565b91506129138261315d565b604082019050919050565b600061292b603883612f0b565b9150612936826131ac565b604082019050919050565b600061294e602983612f0b565b9150612959826131fb565b604082019050919050565b6000612971602e83612f0b565b915061297c8261324a565b604082019050919050565b6000612994602e83612f0b565b915061299f82613299565b604082019050919050565b60006129b7602d83612f0b565b91506129c2826132e8565b604082019050919050565b60006129da602083612f0b565b91506129e582613337565b602082019050919050565b60006129fd600083612eef565b9150612a0882613360565b600082019050919050565b6000612a20600083612f00565b9150612a2b82613360565b600082019050919050565b6000612a43601d83612f0b565b9150612a4e82613363565b602082019050919050565b6000612a66602b83612f0b565b9150612a718261338c565b604082019050919050565b6000612a89602a83612f0b565b9150612a94826133db565b604082019050919050565b612aa881612f64565b82525050565b6000612abb8284866127ac565b91508190509392505050565b6000612ad3828461280a565b915081905092915050565b6000612ae982612a13565b9150819050919050565b6000602082019050612b086000830184612761565b92915050565b6000606082019050612b236000830186612761565b612b306020830185612761565b612b3d6040830184612a9f565b949350505050565b6000604082019050612b5a6000830185612761565b612b67602083018461283b565b9392505050565b6000604082019050612b836000830185612761565b612b906020830184612a9f565b9392505050565b6000602082019050612bac6000830184612770565b92915050565b60006020820190508181036000830152612bcd81848661277f565b90509392505050565b60006020820190508181036000830152612bf081846127d1565b905092915050565b6000602082019050612c0d600083018461284a565b92915050565b60006020820190508181036000830152612c2d8184612859565b905092915050565b60006020820190508181036000830152612c4e81612892565b9050919050565b60006020820190508181036000830152612c6e816128b5565b9050919050565b60006020820190508181036000830152612c8e816128d8565b9050919050565b60006020820190508181036000830152612cae816128fb565b9050919050565b60006020820190508181036000830152612cce8161291e565b9050919050565b60006020820190508181036000830152612cee81612941565b9050919050565b60006020820190508181036000830152612d0e81612964565b9050919050565b60006020820190508181036000830152612d2e81612987565b9050919050565b60006020820190508181036000830152612d4e816129aa565b9050919050565b60006020820190508181036000830152612d6e816129cd565b9050919050565b60006020820190508181036000830152612d8e81612a36565b9050919050565b60006020820190508181036000830152612dae81612a59565b9050919050565b60006020820190508181036000830152612dce81612a7c565b9050919050565b6000606082019050612dea6000830187612a9f565b612df76020830186612761565b8181036040830152612e0a81848661277f565b905095945050505050565b6000606082019050612e2a6000830185612a9f565b612e376020830184612761565b8181036040830152612e48816129f0565b90509392505050565b6000604082019050612e666000830186612a9f565b8181036020830152612e7981848661277f565b9050949350505050565b6000612e8d612e9e565b9050612e998282612fe1565b919050565b6000604051905090565b600067ffffffffffffffff821115612ec357612ec2613012565b5b612ecc8261305f565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000612f2782612f44565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612f8682612f64565b9050919050565b6000612f9882612f6e565b9050919050565b82818337600083830152505050565b60005b83811015612fcc578082015181840152602081019050612fb1565b83811115612fdb576000848401525b50505050565b612fea8261305f565b810181811067ffffffffffffffff8211171561300957613008613012565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b61343381612f1c565b811461343e57600080fd5b50565b61344a81612f2e565b811461345557600080fd5b50565b61346181612f3a565b811461346c57600080fd5b50565b61347881612f64565b811461348357600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220a92291d9031c32880ffc1e5010a2c6663dffc6271b359692f77d40a3df8488cc64736f6c6343000807003360806040523480156200001157600080fd5b506040516200109038038062001090833981810160405281019062000037919062000106565b6001600081905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620000a7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506200018b565b600081519050620001008162000171565b92915050565b6000602082840312156200011f576200011e6200016c565b5b60006200012f84828501620000ef565b91505092915050565b600062000145826200014c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6200017c8162000138565b81146200018857600080fd5b50565b610ef5806200019b6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063116191b61461004657806321fc65f214610064578063d9caed1214610080575b600080fd5b61004e61009c565b60405161005b9190610a98565b60405180910390f35b61007e600480360381019061007991906107bc565b6100c2565b005b61009a60048036038101906100959190610769565b61024a565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ca6102ef565b610117600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16848773ffffffffffffffffffffffffffffffffffffffff1661033f9092919063ffffffff16565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635131ab5986868686866040518663ffffffff1660e01b815260040161017a959493929190610a21565b600060405180830381600087803b15801561019457600080fd5b505af11580156101a8573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906101d19190610871565b508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e85858560405161023393929190610b70565b60405180910390a36102436103c5565b5050505050565b6102526102ef565b61027d82828573ffffffffffffffffffffffffffffffffffffffff1661033f9092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb836040516102da9190610b55565b60405180910390a36102ea6103c5565b505050565b60026000541415610335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032c90610b35565b60405180910390fd5b6002600081905550565b6103c08363a9059cbb60e01b848460405160240161035e929190610a6f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506103cf565b505050565b6001600081905550565b6000610431826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166104969092919063ffffffff16565b905060008151111561049157808060200190518101906104519190610844565b610490576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048790610b15565b60405180910390fd5b5b505050565b60606104a584846000856104ae565b90509392505050565b6060824710156104f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ea90610ad5565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161051c9190610a0a565b60006040518083038185875af1925050503d8060008114610559576040519150601f19603f3d011682016040523d82523d6000602084013e61055e565b606091505b509150915061056f8783838761057b565b92505050949350505050565b606083156105de576000835114156105d657610596856105f1565b6105d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105cc90610af5565b60405180910390fd5b5b8290506105e9565b6105e88383610614565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156106275781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065b9190610ab3565b60405180910390fd5b600061067761067284610bc7565b610ba2565b90508281526020810184848401111561069357610692610d6a565b5b61069e848285610cc8565b509392505050565b6000813590506106b581610e7a565b92915050565b6000815190506106ca81610e91565b92915050565b60008083601f8401126106e6576106e5610d60565b5b8235905067ffffffffffffffff81111561070357610702610d5b565b5b60208301915083600182028301111561071f5761071e610d65565b5b9250929050565b600082601f83011261073b5761073a610d60565b5b815161074b848260208601610664565b91505092915050565b60008135905061076381610ea8565b92915050565b60008060006060848603121561078257610781610d74565b5b6000610790868287016106a6565b93505060206107a1868287016106a6565b92505060406107b286828701610754565b9150509250925092565b6000806000806000608086880312156107d8576107d7610d74565b5b60006107e6888289016106a6565b95505060206107f7888289016106a6565b945050604061080888828901610754565b935050606086013567ffffffffffffffff81111561082957610828610d6f565b5b610835888289016106d0565b92509250509295509295909350565b60006020828403121561085a57610859610d74565b5b6000610868848285016106bb565b91505092915050565b60006020828403121561088757610886610d74565b5b600082015167ffffffffffffffff8111156108a5576108a4610d6f565b5b6108b184828501610726565b91505092915050565b6108c381610c3b565b82525050565b60006108d58385610c0e565b93506108e2838584610cb9565b6108eb83610d79565b840190509392505050565b600061090182610bf8565b61090b8185610c1f565b935061091b818560208601610cc8565b80840191505092915050565b61093081610c83565b82525050565b600061094182610c03565b61094b8185610c2a565b935061095b818560208601610cc8565b61096481610d79565b840191505092915050565b600061097c602683610c2a565b915061098782610d8a565b604082019050919050565b600061099f601d83610c2a565b91506109aa82610dd9565b602082019050919050565b60006109c2602a83610c2a565b91506109cd82610e02565b604082019050919050565b60006109e5601f83610c2a565b91506109f082610e51565b602082019050919050565b610a0481610c79565b82525050565b6000610a1682846108f6565b915081905092915050565b6000608082019050610a3660008301886108ba565b610a4360208301876108ba565b610a5060408301866109fb565b8181036060830152610a638184866108c9565b90509695505050505050565b6000604082019050610a8460008301856108ba565b610a9160208301846109fb565b9392505050565b6000602082019050610aad6000830184610927565b92915050565b60006020820190508181036000830152610acd8184610936565b905092915050565b60006020820190508181036000830152610aee8161096f565b9050919050565b60006020820190508181036000830152610b0e81610992565b9050919050565b60006020820190508181036000830152610b2e816109b5565b9050919050565b60006020820190508181036000830152610b4e816109d8565b9050919050565b6000602082019050610b6a60008301846109fb565b92915050565b6000604082019050610b8560008301866109fb565b8181036020830152610b988184866108c9565b9050949350505050565b6000610bac610bbd565b9050610bb88282610cfb565b919050565b6000604051905090565b600067ffffffffffffffff821115610be257610be1610d2c565b5b610beb82610d79565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000610c4682610c59565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610c8e82610c95565b9050919050565b6000610ca082610ca7565b9050919050565b6000610cb282610c59565b9050919050565b82818337600083830152505050565b60005b83811015610ce6578082015181840152602081019050610ccb565b83811115610cf5576000848401525b50505050565b610d0482610d79565b810181811067ffffffffffffffff82111715610d2357610d22610d2c565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b610e8381610c3b565b8114610e8e57600080fd5b50565b610e9a81610c4d565b8114610ea557600080fd5b50565b610eb181610c79565b8114610ebc57600080fd5b5056fea2646970667358221220c6f7c0f9935341aaaabcabf7504d01bbd38a0606132004742a97e6a200eb432564736f6c6343000807003360806040523480156200001157600080fd5b50604051620011b9380380620011b9833981810160405281019062000037919062000180565b6001600081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480620000a75750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15620000df576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506200021a565b6000815190506200017a8162000200565b92915050565b600080604083850312156200019a5762000199620001fb565b5b6000620001aa8582860162000169565b9250506020620001bd8582860162000169565b9150509250929050565b6000620001d482620001db565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6200020b81620001c7565b81146200021757600080fd5b50565b610f8f806200022a6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806302a04c0d14610051578063116191b61461006d578063e8f9cb3a1461008b578063f3fef3a3146100a9575b600080fd5b61006b6004803603810190610066919061082e565b6100c5565b005b610075610279565b6040516100829190610b20565b60405180910390f35b61009361029f565b6040516100a09190610b05565b60405180910390f35b6100c360048036038101906100be91906107ee565b6102c5565b005b6100cd610374565b61013c600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166103c49092919063ffffffff16565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635131ab59600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868686866040518663ffffffff1660e01b81526004016101c1959493929190610a8e565b600060405180830381600087803b1580156101db57600080fd5b505af11580156101ef573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061021891906108cf565b508373ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced84848460405161026393929190610bf8565b60405180910390a261027361044a565b50505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6102cd610374565b61031a8282600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166103c49092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364826040516103609190610bdd565b60405180910390a261037061044a565b5050565b600260005414156103ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103b190610bbd565b60405180910390fd5b6002600081905550565b6104458363a9059cbb60e01b84846040516024016103e3929190610adc565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610454565b505050565b6001600081905550565b60006104b6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661051b9092919063ffffffff16565b905060008151111561051657808060200190518101906104d691906108a2565b610515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050c90610b9d565b60405180910390fd5b5b505050565b606061052a8484600085610533565b90509392505050565b606082471015610578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056f90610b5d565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516105a19190610a77565b60006040518083038185875af1925050503d80600081146105de576040519150601f19603f3d011682016040523d82523d6000602084013e6105e3565b606091505b50915091506105f487838387610600565b92505050949350505050565b606083156106635760008351141561065b5761061b85610676565b61065a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065190610b7d565b60405180910390fd5b5b82905061066e565b61066d8383610699565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156106ac5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e09190610b3b565b60405180910390fd5b60006106fc6106f784610c4f565b610c2a565b90508281526020810184848401111561071857610717610e04565b5b610723848285610d62565b509392505050565b60008135905061073a81610f14565b92915050565b60008151905061074f81610f2b565b92915050565b60008083601f84011261076b5761076a610dfa565b5b8235905067ffffffffffffffff81111561078857610787610df5565b5b6020830191508360018202830111156107a4576107a3610dff565b5b9250929050565b600082601f8301126107c0576107bf610dfa565b5b81516107d08482602086016106e9565b91505092915050565b6000813590506107e881610f42565b92915050565b6000806040838503121561080557610804610e0e565b5b60006108138582860161072b565b9250506020610824858286016107d9565b9150509250929050565b6000806000806060858703121561084857610847610e0e565b5b60006108568782880161072b565b9450506020610867878288016107d9565b935050604085013567ffffffffffffffff81111561088857610887610e09565b5b61089487828801610755565b925092505092959194509250565b6000602082840312156108b8576108b7610e0e565b5b60006108c684828501610740565b91505092915050565b6000602082840312156108e5576108e4610e0e565b5b600082015167ffffffffffffffff81111561090357610902610e09565b5b61090f848285016107ab565b91505092915050565b61092181610cc3565b82525050565b60006109338385610c96565b9350610940838584610d53565b61094983610e13565b840190509392505050565b600061095f82610c80565b6109698185610ca7565b9350610979818560208601610d62565b80840191505092915050565b61098e81610d0b565b82525050565b61099d81610d1d565b82525050565b60006109ae82610c8b565b6109b88185610cb2565b93506109c8818560208601610d62565b6109d181610e13565b840191505092915050565b60006109e9602683610cb2565b91506109f482610e24565b604082019050919050565b6000610a0c601d83610cb2565b9150610a1782610e73565b602082019050919050565b6000610a2f602a83610cb2565b9150610a3a82610e9c565b604082019050919050565b6000610a52601f83610cb2565b9150610a5d82610eeb565b602082019050919050565b610a7181610d01565b82525050565b6000610a838284610954565b915081905092915050565b6000608082019050610aa36000830188610918565b610ab06020830187610918565b610abd6040830186610a68565b8181036060830152610ad0818486610927565b90509695505050505050565b6000604082019050610af16000830185610918565b610afe6020830184610a68565b9392505050565b6000602082019050610b1a6000830184610985565b92915050565b6000602082019050610b356000830184610994565b92915050565b60006020820190508181036000830152610b5581846109a3565b905092915050565b60006020820190508181036000830152610b76816109dc565b9050919050565b60006020820190508181036000830152610b96816109ff565b9050919050565b60006020820190508181036000830152610bb681610a22565b9050919050565b60006020820190508181036000830152610bd681610a45565b9050919050565b6000602082019050610bf26000830184610a68565b92915050565b6000604082019050610c0d6000830186610a68565b8181036020830152610c20818486610927565b9050949350505050565b6000610c34610c45565b9050610c408282610d95565b919050565b6000604051905090565b600067ffffffffffffffff821115610c6a57610c69610dc6565b5b610c7382610e13565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000610cce82610ce1565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610d1682610d2f565b9050919050565b6000610d2882610d2f565b9050919050565b6000610d3a82610d41565b9050919050565b6000610d4c82610ce1565b9050919050565b82818337600083830152505050565b60005b83811015610d80578082015181840152602081019050610d65565b83811115610d8f576000848401525b50505050565b610d9e82610e13565b810181811067ffffffffffffffff82111715610dbd57610dbc610dc6565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b610f1d81610cc3565b8114610f2857600080fd5b50565b610f3481610cd5565b8114610f3f57600080fd5b50565b610f4b81610d01565b8114610f5657600080fd5b5056fea2646970667358221220bdea1bc357822401542c5c1b57f5c8696f7fa6c99ecfef1bfd392504260c0f1164736f6c63430008070033608060405234801561001057600080fd5b5061108a806100206000396000f3fe60806040526004361061003f5760003560e01c8063357fc5a2146100445780636ed701691461006d578063e04d4f9714610084578063f05b6abf146100a0575b600080fd5b34801561005057600080fd5b5061006b6004803603810190610066919061085a565b6100c9565b005b34801561007957600080fd5b50610082610138565b005b61009e600480360381019061009991906107eb565b610171565b005b3480156100ac57600080fd5b506100c760048036038101906100c29190610733565b6101b5565b005b6100f63382858573ffffffffffffffffffffffffffffffffffffffff166101f7909392919063ffffffff16565b7f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af603384848460405161012b9493929190610bb0565b60405180910390a1505050565b7fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0336040516101679190610b0b565b60405180910390a1565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa33348585856040516101a8959493929190610bf5565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516101ea9493929190610b5d565b60405180910390a1505050565b61027a846323b872dd60e01b85858560405160240161021893929190610b26565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610280565b50505050565b60006102e2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166103479092919063ffffffff16565b9050600081511115610342578080602001905181019061030291906107be565b610341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033890610cb1565b60405180910390fd5b5b505050565b6060610356848460008561035f565b90509392505050565b6060824710156103a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039b90610c71565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516103cd9190610af4565b60006040518083038185875af1925050503d806000811461040a576040519150601f19603f3d011682016040523d82523d6000602084013e61040f565b606091505b50915091506104208783838761042c565b92505050949350505050565b6060831561048f5760008351141561048757610447856104a2565b610486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047d90610c91565b60405180910390fd5b5b82905061049a565b61049983836104c5565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156104d85781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050c9190610c4f565b60405180910390fd5b600061052861052384610cf6565b610cd1565b9050808382526020820190508285602086028201111561054b5761054a610f23565b5b60005b8581101561059957813567ffffffffffffffff81111561057157610570610f1e565b5b80860161057e89826106f0565b8552602085019450602084019350505060018101905061054e565b5050509392505050565b60006105b66105b184610d22565b610cd1565b905080838252602082019050828560208602820111156105d9576105d8610f23565b5b60005b8581101561060957816105ef888261071e565b8452602084019350602083019250506001810190506105dc565b5050509392505050565b600061062661062184610d4e565b610cd1565b90508281526020810184848401111561064257610641610f28565b5b61064d848285610e7c565b509392505050565b6000813590506106648161100f565b92915050565b600082601f83011261067f5761067e610f1e565b5b813561068f848260208601610515565b91505092915050565b600082601f8301126106ad576106ac610f1e565b5b81356106bd8482602086016105a3565b91505092915050565b6000813590506106d581611026565b92915050565b6000815190506106ea81611026565b92915050565b600082601f83011261070557610704610f1e565b5b8135610715848260208601610613565b91505092915050565b60008135905061072d8161103d565b92915050565b60008060006060848603121561074c5761074b610f32565b5b600084013567ffffffffffffffff81111561076a57610769610f2d565b5b6107768682870161066a565b935050602084013567ffffffffffffffff81111561079757610796610f2d565b5b6107a386828701610698565b92505060406107b4868287016106c6565b9150509250925092565b6000602082840312156107d4576107d3610f32565b5b60006107e2848285016106db565b91505092915050565b60008060006060848603121561080457610803610f32565b5b600084013567ffffffffffffffff81111561082257610821610f2d565b5b61082e868287016106f0565b935050602061083f8682870161071e565b9250506040610850868287016106c6565b9150509250925092565b60008060006060848603121561087357610872610f32565b5b60006108818682870161071e565b935050602061089286828701610655565b92505060406108a386828701610655565b9150509250925092565b60006108b983836109fb565b905092915050565b60006108cd8383610ad6565b60208301905092915050565b6108e281610e34565b82525050565b60006108f382610d9f565b6108fd8185610de5565b93508360208202850161090f85610d7f565b8060005b8581101561094b578484038952815161092c85826108ad565b945061093783610dcb565b925060208a01995050600181019050610913565b50829750879550505050505092915050565b600061096882610daa565b6109728185610df6565b935061097d83610d8f565b8060005b838110156109ae57815161099588826108c1565b97506109a083610dd8565b925050600181019050610981565b5085935050505092915050565b6109c481610e46565b82525050565b60006109d582610db5565b6109df8185610e07565b93506109ef818560208601610e8b565b80840191505092915050565b6000610a0682610dc0565b610a108185610e12565b9350610a20818560208601610e8b565b610a2981610f37565b840191505092915050565b6000610a3f82610dc0565b610a498185610e23565b9350610a59818560208601610e8b565b610a6281610f37565b840191505092915050565b6000610a7a602683610e23565b9150610a8582610f48565b604082019050919050565b6000610a9d601d83610e23565b9150610aa882610f97565b602082019050919050565b6000610ac0602a83610e23565b9150610acb82610fc0565b604082019050919050565b610adf81610e72565b82525050565b610aee81610e72565b82525050565b6000610b0082846109ca565b915081905092915050565b6000602082019050610b2060008301846108d9565b92915050565b6000606082019050610b3b60008301866108d9565b610b4860208301856108d9565b610b556040830184610ae5565b949350505050565b6000608082019050610b7260008301876108d9565b8181036020830152610b8481866108e8565b90508181036040830152610b98818561095d565b9050610ba760608301846109bb565b95945050505050565b6000608082019050610bc560008301876108d9565b610bd26020830186610ae5565b610bdf60408301856108d9565b610bec60608301846108d9565b95945050505050565b600060a082019050610c0a60008301886108d9565b610c176020830187610ae5565b8181036040830152610c298186610a34565b9050610c386060830185610ae5565b610c4560808301846109bb565b9695505050505050565b60006020820190508181036000830152610c698184610a34565b905092915050565b60006020820190508181036000830152610c8a81610a6d565b9050919050565b60006020820190508181036000830152610caa81610a90565b9050919050565b60006020820190508181036000830152610cca81610ab3565b9050919050565b6000610cdb610cec565b9050610ce78282610ebe565b919050565b6000604051905090565b600067ffffffffffffffff821115610d1157610d10610eef565b5b602082029050602081019050919050565b600067ffffffffffffffff821115610d3d57610d3c610eef565b5b602082029050602081019050919050565b600067ffffffffffffffff821115610d6957610d68610eef565b5b610d7282610f37565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000610e3f82610e52565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015610ea9578082015181840152602081019050610e8e565b83811115610eb8576000848401525b50505050565b610ec782610f37565b810181811067ffffffffffffffff82111715610ee657610ee5610eef565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b61101881610e34565b811461102357600080fd5b50565b61102f81610e46565b811461103a57600080fd5b50565b61104681610e72565b811461105157600080fd5b5056fea2646970667358221220086a1c9f56ed96506c7198d50cf431a5b03003c16cd4168d2395cdedfc1ac06164736f6c6343000807003360a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152503480156200004757600080fd5b50620000586200005e60201b60201c565b62000208565b600060019054906101000a900460ff1615620000b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a8906200015c565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff1614620001225760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff6040516200011991906200017e565b60405180910390a15b565b6000620001336027836200019b565b91506200014082620001b9565b604082019050919050565b6200015681620001ac565b82525050565b60006020820190508181036000830152620001778162000124565b9050919050565b60006020820190506200019560008301846200014b565b92915050565b600082825260208201905092915050565b600060ff82169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60805160601c612c726200024360003960008181610433015281816104c2015281816105d40152818161066301526107130152612c726000f3fe6080604052600436106100dd5760003560e01c80637993c1e01161007f578063bcf7f32b11610059578063bcf7f32b14610251578063c39aca371461027a578063f2fde38b146102a3578063f45346dc146102cc576100dd565b80637993c1e0146101e65780638129fc1c1461020f5780638da5cb5b14610226576100dd565b80633ce4a5bc116100bb5780633ce4a5bc1461015d5780634f1ef2861461018857806352d1902d146101a4578063715018a6146101cf576100dd565b80630ac7c44c146100e2578063135390f91461010b5780633659cfe614610134575b600080fd5b3480156100ee57600080fd5b5061010960048036038101906101049190611c80565b6102f5565b005b34801561011757600080fd5b50610132600480360381019061012d9190611cfc565b61034c565b005b34801561014057600080fd5b5061015b60048036038101906101569190611b0a565b610431565b005b34801561016957600080fd5b506101726105ba565b60405161017f919061226e565b60405180910390f35b6101a2600480360381019061019d9190611b37565b6105d2565b005b3480156101b057600080fd5b506101b961070f565b6040516101c691906122e9565b60405180910390f35b3480156101db57600080fd5b506101e46107c8565b005b3480156101f257600080fd5b5061020d60048036038101906102089190611d6b565b6107dc565b005b34801561021b57600080fd5b506102246108c7565b005b34801561023257600080fd5b5061023b610a0d565b604051610248919061226e565b60405180910390f35b34801561025d57600080fd5b5061027860048036038101906102739190611e0f565b610a37565b005b34801561028657600080fd5b506102a1600480360381019061029c9190611e0f565b610b2b565b005b3480156102af57600080fd5b506102ca60048036038101906102c59190611b0a565b610d5d565b005b3480156102d857600080fd5b506102f360048036038101906102ee9190611bd3565b610de1565b005b3373ffffffffffffffffffffffffffffffffffffffff167f2b5af078ce280d812dc2241658dc5435c93408020e5418eef55a2b536de51c0f84848460405161033f93929190612304565b60405180910390a2505050565b60006103588383610f9d565b90503373ffffffffffffffffffffffffffffffffffffffff167f1866ad2994816c79f4103e1eddacc7b085eb7c635205243a28940be69b01536d8585848673ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156103db57600080fd5b505afa1580156103ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104139190611ec5565b60405161042394939291906123a0565b60405180910390a250505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614156104c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b79061245c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166104ff61128d565b73ffffffffffffffffffffffffffffffffffffffff1614610555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054c9061247c565b60405180910390fd5b61055e816112e4565b6105b781600067ffffffffffffffff81111561057d5761057c61282b565b5b6040519080825280601f01601f1916602001820160405280156105af5781602001600182028036833780820191505090505b5060006112ef565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab81565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610661576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106589061245c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166106a061128d565b73ffffffffffffffffffffffffffffffffffffffff16146106f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ed9061247c565b60405180910390fd5b6106ff826112e4565b61070b828260016112ef565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461079f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107969061249c565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b6107d061146c565b6107da60006114ea565b565b60006107e88585610f9d565b90503373ffffffffffffffffffffffffffffffffffffffff167f1866ad2994816c79f4103e1eddacc7b085eb7c635205243a28940be69b01536d8787848873ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561086b57600080fd5b505afa15801561087f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a39190611ec5565b88886040516108b79695949392919061233d565b60405180910390a2505050505050565b60008060019054906101000a900460ff161590508080156108f85750600160008054906101000a900460ff1660ff16105b806109255750610907306115b0565b1580156109245750600160008054906101000a900460ff1660ff16145b5b610964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095b906124dc565b60405180910390fd5b60016000806101000a81548160ff021916908360ff16021790555080156109a1576001600060016101000a81548160ff0219169083151502179055505b6109a96115d3565b6109b161162c565b8015610a0a5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610a0191906123ff565b60405180910390a15b50565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ab0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b8152600401610af195949392919061259c565b600060405180830381600087803b158015610b0b57600080fd5b505af1158015610b1f573d6000803e3d6000fd5b50505050505050505050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ba4576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610c1d57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610c54576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166347e7ef2484866040518363ffffffff1660e01b8152600401610c8f9291906122c0565b602060405180830381600087803b158015610ca957600080fd5b505af1158015610cbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce19190611c26565b508273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b8152600401610d2395949392919061259c565b600060405180830381600087803b158015610d3d57600080fd5b505af1158015610d51573d6000803e3d6000fd5b50505050505050505050565b610d6561146c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcc9061243c565b60405180910390fd5b610dde816114ea565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e5a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610ed357503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15610f0a576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166347e7ef2482846040518363ffffffff1660e01b8152600401610f459291906122c0565b602060405180830381600087803b158015610f5f57600080fd5b505af1158015610f73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f979190611c26565b50505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1663d9eeebed6040518163ffffffff1660e01b8152600401604080518083038186803b158015610fe757600080fd5b505afa158015610ffb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101f9190611b93565b915091508173ffffffffffffffffffffffffffffffffffffffff166323b872dd3373735b14bb79463307aacbed86daf3322b1e6226ab846040518463ffffffff1660e01b815260040161107493929190612289565b602060405180830381600087803b15801561108e57600080fd5b505af11580156110a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c69190611c26565b6110fc576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff1660e01b815260040161113993929190612289565b602060405180830381600087803b15801561115357600080fd5b505af1158015611167573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118b9190611c26565b6111c1576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166342966c68866040518263ffffffff1660e01b81526004016111fa91906125f1565b602060405180830381600087803b15801561121457600080fd5b505af1158015611228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124c9190611c26565b611282576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b809250505092915050565b60006112bb7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61167d565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112ec61146c565b50565b61131b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611687565b60000160009054906101000a900460ff161561133f5761133a83611691565b611467565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561138557600080fd5b505afa9250505080156113b657506040513d601f19601f820116820180604052508101906113b39190611c53565b60015b6113f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ec906124fc565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b811461145a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611451906124bc565b60405180910390fd5b5061146683838361174a565b5b505050565b611474611776565b73ffffffffffffffffffffffffffffffffffffffff16611492610a0d565b73ffffffffffffffffffffffffffffffffffffffff16146114e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114df9061253c565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611622576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116199061257c565b60405180910390fd5b61162a61177e565b565b600060019054906101000a900460ff1661167b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116729061257c565b60405180910390fd5b565b6000819050919050565b6000819050919050565b61169a816115b0565b6116d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d09061251c565b60405180910390fd5b806117067f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61167d565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611753836117df565b6000825111806117605750805b156117715761176f838361182e565b505b505050565b600033905090565b600060019054906101000a900460ff166117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c49061257c565b60405180910390fd5b6117dd6117d8611776565b6114ea565b565b6117e881611691565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606118538383604051806060016040528060278152602001612c166027913961185b565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516118859190612257565b600060405180830381855af49150503d80600081146118c0576040519150601f19603f3d011682016040523d82523d6000602084013e6118c5565b606091505b50915091506118d6868383876118e1565b925050509392505050565b606083156119445760008351141561193c576118fc856115b0565b61193b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119329061255c565b60405180910390fd5b5b82905061194f565b61194e8383611957565b5b949350505050565b60008251111561196a5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199e919061241a565b60405180910390fd5b60006119ba6119b584612631565b61260c565b9050828152602081018484840111156119d6576119d5612878565b5b6119e18482856127b8565b509392505050565b6000813590506119f881612bb9565b92915050565b600081519050611a0d81612bb9565b92915050565b600081519050611a2281612bd0565b92915050565b600081519050611a3781612be7565b92915050565b60008083601f840112611a5357611a52612864565b5b8235905067ffffffffffffffff811115611a7057611a6f61285f565b5b602083019150836001820283011115611a8c57611a8b612873565b5b9250929050565b600082601f830112611aa857611aa7612864565b5b8135611ab88482602086016119a7565b91505092915050565b600060608284031215611ad757611ad6612869565b5b81905092915050565b600081359050611aef81612bfe565b92915050565b600081519050611b0481612bfe565b92915050565b600060208284031215611b2057611b1f612887565b5b6000611b2e848285016119e9565b91505092915050565b60008060408385031215611b4e57611b4d612887565b5b6000611b5c858286016119e9565b925050602083013567ffffffffffffffff811115611b7d57611b7c61287d565b5b611b8985828601611a93565b9150509250929050565b60008060408385031215611baa57611ba9612887565b5b6000611bb8858286016119fe565b9250506020611bc985828601611af5565b9150509250929050565b600080600060608486031215611bec57611beb612887565b5b6000611bfa868287016119e9565b9350506020611c0b86828701611ae0565b9250506040611c1c868287016119e9565b9150509250925092565b600060208284031215611c3c57611c3b612887565b5b6000611c4a84828501611a13565b91505092915050565b600060208284031215611c6957611c68612887565b5b6000611c7784828501611a28565b91505092915050565b600080600060408486031215611c9957611c98612887565b5b600084013567ffffffffffffffff811115611cb757611cb661287d565b5b611cc386828701611a93565b935050602084013567ffffffffffffffff811115611ce457611ce361287d565b5b611cf086828701611a3d565b92509250509250925092565b600080600060608486031215611d1557611d14612887565b5b600084013567ffffffffffffffff811115611d3357611d3261287d565b5b611d3f86828701611a93565b9350506020611d5086828701611ae0565b9250506040611d61868287016119e9565b9150509250925092565b600080600080600060808688031215611d8757611d86612887565b5b600086013567ffffffffffffffff811115611da557611da461287d565b5b611db188828901611a93565b9550506020611dc288828901611ae0565b9450506040611dd3888289016119e9565b935050606086013567ffffffffffffffff811115611df457611df361287d565b5b611e0088828901611a3d565b92509250509295509295909350565b60008060008060008060a08789031215611e2c57611e2b612887565b5b600087013567ffffffffffffffff811115611e4a57611e4961287d565b5b611e5689828a01611ac1565b9650506020611e6789828a016119e9565b9550506040611e7889828a01611ae0565b9450506060611e8989828a016119e9565b935050608087013567ffffffffffffffff811115611eaa57611ea961287d565b5b611eb689828a01611a3d565b92509250509295509295509295565b600060208284031215611edb57611eda612887565b5b6000611ee984828501611af5565b91505092915050565b611efb81612747565b82525050565b611f0a81612747565b82525050565b611f1981612765565b82525050565b6000611f2b8385612678565b9350611f388385846127b8565b611f418361288c565b840190509392505050565b6000611f588385612689565b9350611f658385846127b8565b611f6e8361288c565b840190509392505050565b6000611f8482612662565b611f8e8185612689565b9350611f9e8185602086016127c7565b611fa78161288c565b840191505092915050565b6000611fbd82612662565b611fc7818561269a565b9350611fd78185602086016127c7565b80840191505092915050565b611fec816127a6565b82525050565b6000611ffd8261266d565b61200781856126a5565b93506120178185602086016127c7565b6120208161288c565b840191505092915050565b60006120386026836126a5565b91506120438261289d565b604082019050919050565b600061205b602c836126a5565b9150612066826128ec565b604082019050919050565b600061207e602c836126a5565b91506120898261293b565b604082019050919050565b60006120a16038836126a5565b91506120ac8261298a565b604082019050919050565b60006120c46029836126a5565b91506120cf826129d9565b604082019050919050565b60006120e7602e836126a5565b91506120f282612a28565b604082019050919050565b600061210a602e836126a5565b915061211582612a77565b604082019050919050565b600061212d602d836126a5565b915061213882612ac6565b604082019050919050565b60006121506020836126a5565b915061215b82612b15565b602082019050919050565b6000612173600083612689565b915061217e82612b3e565b600082019050919050565b6000612196601d836126a5565b91506121a182612b41565b602082019050919050565b60006121b9602b836126a5565b91506121c482612b6a565b604082019050919050565b6000606083016121e260008401846126cd565b85830360008701526121f5838284611f1f565b9250505061220660208401846126b6565b6122136020860182611ef2565b506122216040840184612730565b61222e6040860182612239565b508091505092915050565b6122428161278f565b82525050565b6122518161278f565b82525050565b60006122638284611fb2565b915081905092915050565b60006020820190506122836000830184611f01565b92915050565b600060608201905061229e6000830186611f01565b6122ab6020830185611f01565b6122b86040830184612248565b949350505050565b60006040820190506122d56000830185611f01565b6122e26020830184612248565b9392505050565b60006020820190506122fe6000830184611f10565b92915050565b6000604082019050818103600083015261231e8186611f79565b90508181036020830152612333818486611f4c565b9050949350505050565b600060a08201905081810360008301526123578189611f79565b90506123666020830188612248565b6123736040830187612248565b6123806060830186612248565b8181036080830152612393818486611f4c565b9050979650505050505050565b600060a08201905081810360008301526123ba8187611f79565b90506123c96020830186612248565b6123d66040830185612248565b6123e36060830184612248565b81810360808301526123f481612166565b905095945050505050565b60006020820190506124146000830184611fe3565b92915050565b600060208201905081810360008301526124348184611ff2565b905092915050565b600060208201905081810360008301526124558161202b565b9050919050565b600060208201905081810360008301526124758161204e565b9050919050565b6000602082019050818103600083015261249581612071565b9050919050565b600060208201905081810360008301526124b581612094565b9050919050565b600060208201905081810360008301526124d5816120b7565b9050919050565b600060208201905081810360008301526124f5816120da565b9050919050565b60006020820190508181036000830152612515816120fd565b9050919050565b6000602082019050818103600083015261253581612120565b9050919050565b6000602082019050818103600083015261255581612143565b9050919050565b6000602082019050818103600083015261257581612189565b9050919050565b60006020820190508181036000830152612595816121ac565b9050919050565b600060808201905081810360008301526125b681886121cf565b90506125c56020830187611f01565b6125d26040830186612248565b81810360608301526125e5818486611f4c565b90509695505050505050565b60006020820190506126066000830184612248565b92915050565b6000612616612627565b905061262282826127fa565b919050565b6000604051905090565b600067ffffffffffffffff82111561264c5761264b61282b565b5b6126558261288c565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006126c560208401846119e9565b905092915050565b600080833560016020038436030381126126ea576126e9612882565b5b83810192508235915060208301925067ffffffffffffffff8211156127125761271161285a565b5b6001820236038413156127285761272761286e565b5b509250929050565b600061273f6020840184611ae0565b905092915050565b60006127528261276f565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006127b182612799565b9050919050565b82818337600083830152505050565b60005b838110156127e55780820151818401526020810190506127ca565b838111156127f4576000848401525b50505050565b6128038261288c565b810181811067ffffffffffffffff821117156128225761282161282b565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b612bc281612747565b8114612bcd57600080fd5b50565b612bd981612759565b8114612be457600080fd5b50565b612bf081612765565b8114612bfb57600080fd5b50565b612c078161278f565b8114612c1257600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220627eb039ecb52d09fd70ebde1f5eca61fe0f91321a96929ebe38dc8e38d999ab64736f6c63430008070033608060405234801561001057600080fd5b50604051610bcd380380610bcd8339818101604052810190610032919061008d565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610108565b600081519050610087816100f1565b92915050565b6000602082840312156100a3576100a26100ec565b5b60006100b184828501610078565b91505092915050565b60006100c5826100cc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6100fa816100ba565b811461010557600080fd5b50565b610ab6806101176000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b614610062578063a0a1730b14610080575b600080fd5b610060600480360381019061005b91906105fd565b61009c565b005b61006a6102af565b6040516100779190610761565b60405180910390f35b61009a6004803603810190610095919061055e565b6102d3565b005b60008383836040516024016100b39392919061082f565b6040516020818303038152906040527fe04d4f97000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090508473ffffffffffffffffffffffffffffffffffffffff1663095ea7b360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16886040518363ffffffff1660e01b815260040161018d92919061077c565b602060405180830381600087803b1580156101a757600080fd5b505af11580156101bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101df9190610531565b610215576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637993c1e0888888856040518563ffffffff1660e01b815260040161027494939291906107dc565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008383836040516024016102ea9392919061082f565b6040516020818303038152906040527fe04d4f97000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ac7c44c86836040518363ffffffff1660e01b81526004016103c49291906107a5565b600060405180830381600087803b1580156103de57600080fd5b505af11580156103f2573d6000803e3d6000fd5b505050505050505050565b600061041061040b84610892565b61086d565b90508281526020810184848401111561042c5761042b610a1b565b5b610437848285610974565b509392505050565b600061045261044d846108c3565b61086d565b90508281526020810184848401111561046e5761046d610a1b565b5b610479848285610974565b509392505050565b60008135905061049081610a3b565b92915050565b6000813590506104a581610a52565b92915050565b6000815190506104ba81610a52565b92915050565b600082601f8301126104d5576104d4610a16565b5b81356104e58482602086016103fd565b91505092915050565b600082601f83011261050357610502610a16565b5b813561051384826020860161043f565b91505092915050565b60008135905061052b81610a69565b92915050565b60006020828403121561054757610546610a25565b5b6000610555848285016104ab565b91505092915050565b6000806000806080858703121561057857610577610a25565b5b600085013567ffffffffffffffff81111561059657610595610a20565b5b6105a2878288016104c0565b945050602085013567ffffffffffffffff8111156105c3576105c2610a20565b5b6105cf878288016104ee565b93505060406105e08782880161051c565b92505060606105f187828801610496565b91505092959194509250565b60008060008060008060c0878903121561061a57610619610a25565b5b600087013567ffffffffffffffff81111561063857610637610a20565b5b61064489828a016104c0565b965050602061065589828a0161051c565b955050604061066689828a01610481565b945050606087013567ffffffffffffffff81111561068757610686610a20565b5b61069389828a016104ee565b93505060806106a489828a0161051c565b92505060a06106b589828a01610496565b9150509295509295509295565b6106cb8161092c565b82525050565b6106da8161093e565b82525050565b60006106eb826108f4565b6106f5818561090a565b9350610705818560208601610983565b61070e81610a2a565b840191505092915050565b6000610724826108ff565b61072e818561091b565b935061073e818560208601610983565b61074781610a2a565b840191505092915050565b61075b8161096a565b82525050565b600060208201905061077660008301846106c2565b92915050565b600060408201905061079160008301856106c2565b61079e6020830184610752565b9392505050565b600060408201905081810360008301526107bf81856106e0565b905081810360208301526107d381846106e0565b90509392505050565b600060808201905081810360008301526107f681876106e0565b90506108056020830186610752565b61081260408301856106c2565b818103606083015261082481846106e0565b905095945050505050565b600060608201905081810360008301526108498186610719565b90506108586020830185610752565b61086560408301846106d1565b949350505050565b6000610877610888565b905061088382826109b6565b919050565b6000604051905090565b600067ffffffffffffffff8211156108ad576108ac6109e7565b5b6108b682610a2a565b9050602081019050919050565b600067ffffffffffffffff8211156108de576108dd6109e7565b5b6108e782610a2a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006109378261094a565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156109a1578082015181840152602081019050610986565b838111156109b0576000848401525b50505050565b6109bf82610a2a565b810181811067ffffffffffffffff821117156109de576109dd6109e7565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b610a448161092c565b8114610a4f57600080fd5b50565b610a5b8161093e565b8114610a6657600080fd5b50565b610a728161096a565b8114610a7d57600080fd5b5056fea2646970667358221220192b4e23b9b6daaae9f30fb00f65433e56a5d8a6906223e4fbd169def800a8a264736f6c6343000807003360806040523480156200001157600080fd5b50604051620010d7380380620010d7833981810160405281019062000037919062000146565b82600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac560405160405180910390a1505050620001f5565b6000815190506200014081620001db565b92915050565b600080600060608486031215620001625762000161620001d6565b5b600062000172868287016200012f565b935050602062000185868287016200012f565b925050604062000198868287016200012f565b9150509250925092565b6000620001af82620001b6565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b620001e681620001a2565b8114620001f257600080fd5b50565b610ed280620002056000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806397770dff1161007157806397770dff14610166578063a7cb050714610182578063c63585cc1461019e578063d7fd7afb146101ce578063d936a012146101fe578063ee2815ba1461021c576100a9565b80630be15547146100ae5780633c669d55146100de578063513a9c05146100fa578063569541b91461012a578063842da36d14610148575b600080fd5b6100c860048036038101906100c3919061094d565b610238565b6040516100d59190610bce565b60405180910390f35b6100f860048036038101906100f39190610898565b61026b565b005b610114600480360381019061010f919061094d565b6103b8565b6040516101219190610bce565b60405180910390f35b6101326103eb565b60405161013f9190610bce565b60405180910390f35b610150610411565b60405161015d9190610bce565b60405180910390f35b610180600480360381019061017b9190610818565b610437565b005b61019c600480360381019061019791906109ba565b6104d4565b005b6101b860048036038101906101b39190610845565b610528565b6040516101c59190610bce565b60405180910390f35b6101e860048036038101906101e3919061094d565b61059a565b6040516101f59190610c67565b60405180910390f35b6102066105b2565b6040516102139190610bce565b60405180910390f35b6102366004803603810190610231919061097a565b6105d8565b005b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060405180606001604052806040518060200160405280600081525081526020013373ffffffffffffffffffffffffffffffffffffffff1681526020014681525090508473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb87866040518363ffffffff1660e01b81526004016102ea929190610be9565b602060405180830381600087803b15801561030457600080fd5b505af1158015610318573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033c9190610920565b508573ffffffffffffffffffffffffffffffffffffffff1663de43156e82878787876040518663ffffffff1660e01b815260040161037e959493929190610c12565b600060405180830381600087803b15801561039857600080fd5b505af11580156103ac573d6000803e3d6000fd5b50505050505050505050565b60026020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516104c99190610bce565b60405180910390a150565b80600080848152602001908152602001600020819055507f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d828260405161051c929190610cab565b60405180910390a15050565b60008060006105378585610667565b9150915085828260405160200161054f929190610b60565b60405160208183030381529060405280519060200120604051602001610576929190610b8c565b6040516020818303038152906040528051906020012060001c925050509392505050565b60006020528060005260406000206000915090505481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b806001600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d828260405161065b929190610c82565b60405180910390a15050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156106d0576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161061070a57828461070d565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561077c576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60008135905061079281610e57565b92915050565b6000815190506107a781610e6e565b92915050565b60008083601f8401126107c3576107c2610dd3565b5b8235905067ffffffffffffffff8111156107e0576107df610dce565b5b6020830191508360018202830111156107fc576107fb610dd8565b5b9250929050565b60008135905061081281610e85565b92915050565b60006020828403121561082e5761082d610de2565b5b600061083c84828501610783565b91505092915050565b60008060006060848603121561085e5761085d610de2565b5b600061086c86828701610783565b935050602061087d86828701610783565b925050604061088e86828701610783565b9150509250925092565b6000806000806000608086880312156108b4576108b3610de2565b5b60006108c288828901610783565b95505060206108d388828901610783565b94505060406108e488828901610803565b935050606086013567ffffffffffffffff81111561090557610904610ddd565b5b610911888289016107ad565b92509250509295509295909350565b60006020828403121561093657610935610de2565b5b600061094484828501610798565b91505092915050565b60006020828403121561096357610962610de2565b5b600061097184828501610803565b91505092915050565b6000806040838503121561099157610990610de2565b5b600061099f85828601610803565b92505060206109b085828601610783565b9150509250929050565b600080604083850312156109d1576109d0610de2565b5b60006109df85828601610803565b92505060206109f085828601610803565b9150509250929050565b610a0381610d0c565b82525050565b610a1281610d0c565b82525050565b610a29610a2482610d0c565b610da0565b82525050565b610a40610a3b82610d2a565b610db2565b82525050565b6000610a528385610cf0565b9350610a5f838584610d5e565b610a6883610de7565b840190509392505050565b6000610a7e82610cd4565b610a888185610cdf565b9350610a98818560208601610d6d565b610aa181610de7565b840191505092915050565b6000610ab9602083610d01565b9150610ac482610e05565b602082019050919050565b6000610adc600183610d01565b9150610ae782610e2e565b600182019050919050565b60006060830160008301518482036000860152610b0f8282610a73565b9150506020830151610b2460208601826109fa565b506040830151610b376040860182610b42565b508091505092915050565b610b4b81610d54565b82525050565b610b5a81610d54565b82525050565b6000610b6c8285610a18565b601482019150610b7c8284610a18565b6014820191508190509392505050565b6000610b9782610acf565b9150610ba38285610a18565b601482019150610bb38284610a2f565b602082019150610bc282610aac565b91508190509392505050565b6000602082019050610be36000830184610a09565b92915050565b6000604082019050610bfe6000830185610a09565b610c0b6020830184610b51565b9392505050565b60006080820190508181036000830152610c2c8188610af2565b9050610c3b6020830187610a09565b610c486040830186610b51565b8181036060830152610c5b818486610a46565b90509695505050505050565b6000602082019050610c7c6000830184610b51565b92915050565b6000604082019050610c976000830185610b51565b610ca46020830184610a09565b9392505050565b6000604082019050610cc06000830185610b51565b610ccd6020830184610b51565b9392505050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000610d1782610d34565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015610d8b578082015181840152602081019050610d70565b83811115610d9a576000848401525b50505050565b6000610dab82610dbc565b9050919050565b6000819050919050565b6000610dc782610df8565b9050919050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f600082015250565b7fff00000000000000000000000000000000000000000000000000000000000000600082015250565b610e6081610d0c565b8114610e6b57600080fd5b50565b610e7781610d1e565b8114610e8257600080fd5b50565b610e8e81610d54565b8114610e9957600080fd5b5056fea2646970667358221220fc7ae99de1eb543fc941c22b053bacc8edc14f929260909668ffd15cbad6fbfb64736f6c6343000807003360c06040523480156200001157600080fd5b506040516200282d3803806200282d83398181016040528101906200003791906200035b565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620000b1576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760079080519060200190620000c9929190620001d1565b508660089080519060200190620000e2929190620001d1565b5085600960006101000a81548160ff021916908360ff16021790555084608081815250508360028111156200011c576200011b620005ae565b5b60a0816002811115620001345762000133620005ae565b5b60f81b8152505082600281905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505050620006bf565b828054620001df9062000542565b90600052602060002090601f0160209004810192826200020357600085556200024f565b82601f106200021e57805160ff19168380011785556200024f565b828001600101855582156200024f579182015b828111156200024e57825182559160200191906001019062000231565b5b5090506200025e919062000262565b5090565b5b808211156200027d57600081600090555060010162000263565b5090565b60006200029862000292846200048b565b62000462565b905082815260208101848484011115620002b757620002b662000640565b5b620002c48482856200050c565b509392505050565b600081519050620002dd8162000660565b92915050565b600081519050620002f4816200067a565b92915050565b600082601f8301126200031257620003116200063b565b5b81516200032484826020860162000281565b91505092915050565b6000815190506200033e816200068b565b92915050565b6000815190506200035581620006a5565b92915050565b600080600080600080600080610100898b0312156200037f576200037e6200064a565b5b600089015167ffffffffffffffff811115620003a0576200039f62000645565b5b620003ae8b828c01620002fa565b985050602089015167ffffffffffffffff811115620003d257620003d162000645565b5b620003e08b828c01620002fa565b9750506040620003f38b828c0162000344565b9650506060620004068b828c016200032d565b9550506080620004198b828c01620002e3565b94505060a06200042c8b828c016200032d565b93505060c06200043f8b828c01620002cc565b92505060e0620004528b828c01620002cc565b9150509295985092959890939650565b60006200046e62000481565b90506200047c828262000578565b919050565b6000604051905090565b600067ffffffffffffffff821115620004a957620004a86200060c565b5b620004b4826200064f565b9050602081019050919050565b6000620004ce82620004d5565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156200052c5780820151818401526020810190506200050f565b838111156200053c576000848401525b50505050565b600060028204905060018216806200055b57607f821691505b60208210811415620005725762000571620005dd565b5b50919050565b62000583826200064f565b810181811067ffffffffffffffff82111715620005a557620005a46200060c565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200066b81620004c1565b81146200067757600080fd5b50565b600381106200068857600080fd5b50565b6200069681620004f5565b8114620006a257600080fd5b50565b620006b081620004ff565b8114620006bc57600080fd5b50565b60805160a05160f81c612137620006f660003960006109580152600081816108a201528181610c250152610d5a01526121376000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806385e1f4d0116100c3578063d9eeebed1161007c578063d9eeebed146103cc578063dd62ed3e146103eb578063e2f535b81461041b578063eddeb12314610439578063f2441b3214610455578063f687d12a146104735761014d565b806385e1f4d0146102f657806395d89b4114610314578063a3413d0314610332578063a9059cbb14610350578063c701262614610380578063c835d7cc146103b05761014d565b8063313ce56711610115578063313ce5671461020c5780633ce4a5bc1461022a57806342966c681461024857806347e7ef24146102785780634d8943bb146102a857806370a08231146102c65761014d565b806306fdde0314610152578063091d278814610170578063095ea7b31461018e57806318160ddd146101be57806323b872dd146101dc575b600080fd5b61015a61048f565b6040516101679190611cad565b60405180910390f35b610178610521565b6040516101859190611ccf565b60405180910390f35b6101a860048036038101906101a3919061196e565b610527565b6040516101b59190611bfb565b60405180910390f35b6101c6610545565b6040516101d39190611ccf565b60405180910390f35b6101f660048036038101906101f1919061191b565b61054f565b6040516102039190611bfb565b60405180910390f35b610214610647565b6040516102219190611cea565b60405180910390f35b61023261065e565b60405161023f9190611b80565b60405180910390f35b610262600480360381019061025d9190611a37565b610676565b60405161026f9190611bfb565b60405180910390f35b610292600480360381019061028d919061196e565b61068b565b60405161029f9190611bfb565b60405180910390f35b6102b0610851565b6040516102bd9190611ccf565b60405180910390f35b6102e060048036038101906102db9190611881565b610857565b6040516102ed9190611ccf565b60405180910390f35b6102fe6108a0565b60405161030b9190611ccf565b60405180910390f35b61031c6108c4565b6040516103299190611cad565b60405180910390f35b61033a610956565b6040516103479190611c92565b60405180910390f35b61036a6004803603810190610365919061196e565b61097a565b6040516103779190611bfb565b60405180910390f35b61039a600480360381019061039591906119db565b610998565b6040516103a79190611bfb565b60405180910390f35b6103ca60048036038101906103c59190611881565b610aee565b005b6103d4610be1565b6040516103e2929190611bd2565b60405180910390f35b610405600480360381019061040091906118db565b610e4e565b6040516104129190611ccf565b60405180910390f35b610423610ed5565b6040516104309190611b80565b60405180910390f35b610453600480360381019061044e9190611a37565b610efb565b005b61045d610fb5565b60405161046a9190611b80565b60405180910390f35b61048d60048036038101906104889190611a37565b610fd9565b005b60606007805461049e90611f33565b80601f01602080910402602001604051908101604052809291908181526020018280546104ca90611f33565b80156105175780601f106104ec57610100808354040283529160200191610517565b820191906000526020600020905b8154815290600101906020018083116104fa57829003601f168201915b5050505050905090565b60025481565b600061053b610534611093565b848461109b565b6001905092915050565b6000600654905090565b600061055c848484611254565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006105a7611093565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561061e576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61063b8561062a611093565b85846106369190611e43565b61109b565b60019150509392505050565b6000600960009054906101000a900460ff16905090565b73735b14bb79463307aacbed86daf3322b1e6226ab81565b600061068233836114b0565b60019050919050565b600073735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610729575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b80156107835750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156107ba576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107c48383611668565b8273ffffffffffffffffffffffffffffffffffffffff167f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab373735b14bb79463307aacbed86daf3322b1e6226ab6040516020016108219190611b65565b6040516020818303038152906040528460405161083f929190611c16565b60405180910390a26001905092915050565b60035481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060600880546108d390611f33565b80601f01602080910402602001604051908101604052809291908181526020018280546108ff90611f33565b801561094c5780601f106109215761010080835404028352916020019161094c565b820191906000526020600020905b81548152906001019060200180831161092f57829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061098e610987611093565b8484611254565b6001905092915050565b60008060006109a5610be1565b915091508173ffffffffffffffffffffffffffffffffffffffff166323b872dd3373735b14bb79463307aacbed86daf3322b1e6226ab846040518463ffffffff1660e01b81526004016109fa93929190611b9b565b602060405180830381600087803b158015610a1457600080fd5b505af1158015610a28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4c91906119ae565b610a82576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a8c33856114b0565b3373ffffffffffffffffffffffffffffffffffffffff167f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d955868684600354604051610ada9493929190611c46565b60405180910390a260019250505092915050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b67576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae81604051610bd69190611b80565b60405180910390a150565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630be155477f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401610c609190611ccf565b60206040518083038186803b158015610c7857600080fd5b505afa158015610c8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb091906118ae565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d19576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d7fd7afb7f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401610d959190611ccf565b60206040518083038186803b158015610dad57600080fd5b505afa158015610dc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de59190611a64565b90506000811415610e22576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060035460025483610e359190611de9565b610e3f9190611d93565b90508281945094505050509091565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f74576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806003819055507fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f81604051610faa9190611ccf565b60405180910390a150565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611052576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806002819055507fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a816040516110889190611ccf565b60405180910390a150565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611102576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611169576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112479190611ccf565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112bb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611322576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156113a0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81816113ac9190611e43565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461143e9190611d93565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114a29190611ccf565b60405180910390a350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611517576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611595576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81816115a19190611e43565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600660008282546115f69190611e43565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161165b9190611ccf565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116cf576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600660008282546116e19190611d93565b9250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117379190611d93565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161179c9190611ccf565b60405180910390a35050565b60006117bb6117b684611d2a565b611d05565b9050828152602081018484840111156117d7576117d661207b565b5b6117e2848285611ef1565b509392505050565b6000813590506117f9816120bc565b92915050565b60008151905061180e816120bc565b92915050565b600081519050611823816120d3565b92915050565b600082601f83011261183e5761183d612076565b5b813561184e8482602086016117a8565b91505092915050565b600081359050611866816120ea565b92915050565b60008151905061187b816120ea565b92915050565b60006020828403121561189757611896612085565b5b60006118a5848285016117ea565b91505092915050565b6000602082840312156118c4576118c3612085565b5b60006118d2848285016117ff565b91505092915050565b600080604083850312156118f2576118f1612085565b5b6000611900858286016117ea565b9250506020611911858286016117ea565b9150509250929050565b60008060006060848603121561193457611933612085565b5b6000611942868287016117ea565b9350506020611953868287016117ea565b925050604061196486828701611857565b9150509250925092565b6000806040838503121561198557611984612085565b5b6000611993858286016117ea565b92505060206119a485828601611857565b9150509250929050565b6000602082840312156119c4576119c3612085565b5b60006119d284828501611814565b91505092915050565b600080604083850312156119f2576119f1612085565b5b600083013567ffffffffffffffff811115611a1057611a0f612080565b5b611a1c85828601611829565b9250506020611a2d85828601611857565b9150509250929050565b600060208284031215611a4d57611a4c612085565b5b6000611a5b84828501611857565b91505092915050565b600060208284031215611a7a57611a79612085565b5b6000611a888482850161186c565b91505092915050565b611a9a81611e77565b82525050565b611ab1611aac82611e77565b611f96565b82525050565b611ac081611e89565b82525050565b6000611ad182611d5b565b611adb8185611d71565b9350611aeb818560208601611f00565b611af48161208a565b840191505092915050565b611b0881611edf565b82525050565b6000611b1982611d66565b611b238185611d82565b9350611b33818560208601611f00565b611b3c8161208a565b840191505092915050565b611b5081611ec8565b82525050565b611b5f81611ed2565b82525050565b6000611b718284611aa0565b60148201915081905092915050565b6000602082019050611b956000830184611a91565b92915050565b6000606082019050611bb06000830186611a91565b611bbd6020830185611a91565b611bca6040830184611b47565b949350505050565b6000604082019050611be76000830185611a91565b611bf46020830184611b47565b9392505050565b6000602082019050611c106000830184611ab7565b92915050565b60006040820190508181036000830152611c308185611ac6565b9050611c3f6020830184611b47565b9392505050565b60006080820190508181036000830152611c608187611ac6565b9050611c6f6020830186611b47565b611c7c6040830185611b47565b611c896060830184611b47565b95945050505050565b6000602082019050611ca76000830184611aff565b92915050565b60006020820190508181036000830152611cc78184611b0e565b905092915050565b6000602082019050611ce46000830184611b47565b92915050565b6000602082019050611cff6000830184611b56565b92915050565b6000611d0f611d20565b9050611d1b8282611f65565b919050565b6000604051905090565b600067ffffffffffffffff821115611d4557611d44612047565b5b611d4e8261208a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000611d9e82611ec8565b9150611da983611ec8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611dde57611ddd611fba565b5b828201905092915050565b6000611df482611ec8565b9150611dff83611ec8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611e3857611e37611fba565b5b828202905092915050565b6000611e4e82611ec8565b9150611e5983611ec8565b925082821015611e6c57611e6b611fba565b5b828203905092915050565b6000611e8282611ea8565b9050919050565b60008115159050919050565b6000819050611ea3826120a8565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000611eea82611e95565b9050919050565b82818337600083830152505050565b60005b83811015611f1e578082015181840152602081019050611f03565b83811115611f2d576000848401525b50505050565b60006002820490506001821680611f4b57607f821691505b60208210811415611f5f57611f5e612018565b5b50919050565b611f6e8261208a565b810181811067ffffffffffffffff82111715611f8d57611f8c612047565b5b80604052505050565b6000611fa182611fa8565b9050919050565b6000611fb38261209b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b600381106120b9576120b8611fe9565b5b50565b6120c581611e77565b81146120d057600080fd5b50565b6120dc81611e89565b81146120e757600080fd5b50565b6120f381611ec8565b81146120fe57600080fd5b5056fea26469706673582212206982505c1a546edfb86a1aaaca0ad6b7e5542f2d1f24ac30a032805fc80a650e64736f6c63430008070033a26469706673582212209e98ed7e2cd651eb28ee45ec064b8716a0654364831fa17adbe0b4545e6d061064736f6c63430008070033", + ABI: "[{\"inputs\":[],\"name\":\"ApprovalFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerIsNotFungibleModule\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CustodyInitialized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"DepositFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExecutionFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedZetaSent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasFeeTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientERC20Amount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientETHAmount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientZRC20Amount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTarget\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WZETATransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WithdrawalFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20BurnFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20TransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZeroAddress\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"Call\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"Call\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"receiver\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"asset\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"payload\",\"type\":\"bytes\"}],\"name\":\"Deposit\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"Executed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"ExecutedWithERC20\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"destination\",\"type\":\"address\"}],\"name\":\"ReceivedERC20\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"ReceivedNoParams\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string[]\",\"name\":\"strs\",\"type\":\"string[]\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"nums\",\"type\":\"uint256[]\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"name\":\"ReceivedNonPayable\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"num\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"name\":\"ReceivedPayable\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"to\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasfee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolFlatFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"log_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"log_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"name\":\"log_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"\",\"type\":\"int256\"}],\"name\":\"log_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"val\",\"type\":\"address\"}],\"name\":\"log_named_address\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256[]\",\"name\":\"val\",\"type\":\"uint256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256[]\",\"name\":\"val\",\"type\":\"int256[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"address[]\",\"name\":\"val\",\"type\":\"address[]\"}],\"name\":\"log_named_array\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"val\",\"type\":\"bytes\"}],\"name\":\"log_named_bytes\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"val\",\"type\":\"bytes32\"}],\"name\":\"log_named_bytes32\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"decimals\",\"type\":\"uint256\"}],\"name\":\"log_named_decimal_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"int256\",\"name\":\"val\",\"type\":\"int256\"}],\"name\":\"log_named_int\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"val\",\"type\":\"string\"}],\"name\":\"log_named_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"key\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"val\",\"type\":\"uint256\"}],\"name\":\"log_named_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"name\":\"log_string\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"name\":\"log_uint\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"\",\"type\":\"bytes\"}],\"name\":\"logs\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"IS_TEST\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"excludedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"name\":\"excludedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"excludeSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"excludedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"failed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"setUp\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifactSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"string\",\"name\":\"artifact\",\"type\":\"string\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"structStdInvariant.FuzzArtifactSelector[]\",\"name\":\"targetedArtifactSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetArtifacts\",\"outputs\":[{\"internalType\":\"string[]\",\"name\":\"targetedArtifacts_\",\"type\":\"string[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetContracts\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedContracts_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetInterfaces\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string[]\",\"name\":\"artifacts\",\"type\":\"string[]\"}],\"internalType\":\"structStdInvariant.FuzzInterface[]\",\"name\":\"targetedInterfaces_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSelectors\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes4[]\",\"name\":\"selectors\",\"type\":\"bytes4[]\"}],\"internalType\":\"structStdInvariant.FuzzSelector[]\",\"name\":\"targetedSelectors_\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"targetSenders\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"targetedSenders_\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"testCallReceiverEVMFromZEVM\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + Bin: "0x60806040526001600c60006101000a81548160ff0219169083151502179055506001601f60006101000a81548160ff02191690831515021790555034801561004657600080fd5b506201344580620000586000396000f3fe60806040523480156200001157600080fd5b5060043610620001005760003560e01c8063916a17c61162000099578063b5508aa9116200006f578063b5508aa9146200022d578063ba414fa6146200024f578063e20c9f711462000271578063fa7626d414620002935762000100565b8063916a17c614620001dd5780639683c69514620001ff578063b0464fdc146200020b5762000100565b80633e5e3c2311620000db5780633e5e3c2314620001555780633f7286f4146200017757806366d9a9a0146200019957806385226c8114620001bb5762000100565b80630a9254e414620001055780631ed7831c14620001115780632ade38801462000133575b600080fd5b6200010f620002b5565b005b6200011b6200135c565b6040516200012a919062002fcc565b60405180910390f35b6200013d620013ec565b6040516200014c919062003038565b60405180910390f35b6200015f62001586565b6040516200016e919062002fcc565b60405180910390f35b6200018162001616565b60405162000190919062002fcc565b60405180910390f35b620001a3620016a6565b604051620001b2919062003014565b60405180910390f35b620001c56200183d565b604051620001d4919062002ff0565b60405180910390f35b620001e762001920565b604051620001f691906200305c565b60405180910390f35b6200020962001a73565b005b6200021562002112565b6040516200022491906200305c565b60405180910390f35b6200023762002265565b60405162000246919062002ff0565b60405180910390f35b6200025962002348565b60405162000268919062003080565b60405180910390f35b6200027b6200247b565b6040516200028a919062002fcc565b60405180910390f35b6200029d6200250b565b604051620002ac919062003080565b60405180910390f35b30602560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611234602660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550615678602760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614321602c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051620003cd906200251e565b620003d890620032a2565b604051809103906000f080158015620003f5573d6000803e3d6000fd5b50602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405162000444906200251e565b6200044f90620031d3565b604051809103906000f0801580156200046c573d6000803e3d6000fd5b50602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051620004bb906200252c565b604051809103906000f080158015620004d8573d6000803e3d6000fd5b50601f60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516200054a906200253a565b62000556919062002e5d565b604051809103906000f08015801562000573573d6000803e3d6000fd5b50602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051620006089062002548565b6200061592919062002e7a565b604051809103906000f08015801562000632573d6000803e3d6000fd5b50602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663485cc955602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016200071692919062002e7a565b600060405180830381600087803b1580156200073157600080fd5b505af115801562000746573d6000803e3d6000fd5b50505050601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516200077b906200253a565b62000787919062002e5d565b604051809103906000f080158015620007a4573d6000803e3d6000fd5b50602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae7a3a6f602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040162000864919062002e5d565b600060405180830381600087803b1580156200087f57600080fd5b505af115801562000894573d6000803e3d6000fd5b50505050601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166310188aef602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040162000917919062002e5d565b600060405180830381600087803b1580156200093257600080fd5b505af115801562000947573d6000803e3d6000fd5b50505050602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620f42406040518363ffffffff1660e01b8152600401620009cf92919062002f45565b600060405180830381600087803b158015620009ea57600080fd5b505af1158015620009ff573d6000803e3d6000fd5b50505050602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166207a1206040518363ffffffff1660e01b815260040162000a8792919062002f72565b602060405180830381600087803b15801562000aa257600080fd5b505af115801562000ab7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000add919062002648565b5060405162000aec9062002556565b604051809103906000f08015801562000b09573d6000803e3d6000fd5b50602460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405162000b589062002564565b604051809103906000f08015801562000b75573d6000803e3d6000fd5b50602860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405162000be79062002572565b62000bf3919062002e5d565b604051809103906000f08015801562000c10573d6000803e3d6000fd5b50602960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073735b14bb79463307aacbed86daf3322b1e6226ab90507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff166306447d56826040518263ffffffff1660e01b815260040162000cc8919062002e5d565b600060405180830381600087803b15801562000ce357600080fd5b505af115801562000cf8573d6000803e3d6000fd5b50505050600080600060405162000d0f9062002580565b62000d1d9392919062002ea7565b604051809103906000f08015801562000d3a573d6000803e3d6000fd5b50602a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060126001600080602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405162000dd6906200258e565b62000de7969594939291906200320a565b604051809103906000f08015801562000e04573d6000803e3d6000fd5b50602b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ee2815ba6001602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b815260040162000ec792919062003135565b600060405180830381600087803b15801562000ee257600080fd5b505af115801562000ef7573d6000803e3d6000fd5b50505050602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a7cb05076001806040518363ffffffff1660e01b815260040162000f5b92919062003162565b600060405180830381600087803b15801562000f7657600080fd5b505af115801562000f8b573d6000803e3d6000fd5b50505050602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166347e7ef24602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620f42406040518363ffffffff1660e01b81526004016200101392919062002f45565b602060405180830381600087803b1580156200102e57600080fd5b505af115801562001043573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001069919062002648565b50602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166347e7ef24602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620f42406040518363ffffffff1660e01b8152600401620010ee92919062002f45565b602060405180830381600087803b1580156200110957600080fd5b505af11580156200111e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001144919062002648565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620011b157600080fd5b505af1158015620011c6573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff1663ca669fa7602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016200124a919062002e5d565b600060405180830381600087803b1580156200126557600080fd5b505af11580156200127a573d6000803e3d6000fd5b50505050602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620f42406040518363ffffffff1660e01b81526004016200130292919062002f45565b602060405180830381600087803b1580156200131d57600080fd5b505af115801562001332573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001358919062002648565b5050565b60606016805480602002602001604051908101604052809291908181526020018280548015620013e257602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831162001397575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156200157d57838290600052602060002090600202016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201805480602002602001604051908101604052809291908181526020016000905b8282101562001565578382906000526020600020018054620014d190620036a8565b80601f0160208091040260200160405190810160405280929190818152602001828054620014ff90620036a8565b8015620015505780601f10620015245761010080835404028352916020019162001550565b820191906000526020600020905b8154815290600101906020018083116200153257829003601f168201915b505050505081526020019060010190620014af565b50505050815250508152602001906001019062001410565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156200160c57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311620015c1575b5050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156200169c57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831162001651575b5050505050905090565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156200183457838290600052602060002090600202016040518060400160405290816000820180546200170090620036a8565b80601f01602080910402602001604051908101604052809291908181526020018280546200172e90620036a8565b80156200177f5780601f1062001753576101008083540402835291602001916200177f565b820191906000526020600020905b8154815290600101906020018083116200176157829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156200181b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411620017c75790505b50505050508152505081526020019060010190620016ca565b50505050905090565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015620019175783829060005260206000200180546200188390620036a8565b80601f0160208091040260200160405190810160405280929190818152602001828054620018b190620036a8565b8015620019025780601f10620018d65761010080835404028352916020019162001902565b820191906000526020600020905b815481529060010190602001808311620018e457829003601f168201915b50505050508152602001906001019062001861565b50505050905090565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101562001a6a57838290600052602060002090600202016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820180548060200260200160405190810160405280929190818152602001828054801562001a5157602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411620019fd5790505b5050505050815250508152602001906001019062001944565b50505050905090565b60006040518060400160405280600f81526020017f48656c6c6f2c204861726468617421000000000000000000000000000000000081525090506000602a90506000600190506000670de0b6b3a76400009050600063e04d4f9760e01b85858560405160240162001ae7939291906200318f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff1663ca669fa7602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040162001bc6919062002e5d565b600060405180830381600087803b15801562001be157600080fd5b505af115801562001bf6573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff166381bad6f3600180600180602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518663ffffffff1660e01b815260040162001c849594939291906200309d565b600060405180830381600087803b15801562001c9f57600080fd5b505af115801562001cb4573d6000803e3d6000fd5b50505050602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f2b5af078ce280d812dc2241658dc5435c93408020e5418eef55a2b536de51c0f602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405160200162001d47919062002e40565b6040516020818303038152906040528360405162001d67929190620030fa565b60405180910390a2602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ac7c44c602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405160200162001de2919062002e40565b604051602081830303815290604052836040518363ffffffff1660e01b815260040162001e11929190620030fa565b600060405180830381600087803b15801562001e2c57600080fd5b505af115801562001e41573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff1663c88a5e6d601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b815260040162001ec792919062002f9f565b600060405180830381600087803b15801562001ee257600080fd5b505af115801562001ef7573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff166381bad6f3600180600180601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518663ffffffff1660e01b815260040162001f859594939291906200309d565b600060405180830381600087803b15801562001fa057600080fd5b505af115801562001fb5573d6000803e3d6000fd5b50505050602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f838360405162002025929190620032d9565b60405180910390a2601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631cff79cd83602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401620020af92919062002f11565b6000604051808303818588803b158015620020c957600080fd5b505af1158015620020de573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f820116820180604052508101906200210a9190620026ac565b505050505050565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156200225c57838290600052602060002090600202016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182018054806020026020016040519081016040528092919081815260200182805480156200224357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411620021ef5790505b5050505050815250508152602001906001019062002136565b50505050905090565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156200233f578382906000526020600020018054620022ab90620036a8565b80601f0160208091040260200160405190810160405280929190818152602001828054620022d990620036a8565b80156200232a5780601f10620022fe576101008083540402835291602001916200232a565b820191906000526020600020905b8154815290600101906020018083116200230c57829003601f168201915b50505050508152602001906001019062002289565b50505050905090565b6000600860009054906101000a900460ff16156200237857600860009054906101000a900460ff16905062002478565b6000801b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff1663667f9d707f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c7f6661696c656400000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b81526004016200241f92919062002ee4565b60206040518083038186803b1580156200243857600080fd5b505afa1580156200244d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200247391906200267a565b141590505b90565b606060158054806020026020016040519081016040528092919081815260200182805480156200250157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311620024b6575b5050505050905090565b601f60009054906101000a900460ff1681565b611813806200393d83390190565b613564806200515083390190565b61109080620086b483390190565b6111b9806200974483390190565b6110aa806200a8fd83390190565b613598806200b9a783390190565b610bcd806200ef3f83390190565b6110d7806200fb0c83390190565b61282d8062010be383390190565b6000620025b3620025ad8462003336565b6200330d565b905082815260208101848484011115620025d257620025d1620037ce565b5b620025df84828562003672565b509392505050565b600081519050620025f88162003908565b92915050565b6000815190506200260f8162003922565b92915050565b600082601f8301126200262d576200262c620037c9565b5b81516200263f8482602086016200259c565b91505092915050565b600060208284031215620026615762002660620037d8565b5b60006200267184828501620025e7565b91505092915050565b600060208284031215620026935762002692620037d8565b5b6000620026a384828501620025fe565b91505092915050565b600060208284031215620026c557620026c4620037d8565b5b600082015167ffffffffffffffff811115620026e657620026e5620037d3565b5b620026f48482850162002615565b91505092915050565b60006200270b838362002789565b60208301905092915050565b600062002725838362002b26565b60208301905092915050565b60006200273f838362002bf9565b905092915050565b600062002755838362002d65565b905092915050565b60006200276b838362002dad565b905092915050565b600062002781838362002dee565b905092915050565b62002794816200351c565b82525050565b620027a5816200351c565b82525050565b6000620027b882620033cc565b620027c4818562003472565b9350620027d1836200336c565b8060005b8381101562002808578151620027ec8882620026fd565b9750620027f98362003424565b925050600181019050620027d5565b5085935050505092915050565b60006200282282620033d7565b6200282e818562003483565b93506200283b836200337c565b8060005b838110156200287257815162002856888262002717565b9750620028638362003431565b9250506001810190506200283f565b5085935050505092915050565b60006200288c82620033e2565b62002898818562003494565b935083602082028501620028ac856200338c565b8060005b85811015620028ee5784840389528151620028cc858262002731565b9450620028d9836200343e565b925060208a01995050600181019050620028b0565b50829750879550505050505092915050565b60006200290d82620033e2565b620029198185620034a5565b9350836020820285016200292d856200338c565b8060005b858110156200296f57848403895281516200294d858262002731565b94506200295a836200343e565b925060208a0199505060018101905062002931565b50829750879550505050505092915050565b60006200298e82620033ed565b6200299a8185620034b6565b935083602082028501620029ae856200339c565b8060005b85811015620029f05784840389528151620029ce858262002747565b9450620029db836200344b565b925060208a01995050600181019050620029b2565b50829750879550505050505092915050565b600062002a0f82620033f8565b62002a1b8185620034c7565b93508360208202850162002a2f85620033ac565b8060005b8581101562002a71578484038952815162002a4f85826200275d565b945062002a5c8362003458565b925060208a0199505060018101905062002a33565b50829750879550505050505092915050565b600062002a908262003403565b62002a9c8185620034d8565b93508360208202850162002ab085620033bc565b8060005b8581101562002af2578484038952815162002ad0858262002773565b945062002add8362003465565b925060208a0199505060018101905062002ab4565b50829750879550505050505092915050565b62002b0f8162003530565b82525050565b62002b20816200353c565b82525050565b62002b318162003546565b82525050565b600062002b44826200340e565b62002b508185620034e9565b935062002b6281856020860162003672565b62002b6d81620037dd565b840191505092915050565b62002b8d62002b8782620035be565b62003714565b82525050565b62002b9e81620035d2565b82525050565b62002baf81620035e6565b82525050565b62002bc081620035fa565b82525050565b62002bd1816200360e565b82525050565b62002be28162003622565b82525050565b62002bf38162003636565b82525050565b600062002c068262003419565b62002c128185620034fa565b935062002c2481856020860162003672565b62002c2f81620037dd565b840191505092915050565b600062002c478262003419565b62002c5381856200350b565b935062002c6581856020860162003672565b62002c7081620037dd565b840191505092915050565b600062002c8a6003836200350b565b915062002c9782620037fb565b602082019050919050565b600062002cb16004836200350b565b915062002cbe8262003824565b602082019050919050565b600062002cd86004836200350b565b915062002ce5826200384d565b602082019050919050565b600062002cff6005836200350b565b915062002d0c8262003876565b602082019050919050565b600062002d266004836200350b565b915062002d33826200389f565b602082019050919050565b600062002d4d6003836200350b565b915062002d5a82620038c8565b602082019050919050565b6000604083016000830151848203600086015262002d84828262002bf9565b9150506020830151848203602086015262002da0828262002815565b9150508091505092915050565b600060408301600083015162002dc7600086018262002789565b506020830151848203602086015262002de182826200287f565b9150508091505092915050565b600060408301600083015162002e08600086018262002789565b506020830151848203602086015262002e22828262002815565b9150508091505092915050565b62002e3a81620035a7565b82525050565b600062002e4e828462002b78565b60148201915081905092915050565b600060208201905062002e7460008301846200279a565b92915050565b600060408201905062002e9160008301856200279a565b62002ea060208301846200279a565b9392505050565b600060608201905062002ebe60008301866200279a565b62002ecd60208301856200279a565b62002edc60408301846200279a565b949350505050565b600060408201905062002efb60008301856200279a565b62002f0a602083018462002b15565b9392505050565b600060408201905062002f2860008301856200279a565b818103602083015262002f3c818462002b37565b90509392505050565b600060408201905062002f5c60008301856200279a565b62002f6b602083018462002bb5565b9392505050565b600060408201905062002f8960008301856200279a565b62002f98602083018462002be8565b9392505050565b600060408201905062002fb660008301856200279a565b62002fc5602083018462002e2f565b9392505050565b6000602082019050818103600083015262002fe88184620027ab565b905092915050565b600060208201905081810360008301526200300c818462002900565b905092915050565b6000602082019050818103600083015262003030818462002981565b905092915050565b6000602082019050818103600083015262003054818462002a02565b905092915050565b6000602082019050818103600083015262003078818462002a83565b905092915050565b600060208201905062003097600083018462002b04565b92915050565b600060a082019050620030b4600083018862002b04565b620030c3602083018762002b04565b620030d2604083018662002b04565b620030e1606083018562002b04565b620030f060808301846200279a565b9695505050505050565b6000604082019050818103600083015262003116818562002b37565b905081810360208301526200312c818462002b37565b90509392505050565b60006040820190506200314c600083018562002bd7565b6200315b60208301846200279a565b9392505050565b600060408201905062003179600083018562002bd7565b62003188602083018462002bd7565b9392505050565b60006060820190508181036000830152620031ab818662002c3a565b9050620031bc602083018562002e2f565b620031cb604083018462002b04565b949350505050565b60006040820190508181036000830152620031ee8162002ca2565b90508181036020830152620032038162002cc9565b9050919050565b6000610100820190508181036000830152620032268162002cf0565b905081810360208301526200323b8162002d3e565b90506200324c604083018962002bc6565b6200325b606083018862002bd7565b6200326a608083018762002b93565b6200327960a083018662002ba4565b6200328860c08301856200279a565b6200329760e08301846200279a565b979650505050505050565b60006040820190508181036000830152620032bd8162002d17565b90508181036020830152620032d28162002c7b565b9050919050565b6000604082019050620032f0600083018562002e2f565b818103602083015262003304818462002b37565b90509392505050565b6000620033196200332c565b9050620033278282620036de565b919050565b6000604051905090565b600067ffffffffffffffff8211156200335457620033536200379a565b5b6200335f82620037dd565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000620035298262003587565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60008190506200358282620038f1565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000620035cb826200364a565b9050919050565b6000620035df8262003572565b9050919050565b6000620035f382620035a7565b9050919050565b60006200360782620035a7565b9050919050565b60006200361b82620035b1565b9050919050565b60006200362f82620035a7565b9050919050565b60006200364382620035a7565b9050919050565b600062003657826200365e565b9050919050565b60006200366b8262003587565b9050919050565b60005b838110156200369257808201518184015260208101905062003675565b83811115620036a2576000848401525b50505050565b60006002820490506001821680620036c157607f821691505b60208210811415620036d857620036d76200376b565b5b50919050565b620036e982620037dd565b810181811067ffffffffffffffff821117156200370b576200370a6200379a565b5b80604052505050565b6000620037218262003728565b9050919050565b60006200373582620037ee565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f54544b0000000000000000000000000000000000000000000000000000000000600082015250565b7f7a65746100000000000000000000000000000000000000000000000000000000600082015250565b7f5a45544100000000000000000000000000000000000000000000000000000000600082015250565b7f544f4b454e000000000000000000000000000000000000000000000000000000600082015250565b7f7465737400000000000000000000000000000000000000000000000000000000600082015250565b7f544b4e0000000000000000000000000000000000000000000000000000000000600082015250565b600381106200390557620039046200373c565b5b50565b620039138162003530565b81146200391f57600080fd5b50565b6200392d816200353c565b81146200393957600080fd5b5056fe60806040523480156200001157600080fd5b5060405162001813380380620018138339818101604052810190620000379190620001a3565b818181600390805190602001906200005192919062000075565b5080600490805190602001906200006a92919062000075565b5050505050620003ac565b8280546200008390620002bd565b90600052602060002090601f016020900481019282620000a75760008555620000f3565b82601f10620000c257805160ff1916838001178555620000f3565b82800160010185558215620000f3579182015b82811115620000f2578251825591602001919060010190620000d5565b5b50905062000102919062000106565b5090565b5b808211156200012157600081600090555060010162000107565b5090565b60006200013c620001368462000251565b62000228565b9050828152602081018484840111156200015b576200015a6200038c565b5b6200016884828562000287565b509392505050565b600082601f83011262000188576200018762000387565b5b81516200019a84826020860162000125565b91505092915050565b60008060408385031215620001bd57620001bc62000396565b5b600083015167ffffffffffffffff811115620001de57620001dd62000391565b5b620001ec8582860162000170565b925050602083015167ffffffffffffffff81111562000210576200020f62000391565b5b6200021e8582860162000170565b9150509250929050565b60006200023462000247565b9050620002428282620002f3565b919050565b6000604051905090565b600067ffffffffffffffff8211156200026f576200026e62000358565b5b6200027a826200039b565b9050602081019050919050565b60005b83811015620002a75780820151818401526020810190506200028a565b83811115620002b7576000848401525b50505050565b60006002820490506001821680620002d657607f821691505b60208210811415620002ed57620002ec62000329565b5b50919050565b620002fe826200039b565b810181811067ffffffffffffffff8211171562000320576200031f62000358565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b61145780620003bc6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806340c10f191161007157806340c10f19146101a357806370a08231146101bf57806395d89b41146101ef578063a457c2d71461020d578063a9059cbb1461023d578063dd62ed3e1461026d576100b4565b806306fdde03146100b9578063095ea7b3146100d757806318160ddd1461010757806323b872dd14610125578063313ce567146101555780633950935114610173575b600080fd5b6100c161029d565b6040516100ce9190610ecf565b60405180910390f35b6100f160048036038101906100ec9190610cf6565b61032f565b6040516100fe9190610eb4565b60405180910390f35b61010f610352565b60405161011c9190610ff1565b60405180910390f35b61013f600480360381019061013a9190610ca3565b61035c565b60405161014c9190610eb4565b60405180910390f35b61015d61038b565b60405161016a919061100c565b60405180910390f35b61018d60048036038101906101889190610cf6565b610394565b60405161019a9190610eb4565b60405180910390f35b6101bd60048036038101906101b89190610cf6565b6103cb565b005b6101d960048036038101906101d49190610c36565b6103d9565b6040516101e69190610ff1565b60405180910390f35b6101f7610421565b6040516102049190610ecf565b60405180910390f35b61022760048036038101906102229190610cf6565b6104b3565b6040516102349190610eb4565b60405180910390f35b61025760048036038101906102529190610cf6565b61052a565b6040516102649190610eb4565b60405180910390f35b61028760048036038101906102829190610c63565b61054d565b6040516102949190610ff1565b60405180910390f35b6060600380546102ac90611121565b80601f01602080910402602001604051908101604052809291908181526020018280546102d890611121565b80156103255780601f106102fa57610100808354040283529160200191610325565b820191906000526020600020905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b60008061033a6105d4565b90506103478185856105dc565b600191505092915050565b6000600254905090565b6000806103676105d4565b90506103748582856107a7565b61037f858585610833565b60019150509392505050565b60006012905090565b60008061039f6105d4565b90506103c08185856103b1858961054d565b6103bb9190611043565b6105dc565b600191505092915050565b6103d58282610aab565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461043090611121565b80601f016020809104026020016040519081016040528092919081815260200182805461045c90611121565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b5050505050905090565b6000806104be6105d4565b905060006104cc828661054d565b905083811015610511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050890610fb1565b60405180910390fd5b61051e82868684036105dc565b60019250505092915050565b6000806105356105d4565b9050610542818585610833565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561064c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064390610f91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156106bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b390610f11565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161079a9190610ff1565b60405180910390a3505050565b60006107b3848461054d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461082d578181101561081f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081690610f31565b60405180910390fd5b61082c84848484036105dc565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089a90610f71565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090a90610ef1565b60405180910390fd5b61091e838383610c02565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156109a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099b90610f51565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a929190610ff1565b60405180910390a3610aa5848484610c07565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1290610fd1565b60405180910390fd5b610b2760008383610c02565b8060026000828254610b399190611043565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610bea9190610ff1565b60405180910390a3610bfe60008383610c07565b5050565b505050565b505050565b600081359050610c1b816113f3565b92915050565b600081359050610c308161140a565b92915050565b600060208284031215610c4c57610c4b6111b1565b5b6000610c5a84828501610c0c565b91505092915050565b60008060408385031215610c7a57610c796111b1565b5b6000610c8885828601610c0c565b9250506020610c9985828601610c0c565b9150509250929050565b600080600060608486031215610cbc57610cbb6111b1565b5b6000610cca86828701610c0c565b9350506020610cdb86828701610c0c565b9250506040610cec86828701610c21565b9150509250925092565b60008060408385031215610d0d57610d0c6111b1565b5b6000610d1b85828601610c0c565b9250506020610d2c85828601610c21565b9150509250929050565b610d3f816110ab565b82525050565b6000610d5082611027565b610d5a8185611032565b9350610d6a8185602086016110ee565b610d73816111b6565b840191505092915050565b6000610d8b602383611032565b9150610d96826111c7565b604082019050919050565b6000610dae602283611032565b9150610db982611216565b604082019050919050565b6000610dd1601d83611032565b9150610ddc82611265565b602082019050919050565b6000610df4602683611032565b9150610dff8261128e565b604082019050919050565b6000610e17602583611032565b9150610e22826112dd565b604082019050919050565b6000610e3a602483611032565b9150610e458261132c565b604082019050919050565b6000610e5d602583611032565b9150610e688261137b565b604082019050919050565b6000610e80601f83611032565b9150610e8b826113ca565b602082019050919050565b610e9f816110d7565b82525050565b610eae816110e1565b82525050565b6000602082019050610ec96000830184610d36565b92915050565b60006020820190508181036000830152610ee98184610d45565b905092915050565b60006020820190508181036000830152610f0a81610d7e565b9050919050565b60006020820190508181036000830152610f2a81610da1565b9050919050565b60006020820190508181036000830152610f4a81610dc4565b9050919050565b60006020820190508181036000830152610f6a81610de7565b9050919050565b60006020820190508181036000830152610f8a81610e0a565b9050919050565b60006020820190508181036000830152610faa81610e2d565b9050919050565b60006020820190508181036000830152610fca81610e50565b9050919050565b60006020820190508181036000830152610fea81610e73565b9050919050565b60006020820190506110066000830184610e96565b92915050565b60006020820190506110216000830184610ea5565b92915050565b600081519050919050565b600082825260208201905092915050565b600061104e826110d7565b9150611059836110d7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561108e5761108d611153565b5b828201905092915050565b60006110a4826110b7565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561110c5780820151818401526020810190506110f1565b8381111561111b576000848401525b50505050565b6000600282049050600182168061113957607f821691505b6020821081141561114d5761114c611182565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6113fc81611099565b811461140757600080fd5b50565b611413816110d7565b811461141e57600080fd5b5056fea2646970667358221220d4c96329400732e284f624232c8d7228fc90c00ee7b1a48a85080262107815d864736f6c6343000807003360a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b81525034801561004657600080fd5b5060805160601c6134e361008160003960008181610768015281816107f701528181610b2201528181610bb10152610fcd01526134e36000f3fe60806040526004361061011f5760003560e01c80635b112591116100a0578063dda79b7511610064578063dda79b7514610382578063f2fde38b146103ad578063f31e62bf146103d6578063f340fa0114610401578063f45346dc1461041d5761011f565b80635b112591146102c3578063715018a6146102ee5780638c6f037f146103055780638da5cb5b1461032e578063ae7a3a6f146103595761011f565b8063485cc955116100e7578063485cc955146101eb5780634f1ef286146102145780635131ab591461023057806352d1902d1461026d57806357bec62f146102985761011f565b806310188aef146101245780631b8b921d1461014d5780631cff79cd1461017657806329c59b5d146101a65780633659cfe6146101c2575b600080fd5b34801561013057600080fd5b5061014b6004803603810190610146919061244e565b610446565b005b34801561015957600080fd5b50610174600480360381019061016f9190612543565b610512565b005b610190600480360381019061018b9190612543565b61057e565b60405161019d9190612bd6565b60405180910390f35b6101c060048036038101906101bb9190612543565b6105ec565b005b3480156101ce57600080fd5b506101e960048036038101906101e4919061244e565b610766565b005b3480156101f757600080fd5b50610212600480360381019061020d919061247b565b6108ef565b005b61022e600480360381019061022991906125a3565b610b20565b005b34801561023c57600080fd5b50610257600480360381019061025291906124bb565b610c5d565b6040516102649190612bd6565b60405180910390f35b34801561027957600080fd5b50610282610fc9565b60405161028f9190612b97565b60405180910390f35b3480156102a457600080fd5b506102ad611082565b6040516102ba9190612af3565b60405180910390f35b3480156102cf57600080fd5b506102d86110a8565b6040516102e59190612af3565b60405180910390f35b3480156102fa57600080fd5b506103036110ce565b005b34801561031157600080fd5b5061032c60048036038101906103279190612652565b6110e2565b005b34801561033a57600080fd5b50610343611260565b6040516103509190612af3565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b919061244e565b61128a565b005b34801561038e57600080fd5b50610397611356565b6040516103a49190612af3565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf919061244e565b61137c565b005b3480156103e257600080fd5b506103eb611400565b6040516103f89190612af3565b60405180910390f35b61041b6004803603810190610416919061244e565b611426565b005b34801561042957600080fd5b50610444600480360381019061043f91906125ff565b61159a565b005b600073ffffffffffffffffffffffffffffffffffffffff1660cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146104ce576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060cb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610571929190612bb2565b60405180910390a3505050565b6060600061058d858585611712565b90508473ffffffffffffffffffffffffffffffffffffffff167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f3486866040516105d993929190612e51565b60405180910390a2809150509392505050565b6000341415610627576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163460405161066f90612ade565b60006040518083038185875af1925050503d80600081146106ac576040519150601f19603f3d011682016040523d82523d6000602084013e6106b1565b606091505b505090506000151581151514156106f4576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a434600087876040516107589493929190612dd5565b60405180910390a350505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614156107f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ec90612c55565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108346117c9565b73ffffffffffffffffffffffffffffffffffffffff161461088a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088190612c75565b60405180910390fd5b61089381611820565b6108ec81600067ffffffffffffffff8111156108b2576108b1613012565b5b6040519080825280601f01601f1916602001820160405280156108e45781602001600182028036833780820191505090505b50600061182b565b50565b60008060019054906101000a900460ff161590508080156109205750600160008054906101000a900460ff1660ff16105b8061094d575061092f306119a8565b15801561094c5750600160008054906101000a900460ff1660ff16145b5b61098c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098390612cf5565b60405180910390fd5b60016000806101000a81548160ff021916908360ff16021790555080156109c9576001600060016101000a81548160ff0219169083151502179055505b6109d16119cb565b6109d9611a24565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a40576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260ca60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160cc60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015610b1b5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610b129190612bf8565b60405180910390a15b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba690612c55565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610bee6117c9565b73ffffffffffffffffffffffffffffffffffffffff1614610c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3b90612c75565b60405180910390fd5b610c4d82611820565b610c598282600161182b565b5050565b60606000841415610c9a576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ca48686611a75565b610cda576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff1663095ea7b386866040518363ffffffff1660e01b8152600401610d15929190612b6e565b602060405180830381600087803b158015610d2f57600080fd5b505af1158015610d43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6791906126da565b610d9d576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610daa868585611712565b9050610db68787611a75565b610dec576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e279190612af3565b60206040518083038186803b158015610e3f57600080fd5b505afa158015610e53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e779190612734565b90506000811115610f5257600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060cc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161415610f255760cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b610f5081838b73ffffffffffffffffffffffffffffffffffffffff16611b0d9092919063ffffffff16565b505b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382888888604051610fb393929190612e51565b60405180910390a3819250505095945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105090612cb5565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110d6611b93565b6110e06000611c11565b565b600084141561111d576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060cc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156111c05760cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b6111ed3382878773ffffffffffffffffffffffffffffffffffffffff16611cd7909392919063ffffffff16565b8573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4878787876040516112509493929190612dd5565b60405180910390a3505050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff1660c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611312576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060c960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611384611b93565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113eb90612c35565b60405180910390fd5b6113fd81611c11565b50565b60cc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000341415611461576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16346040516114a990612ade565b60006040518083038185875af1925050503d80600081146114e6576040519150601f19603f3d011682016040523d82523d6000602084013e6114eb565b606091505b5050905060001515811515141561152e576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a434600060405161158e929190612e15565b60405180910390a35050565b60008214156115d5576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060cc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116785760cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b6116a53382858573ffffffffffffffffffffffffffffffffffffffff16611cd7909392919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48585604051611704929190612e15565b60405180910390a350505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1634868660405161173f929190612aae565b60006040518083038185875af1925050503d806000811461177c576040519150601f19603f3d011682016040523d82523d6000602084013e611781565b606091505b5091509150816117bd576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80925050509392505050565b60006117f77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611d60565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611828611b93565b50565b6118577f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611d6a565b60000160009054906101000a900460ff161561187b5761187683611d74565b6119a3565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156118c157600080fd5b505afa9250505080156118f257506040513d601f19601f820116820180604052508101906118ef9190612707565b60015b611931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192890612d15565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d90612cd5565b60405180910390fd5b506119a2838383611e2d565b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1190612d95565b60405180910390fd5b611a22611e59565b565b600060019054906101000a900460ff16611a73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6a90612d95565b60405180910390fd5b565b60008273ffffffffffffffffffffffffffffffffffffffff1663095ea7b38360006040518363ffffffff1660e01b8152600401611ab3929190612b45565b602060405180830381600087803b158015611acd57600080fd5b505af1158015611ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0591906126da565b905092915050565b611b8e8363a9059cbb60e01b8484604051602401611b2c929190612b6e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611eba565b505050565b611b9b611f81565b73ffffffffffffffffffffffffffffffffffffffff16611bb9611260565b73ffffffffffffffffffffffffffffffffffffffff1614611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0690612d55565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611d5a846323b872dd60e01b858585604051602401611cf893929190612b0e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611eba565b50505050565b6000819050919050565b6000819050919050565b611d7d816119a8565b611dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db390612d35565b60405180910390fd5b80611de97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611d60565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611e3683611f89565b600082511180611e435750805b15611e5457611e528383611fd8565b505b505050565b600060019054906101000a900460ff16611ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9f90612d95565b60405180910390fd5b611eb8611eb3611f81565b611c11565b565b6000611f1c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166120059092919063ffffffff16565b9050600081511115611f7c5780806020019051810190611f3c91906126da565b611f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7290612db5565b60405180910390fd5b5b505050565b600033905090565b611f9281611d74565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611ffd83836040518060600160405280602781526020016134876027913961201d565b905092915050565b606061201484846000856120a3565b90509392505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516120479190612ac7565b600060405180830381855af49150503d8060008114612082576040519150601f19603f3d011682016040523d82523d6000602084013e612087565b606091505b509150915061209886838387612170565b925050509392505050565b6060824710156120e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120df90612c95565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516121119190612ac7565b60006040518083038185875af1925050503d806000811461214e576040519150601f19603f3d011682016040523d82523d6000602084013e612153565b606091505b5091509150612164878383876121e6565b92505050949350505050565b606083156121d3576000835114156121cb5761218b856119a8565b6121ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c190612d75565b60405180910390fd5b5b8290506121de565b6121dd838361225c565b5b949350505050565b606083156122495760008351141561224157612201856122ac565b612240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223790612d75565b60405180910390fd5b5b829050612254565b61225383836122cf565b5b949350505050565b60008251111561226f5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a39190612c13565b60405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156122e25781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123169190612c13565b60405180910390fd5b600061233261232d84612ea8565b612e83565b90508281526020810184848401111561234e5761234d613050565b5b612359848285612f9f565b509392505050565b6000813590506123708161342a565b92915050565b60008151905061238581613441565b92915050565b60008151905061239a81613458565b92915050565b60008083601f8401126123b6576123b5613046565b5b8235905067ffffffffffffffff8111156123d3576123d2613041565b5b6020830191508360018202830111156123ef576123ee61304b565b5b9250929050565b600082601f83011261240b5761240a613046565b5b813561241b84826020860161231f565b91505092915050565b6000813590506124338161346f565b92915050565b6000815190506124488161346f565b92915050565b6000602082840312156124645761246361305a565b5b600061247284828501612361565b91505092915050565b600080604083850312156124925761249161305a565b5b60006124a085828601612361565b92505060206124b185828601612361565b9150509250929050565b6000806000806000608086880312156124d7576124d661305a565b5b60006124e588828901612361565b95505060206124f688828901612361565b945050604061250788828901612424565b935050606086013567ffffffffffffffff81111561252857612527613055565b5b612534888289016123a0565b92509250509295509295909350565b60008060006040848603121561255c5761255b61305a565b5b600061256a86828701612361565b935050602084013567ffffffffffffffff81111561258b5761258a613055565b5b612597868287016123a0565b92509250509250925092565b600080604083850312156125ba576125b961305a565b5b60006125c885828601612361565b925050602083013567ffffffffffffffff8111156125e9576125e8613055565b5b6125f5858286016123f6565b9150509250929050565b6000806000606084860312156126185761261761305a565b5b600061262686828701612361565b935050602061263786828701612424565b925050604061264886828701612361565b9150509250925092565b60008060008060006080868803121561266e5761266d61305a565b5b600061267c88828901612361565b955050602061268d88828901612424565b945050604061269e88828901612361565b935050606086013567ffffffffffffffff8111156126bf576126be613055565b5b6126cb888289016123a0565b92509250509295509295909350565b6000602082840312156126f0576126ef61305a565b5b60006126fe84828501612376565b91505092915050565b60006020828403121561271d5761271c61305a565b5b600061272b8482850161238b565b91505092915050565b60006020828403121561274a5761274961305a565b5b600061275884828501612439565b91505092915050565b61276a81612f1c565b82525050565b61277981612f3a565b82525050565b600061278b8385612eef565b9350612798838584612f9f565b6127a18361305f565b840190509392505050565b60006127b88385612f00565b93506127c5838584612f9f565b82840190509392505050565b60006127dc82612ed9565b6127e68185612eef565b93506127f6818560208601612fae565b6127ff8161305f565b840191505092915050565b600061281582612ed9565b61281f8185612f00565b935061282f818560208601612fae565b80840191505092915050565b61284481612f7b565b82525050565b61285381612f8d565b82525050565b600061286482612ee4565b61286e8185612f0b565b935061287e818560208601612fae565b6128878161305f565b840191505092915050565b600061289f602683612f0b565b91506128aa82613070565b604082019050919050565b60006128c2602c83612f0b565b91506128cd826130bf565b604082019050919050565b60006128e5602c83612f0b565b91506128f08261310e565b604082019050919050565b6000612908602683612f0b565b91506129138261315d565b604082019050919050565b600061292b603883612f0b565b9150612936826131ac565b604082019050919050565b600061294e602983612f0b565b9150612959826131fb565b604082019050919050565b6000612971602e83612f0b565b915061297c8261324a565b604082019050919050565b6000612994602e83612f0b565b915061299f82613299565b604082019050919050565b60006129b7602d83612f0b565b91506129c2826132e8565b604082019050919050565b60006129da602083612f0b565b91506129e582613337565b602082019050919050565b60006129fd600083612eef565b9150612a0882613360565b600082019050919050565b6000612a20600083612f00565b9150612a2b82613360565b600082019050919050565b6000612a43601d83612f0b565b9150612a4e82613363565b602082019050919050565b6000612a66602b83612f0b565b9150612a718261338c565b604082019050919050565b6000612a89602a83612f0b565b9150612a94826133db565b604082019050919050565b612aa881612f64565b82525050565b6000612abb8284866127ac565b91508190509392505050565b6000612ad3828461280a565b915081905092915050565b6000612ae982612a13565b9150819050919050565b6000602082019050612b086000830184612761565b92915050565b6000606082019050612b236000830186612761565b612b306020830185612761565b612b3d6040830184612a9f565b949350505050565b6000604082019050612b5a6000830185612761565b612b67602083018461283b565b9392505050565b6000604082019050612b836000830185612761565b612b906020830184612a9f565b9392505050565b6000602082019050612bac6000830184612770565b92915050565b60006020820190508181036000830152612bcd81848661277f565b90509392505050565b60006020820190508181036000830152612bf081846127d1565b905092915050565b6000602082019050612c0d600083018461284a565b92915050565b60006020820190508181036000830152612c2d8184612859565b905092915050565b60006020820190508181036000830152612c4e81612892565b9050919050565b60006020820190508181036000830152612c6e816128b5565b9050919050565b60006020820190508181036000830152612c8e816128d8565b9050919050565b60006020820190508181036000830152612cae816128fb565b9050919050565b60006020820190508181036000830152612cce8161291e565b9050919050565b60006020820190508181036000830152612cee81612941565b9050919050565b60006020820190508181036000830152612d0e81612964565b9050919050565b60006020820190508181036000830152612d2e81612987565b9050919050565b60006020820190508181036000830152612d4e816129aa565b9050919050565b60006020820190508181036000830152612d6e816129cd565b9050919050565b60006020820190508181036000830152612d8e81612a36565b9050919050565b60006020820190508181036000830152612dae81612a59565b9050919050565b60006020820190508181036000830152612dce81612a7c565b9050919050565b6000606082019050612dea6000830187612a9f565b612df76020830186612761565b8181036040830152612e0a81848661277f565b905095945050505050565b6000606082019050612e2a6000830185612a9f565b612e376020830184612761565b8181036040830152612e48816129f0565b90509392505050565b6000604082019050612e666000830186612a9f565b8181036020830152612e7981848661277f565b9050949350505050565b6000612e8d612e9e565b9050612e998282612fe1565b919050565b6000604051905090565b600067ffffffffffffffff821115612ec357612ec2613012565b5b612ecc8261305f565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000612f2782612f44565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612f8682612f64565b9050919050565b6000612f9882612f6e565b9050919050565b82818337600083830152505050565b60005b83811015612fcc578082015181840152602081019050612fb1565b83811115612fdb576000848401525b50505050565b612fea8261305f565b810181811067ffffffffffffffff8211171561300957613008613012565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b61343381612f1c565b811461343e57600080fd5b50565b61344a81612f2e565b811461345557600080fd5b50565b61346181612f3a565b811461346c57600080fd5b50565b61347881612f64565b811461348357600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220a92291d9031c32880ffc1e5010a2c6663dffc6271b359692f77d40a3df8488cc64736f6c6343000807003360806040523480156200001157600080fd5b506040516200109038038062001090833981810160405281019062000037919062000106565b6001600081905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620000a7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506200018b565b600081519050620001008162000171565b92915050565b6000602082840312156200011f576200011e6200016c565b5b60006200012f84828501620000ef565b91505092915050565b600062000145826200014c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6200017c8162000138565b81146200018857600080fd5b50565b610ef5806200019b6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063116191b61461004657806321fc65f214610064578063d9caed1214610080575b600080fd5b61004e61009c565b60405161005b9190610a98565b60405180910390f35b61007e600480360381019061007991906107bc565b6100c2565b005b61009a60048036038101906100959190610769565b61024a565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ca6102ef565b610117600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16848773ffffffffffffffffffffffffffffffffffffffff1661033f9092919063ffffffff16565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635131ab5986868686866040518663ffffffff1660e01b815260040161017a959493929190610a21565b600060405180830381600087803b15801561019457600080fd5b505af11580156101a8573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906101d19190610871565b508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e85858560405161023393929190610b70565b60405180910390a36102436103c5565b5050505050565b6102526102ef565b61027d82828573ffffffffffffffffffffffffffffffffffffffff1661033f9092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb836040516102da9190610b55565b60405180910390a36102ea6103c5565b505050565b60026000541415610335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032c90610b35565b60405180910390fd5b6002600081905550565b6103c08363a9059cbb60e01b848460405160240161035e929190610a6f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506103cf565b505050565b6001600081905550565b6000610431826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166104969092919063ffffffff16565b905060008151111561049157808060200190518101906104519190610844565b610490576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048790610b15565b60405180910390fd5b5b505050565b60606104a584846000856104ae565b90509392505050565b6060824710156104f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ea90610ad5565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161051c9190610a0a565b60006040518083038185875af1925050503d8060008114610559576040519150601f19603f3d011682016040523d82523d6000602084013e61055e565b606091505b509150915061056f8783838761057b565b92505050949350505050565b606083156105de576000835114156105d657610596856105f1565b6105d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105cc90610af5565b60405180910390fd5b5b8290506105e9565b6105e88383610614565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156106275781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065b9190610ab3565b60405180910390fd5b600061067761067284610bc7565b610ba2565b90508281526020810184848401111561069357610692610d6a565b5b61069e848285610cc8565b509392505050565b6000813590506106b581610e7a565b92915050565b6000815190506106ca81610e91565b92915050565b60008083601f8401126106e6576106e5610d60565b5b8235905067ffffffffffffffff81111561070357610702610d5b565b5b60208301915083600182028301111561071f5761071e610d65565b5b9250929050565b600082601f83011261073b5761073a610d60565b5b815161074b848260208601610664565b91505092915050565b60008135905061076381610ea8565b92915050565b60008060006060848603121561078257610781610d74565b5b6000610790868287016106a6565b93505060206107a1868287016106a6565b92505060406107b286828701610754565b9150509250925092565b6000806000806000608086880312156107d8576107d7610d74565b5b60006107e6888289016106a6565b95505060206107f7888289016106a6565b945050604061080888828901610754565b935050606086013567ffffffffffffffff81111561082957610828610d6f565b5b610835888289016106d0565b92509250509295509295909350565b60006020828403121561085a57610859610d74565b5b6000610868848285016106bb565b91505092915050565b60006020828403121561088757610886610d74565b5b600082015167ffffffffffffffff8111156108a5576108a4610d6f565b5b6108b184828501610726565b91505092915050565b6108c381610c3b565b82525050565b60006108d58385610c0e565b93506108e2838584610cb9565b6108eb83610d79565b840190509392505050565b600061090182610bf8565b61090b8185610c1f565b935061091b818560208601610cc8565b80840191505092915050565b61093081610c83565b82525050565b600061094182610c03565b61094b8185610c2a565b935061095b818560208601610cc8565b61096481610d79565b840191505092915050565b600061097c602683610c2a565b915061098782610d8a565b604082019050919050565b600061099f601d83610c2a565b91506109aa82610dd9565b602082019050919050565b60006109c2602a83610c2a565b91506109cd82610e02565b604082019050919050565b60006109e5601f83610c2a565b91506109f082610e51565b602082019050919050565b610a0481610c79565b82525050565b6000610a1682846108f6565b915081905092915050565b6000608082019050610a3660008301886108ba565b610a4360208301876108ba565b610a5060408301866109fb565b8181036060830152610a638184866108c9565b90509695505050505050565b6000604082019050610a8460008301856108ba565b610a9160208301846109fb565b9392505050565b6000602082019050610aad6000830184610927565b92915050565b60006020820190508181036000830152610acd8184610936565b905092915050565b60006020820190508181036000830152610aee8161096f565b9050919050565b60006020820190508181036000830152610b0e81610992565b9050919050565b60006020820190508181036000830152610b2e816109b5565b9050919050565b60006020820190508181036000830152610b4e816109d8565b9050919050565b6000602082019050610b6a60008301846109fb565b92915050565b6000604082019050610b8560008301866109fb565b8181036020830152610b988184866108c9565b9050949350505050565b6000610bac610bbd565b9050610bb88282610cfb565b919050565b6000604051905090565b600067ffffffffffffffff821115610be257610be1610d2c565b5b610beb82610d79565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000610c4682610c59565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610c8e82610c95565b9050919050565b6000610ca082610ca7565b9050919050565b6000610cb282610c59565b9050919050565b82818337600083830152505050565b60005b83811015610ce6578082015181840152602081019050610ccb565b83811115610cf5576000848401525b50505050565b610d0482610d79565b810181811067ffffffffffffffff82111715610d2357610d22610d2c565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b610e8381610c3b565b8114610e8e57600080fd5b50565b610e9a81610c4d565b8114610ea557600080fd5b50565b610eb181610c79565b8114610ebc57600080fd5b5056fea2646970667358221220c6f7c0f9935341aaaabcabf7504d01bbd38a0606132004742a97e6a200eb432564736f6c6343000807003360806040523480156200001157600080fd5b50604051620011b9380380620011b9833981810160405281019062000037919062000180565b6001600081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480620000a75750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15620000df576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506200021a565b6000815190506200017a8162000200565b92915050565b600080604083850312156200019a5762000199620001fb565b5b6000620001aa8582860162000169565b9250506020620001bd8582860162000169565b9150509250929050565b6000620001d482620001db565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6200020b81620001c7565b81146200021757600080fd5b50565b610f8f806200022a6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806302a04c0d14610051578063116191b61461006d578063e8f9cb3a1461008b578063f3fef3a3146100a9575b600080fd5b61006b6004803603810190610066919061082e565b6100c5565b005b610075610279565b6040516100829190610b20565b60405180910390f35b61009361029f565b6040516100a09190610b05565b60405180910390f35b6100c360048036038101906100be91906107ee565b6102c5565b005b6100cd610374565b61013c600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166103c49092919063ffffffff16565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635131ab59600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868686866040518663ffffffff1660e01b81526004016101c1959493929190610a8e565b600060405180830381600087803b1580156101db57600080fd5b505af11580156101ef573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061021891906108cf565b508373ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced84848460405161026393929190610bf8565b60405180910390a261027361044a565b50505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6102cd610374565b61031a8282600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166103c49092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364826040516103609190610bdd565b60405180910390a261037061044a565b5050565b600260005414156103ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103b190610bbd565b60405180910390fd5b6002600081905550565b6104458363a9059cbb60e01b84846040516024016103e3929190610adc565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610454565b505050565b6001600081905550565b60006104b6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661051b9092919063ffffffff16565b905060008151111561051657808060200190518101906104d691906108a2565b610515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050c90610b9d565b60405180910390fd5b5b505050565b606061052a8484600085610533565b90509392505050565b606082471015610578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056f90610b5d565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516105a19190610a77565b60006040518083038185875af1925050503d80600081146105de576040519150601f19603f3d011682016040523d82523d6000602084013e6105e3565b606091505b50915091506105f487838387610600565b92505050949350505050565b606083156106635760008351141561065b5761061b85610676565b61065a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065190610b7d565b60405180910390fd5b5b82905061066e565b61066d8383610699565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156106ac5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e09190610b3b565b60405180910390fd5b60006106fc6106f784610c4f565b610c2a565b90508281526020810184848401111561071857610717610e04565b5b610723848285610d62565b509392505050565b60008135905061073a81610f14565b92915050565b60008151905061074f81610f2b565b92915050565b60008083601f84011261076b5761076a610dfa565b5b8235905067ffffffffffffffff81111561078857610787610df5565b5b6020830191508360018202830111156107a4576107a3610dff565b5b9250929050565b600082601f8301126107c0576107bf610dfa565b5b81516107d08482602086016106e9565b91505092915050565b6000813590506107e881610f42565b92915050565b6000806040838503121561080557610804610e0e565b5b60006108138582860161072b565b9250506020610824858286016107d9565b9150509250929050565b6000806000806060858703121561084857610847610e0e565b5b60006108568782880161072b565b9450506020610867878288016107d9565b935050604085013567ffffffffffffffff81111561088857610887610e09565b5b61089487828801610755565b925092505092959194509250565b6000602082840312156108b8576108b7610e0e565b5b60006108c684828501610740565b91505092915050565b6000602082840312156108e5576108e4610e0e565b5b600082015167ffffffffffffffff81111561090357610902610e09565b5b61090f848285016107ab565b91505092915050565b61092181610cc3565b82525050565b60006109338385610c96565b9350610940838584610d53565b61094983610e13565b840190509392505050565b600061095f82610c80565b6109698185610ca7565b9350610979818560208601610d62565b80840191505092915050565b61098e81610d0b565b82525050565b61099d81610d1d565b82525050565b60006109ae82610c8b565b6109b88185610cb2565b93506109c8818560208601610d62565b6109d181610e13565b840191505092915050565b60006109e9602683610cb2565b91506109f482610e24565b604082019050919050565b6000610a0c601d83610cb2565b9150610a1782610e73565b602082019050919050565b6000610a2f602a83610cb2565b9150610a3a82610e9c565b604082019050919050565b6000610a52601f83610cb2565b9150610a5d82610eeb565b602082019050919050565b610a7181610d01565b82525050565b6000610a838284610954565b915081905092915050565b6000608082019050610aa36000830188610918565b610ab06020830187610918565b610abd6040830186610a68565b8181036060830152610ad0818486610927565b90509695505050505050565b6000604082019050610af16000830185610918565b610afe6020830184610a68565b9392505050565b6000602082019050610b1a6000830184610985565b92915050565b6000602082019050610b356000830184610994565b92915050565b60006020820190508181036000830152610b5581846109a3565b905092915050565b60006020820190508181036000830152610b76816109dc565b9050919050565b60006020820190508181036000830152610b96816109ff565b9050919050565b60006020820190508181036000830152610bb681610a22565b9050919050565b60006020820190508181036000830152610bd681610a45565b9050919050565b6000602082019050610bf26000830184610a68565b92915050565b6000604082019050610c0d6000830186610a68565b8181036020830152610c20818486610927565b9050949350505050565b6000610c34610c45565b9050610c408282610d95565b919050565b6000604051905090565b600067ffffffffffffffff821115610c6a57610c69610dc6565b5b610c7382610e13565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000610cce82610ce1565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610d1682610d2f565b9050919050565b6000610d2882610d2f565b9050919050565b6000610d3a82610d41565b9050919050565b6000610d4c82610ce1565b9050919050565b82818337600083830152505050565b60005b83811015610d80578082015181840152602081019050610d65565b83811115610d8f576000848401525b50505050565b610d9e82610e13565b810181811067ffffffffffffffff82111715610dbd57610dbc610dc6565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b610f1d81610cc3565b8114610f2857600080fd5b50565b610f3481610cd5565b8114610f3f57600080fd5b50565b610f4b81610d01565b8114610f5657600080fd5b5056fea2646970667358221220bdea1bc357822401542c5c1b57f5c8696f7fa6c99ecfef1bfd392504260c0f1164736f6c63430008070033608060405234801561001057600080fd5b5061108a806100206000396000f3fe60806040526004361061003f5760003560e01c8063357fc5a2146100445780636ed701691461006d578063e04d4f9714610084578063f05b6abf146100a0575b600080fd5b34801561005057600080fd5b5061006b6004803603810190610066919061085a565b6100c9565b005b34801561007957600080fd5b50610082610138565b005b61009e600480360381019061009991906107eb565b610171565b005b3480156100ac57600080fd5b506100c760048036038101906100c29190610733565b6101b5565b005b6100f63382858573ffffffffffffffffffffffffffffffffffffffff166101f7909392919063ffffffff16565b7f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af603384848460405161012b9493929190610bb0565b60405180910390a1505050565b7fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0336040516101679190610b0b565b60405180910390a1565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa33348585856040516101a8959493929190610bf5565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516101ea9493929190610b5d565b60405180910390a1505050565b61027a846323b872dd60e01b85858560405160240161021893929190610b26565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610280565b50505050565b60006102e2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166103479092919063ffffffff16565b9050600081511115610342578080602001905181019061030291906107be565b610341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033890610cb1565b60405180910390fd5b5b505050565b6060610356848460008561035f565b90509392505050565b6060824710156103a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039b90610c71565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516103cd9190610af4565b60006040518083038185875af1925050503d806000811461040a576040519150601f19603f3d011682016040523d82523d6000602084013e61040f565b606091505b50915091506104208783838761042c565b92505050949350505050565b6060831561048f5760008351141561048757610447856104a2565b610486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047d90610c91565b60405180910390fd5b5b82905061049a565b61049983836104c5565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156104d85781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050c9190610c4f565b60405180910390fd5b600061052861052384610cf6565b610cd1565b9050808382526020820190508285602086028201111561054b5761054a610f23565b5b60005b8581101561059957813567ffffffffffffffff81111561057157610570610f1e565b5b80860161057e89826106f0565b8552602085019450602084019350505060018101905061054e565b5050509392505050565b60006105b66105b184610d22565b610cd1565b905080838252602082019050828560208602820111156105d9576105d8610f23565b5b60005b8581101561060957816105ef888261071e565b8452602084019350602083019250506001810190506105dc565b5050509392505050565b600061062661062184610d4e565b610cd1565b90508281526020810184848401111561064257610641610f28565b5b61064d848285610e7c565b509392505050565b6000813590506106648161100f565b92915050565b600082601f83011261067f5761067e610f1e565b5b813561068f848260208601610515565b91505092915050565b600082601f8301126106ad576106ac610f1e565b5b81356106bd8482602086016105a3565b91505092915050565b6000813590506106d581611026565b92915050565b6000815190506106ea81611026565b92915050565b600082601f83011261070557610704610f1e565b5b8135610715848260208601610613565b91505092915050565b60008135905061072d8161103d565b92915050565b60008060006060848603121561074c5761074b610f32565b5b600084013567ffffffffffffffff81111561076a57610769610f2d565b5b6107768682870161066a565b935050602084013567ffffffffffffffff81111561079757610796610f2d565b5b6107a386828701610698565b92505060406107b4868287016106c6565b9150509250925092565b6000602082840312156107d4576107d3610f32565b5b60006107e2848285016106db565b91505092915050565b60008060006060848603121561080457610803610f32565b5b600084013567ffffffffffffffff81111561082257610821610f2d565b5b61082e868287016106f0565b935050602061083f8682870161071e565b9250506040610850868287016106c6565b9150509250925092565b60008060006060848603121561087357610872610f32565b5b60006108818682870161071e565b935050602061089286828701610655565b92505060406108a386828701610655565b9150509250925092565b60006108b983836109fb565b905092915050565b60006108cd8383610ad6565b60208301905092915050565b6108e281610e34565b82525050565b60006108f382610d9f565b6108fd8185610de5565b93508360208202850161090f85610d7f565b8060005b8581101561094b578484038952815161092c85826108ad565b945061093783610dcb565b925060208a01995050600181019050610913565b50829750879550505050505092915050565b600061096882610daa565b6109728185610df6565b935061097d83610d8f565b8060005b838110156109ae57815161099588826108c1565b97506109a083610dd8565b925050600181019050610981565b5085935050505092915050565b6109c481610e46565b82525050565b60006109d582610db5565b6109df8185610e07565b93506109ef818560208601610e8b565b80840191505092915050565b6000610a0682610dc0565b610a108185610e12565b9350610a20818560208601610e8b565b610a2981610f37565b840191505092915050565b6000610a3f82610dc0565b610a498185610e23565b9350610a59818560208601610e8b565b610a6281610f37565b840191505092915050565b6000610a7a602683610e23565b9150610a8582610f48565b604082019050919050565b6000610a9d601d83610e23565b9150610aa882610f97565b602082019050919050565b6000610ac0602a83610e23565b9150610acb82610fc0565b604082019050919050565b610adf81610e72565b82525050565b610aee81610e72565b82525050565b6000610b0082846109ca565b915081905092915050565b6000602082019050610b2060008301846108d9565b92915050565b6000606082019050610b3b60008301866108d9565b610b4860208301856108d9565b610b556040830184610ae5565b949350505050565b6000608082019050610b7260008301876108d9565b8181036020830152610b8481866108e8565b90508181036040830152610b98818561095d565b9050610ba760608301846109bb565b95945050505050565b6000608082019050610bc560008301876108d9565b610bd26020830186610ae5565b610bdf60408301856108d9565b610bec60608301846108d9565b95945050505050565b600060a082019050610c0a60008301886108d9565b610c176020830187610ae5565b8181036040830152610c298186610a34565b9050610c386060830185610ae5565b610c4560808301846109bb565b9695505050505050565b60006020820190508181036000830152610c698184610a34565b905092915050565b60006020820190508181036000830152610c8a81610a6d565b9050919050565b60006020820190508181036000830152610caa81610a90565b9050919050565b60006020820190508181036000830152610cca81610ab3565b9050919050565b6000610cdb610cec565b9050610ce78282610ebe565b919050565b6000604051905090565b600067ffffffffffffffff821115610d1157610d10610eef565b5b602082029050602081019050919050565b600067ffffffffffffffff821115610d3d57610d3c610eef565b5b602082029050602081019050919050565b600067ffffffffffffffff821115610d6957610d68610eef565b5b610d7282610f37565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000610e3f82610e52565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015610ea9578082015181840152602081019050610e8e565b83811115610eb8576000848401525b50505050565b610ec782610f37565b810181811067ffffffffffffffff82111715610ee657610ee5610eef565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b61101881610e34565b811461102357600080fd5b50565b61102f81610e46565b811461103a57600080fd5b50565b61104681610e72565b811461105157600080fd5b5056fea2646970667358221220086a1c9f56ed96506c7198d50cf431a5b03003c16cd4168d2395cdedfc1ac06164736f6c6343000807003360a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152503480156200004757600080fd5b50620000586200005e60201b60201c565b62000208565b600060019054906101000a900460ff1615620000b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a8906200015c565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff1614620001225760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff6040516200011991906200017e565b60405180910390a15b565b6000620001336027836200019b565b91506200014082620001b9565b604082019050919050565b6200015681620001ac565b82525050565b60006020820190508181036000830152620001778162000124565b9050919050565b60006020820190506200019560008301846200014b565b92915050565b600082825260208201905092915050565b600060ff82169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60805160601c613355620002436000396000818161063e015281816106cd015281816107df0152818161086e015261091e01526133556000f3fe6080604052600436106100fd5760003560e01c806352d1902d11610095578063bcf7f32b11610064578063bcf7f32b146102d7578063c39aca3714610300578063c4d66de814610329578063f2fde38b14610352578063f45346dc1461037b576100fd565b806352d1902d14610241578063715018a61461026c5780637993c1e0146102835780638da5cb5b146102ac576100fd565b80632e1a7d4d116100d15780632e1a7d4d146101a85780633659cfe6146101d15780633ce4a5bc146101fa5780634f1ef28614610225576100fd565b8062173d46146101025780630ac7c44c1461012d578063135390f914610156578063267e75a01461017f575b600080fd5b34801561010e57600080fd5b506101176103a4565b6040516101249190612814565b60405180910390f35b34801561013957600080fd5b50610154600480360381019061014f9190612120565b6103ca565b005b34801561016257600080fd5b5061017d6004803603810190610178919061219c565b610421565b005b34801561018b57600080fd5b506101a660048036038101906101a191906123bf565b610508565b005b3480156101b457600080fd5b506101cf60048036038101906101ca9190612365565b6105a5565b005b3480156101dd57600080fd5b506101f860048036038101906101f39190611faa565b61063c565b005b34801561020657600080fd5b5061020f6107c5565b60405161021c9190612814565b60405180910390f35b61023f600480360381019061023a9190611fd7565b6107dd565b005b34801561024d57600080fd5b5061025661091a565b6040516102639190612a4b565b60405180910390f35b34801561027857600080fd5b506102816109d3565b005b34801561028f57600080fd5b506102aa60048036038101906102a5919061220b565b6109e7565b005b3480156102b857600080fd5b506102c1610ad4565b6040516102ce9190612814565b60405180910390f35b3480156102e357600080fd5b506102fe60048036038101906102f991906122af565b610afe565b005b34801561030c57600080fd5b50610327600480360381019061032291906122af565b610bf2565b005b34801561033557600080fd5b50610350600480360381019061034b9190611faa565b610e24565b005b34801561035e57600080fd5b5061037960048036038101906103749190611faa565b610fce565b005b34801561038757600080fd5b506103a2600480360381019061039d9190612073565b611052565b005b60c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff167f2b5af078ce280d812dc2241658dc5435c93408020e5418eef55a2b536de51c0f84848460405161041493929190612a66565b60405180910390a2505050565b600061042d838361120e565b90503373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716838686858773ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104b157600080fd5b505afa1580156104c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e99190612392565b6040516104fa9594939291906129b5565b60405180910390a250505050565b610511836114fe565b3373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716600073735b14bb79463307aacbed86daf3322b1e6226ab60405160200161057091906127cd565b6040516020818303038152906040528660008088886040516105989796959493929190612866565b60405180910390a2505050565b6105ae816114fe565b3373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716600073735b14bb79463307aacbed86daf3322b1e6226ab60405160200161060d91906127cd565b604051602081830303815290604052846000806040516106319594939291906128d7565b60405180910390a250565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614156106cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c290612afc565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661070a61172d565b73ffffffffffffffffffffffffffffffffffffffff1614610760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075790612b1c565b60405180910390fd5b61076981611784565b6107c281600067ffffffffffffffff81111561078857610787612f01565b5b6040519080825280601f01601f1916602001820160405280156107ba5781602001600182028036833780820191505090505b50600061178f565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab81565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16141561086c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086390612afc565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108ab61172d565b73ffffffffffffffffffffffffffffffffffffffff1614610901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f890612b1c565b60405180910390fd5b61090a82611784565b6109168282600161178f565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16146109aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a190612b3c565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b6109db61190c565b6109e5600061198a565b565b60006109f3858561120e565b90503373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716858888858973ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a7757600080fd5b505afa158015610a8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aaf9190612392565b8989604051610ac49796959493929190612944565b60405180910390a2505050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b77576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b8152600401610bb8959493929190612c3c565b600060405180830381600087803b158015610bd257600080fd5b505af1158015610be6573d6000803e3d6000fd5b50505050505050505050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c6b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610ce457503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610d1b576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166347e7ef2484866040518363ffffffff1660e01b8152600401610d56929190612a22565b602060405180830381600087803b158015610d7057600080fd5b505af1158015610d84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da891906120c6565b508273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b8152600401610dea959493929190612c3c565b600060405180830381600087803b158015610e0457600080fd5b505af1158015610e18573d6000803e3d6000fd5b50505050505050505050565b60008060019054906101000a900460ff16159050808015610e555750600160008054906101000a900460ff1660ff16105b80610e825750610e6430611a50565b158015610e815750600160008054906101000a900460ff1660ff16145b5b610ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb890612b7c565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610efe576001600060016101000a81548160ff0219169083151502179055505b610f06611a73565b610f0e611acc565b60c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660c960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015610fca5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610fc19190612a9f565b60405180910390a15b5050565b610fd661190c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103d90612adc565b60405180910390fd5b61104f8161198a565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110cb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061114457503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561117b576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166347e7ef2482846040518363ffffffff1660e01b81526004016111b6929190612a22565b602060405180830381600087803b1580156111d057600080fd5b505af11580156111e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120891906120c6565b50505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1663d9eeebed6040518163ffffffff1660e01b8152600401604080518083038186803b15801561125857600080fd5b505afa15801561126c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112909190612033565b915091508173ffffffffffffffffffffffffffffffffffffffff166323b872dd3373735b14bb79463307aacbed86daf3322b1e6226ab846040518463ffffffff1660e01b81526004016112e59392919061282f565b602060405180830381600087803b1580156112ff57600080fd5b505af1158015611313573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133791906120c6565b61136d576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff1660e01b81526004016113aa9392919061282f565b602060405180830381600087803b1580156113c457600080fd5b505af11580156113d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fc91906120c6565b611432576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166342966c68866040518263ffffffff1660e01b815260040161146b9190612c91565b602060405180830381600087803b15801561148557600080fd5b505af1158015611499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bd91906120c6565b6114f3576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b809250505092915050565b60c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b815260040161155d9392919061282f565b602060405180830381600087803b15801561157757600080fd5b505af115801561158b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115af91906120c6565b6115e5576040517fa8c6fd4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b81526004016116409190612c91565b600060405180830381600087803b15801561165a57600080fd5b505af115801561166e573d6000803e3d6000fd5b50505050600073735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff16826040516116ac906127ff565b60006040518083038185875af1925050503d80600081146116e9576040519150601f19603f3d011682016040523d82523d6000602084013e6116ee565b606091505b5050905080611729576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b600061175b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611b1d565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61178c61190c565b50565b6117bb7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611b27565b60000160009054906101000a900460ff16156117df576117da83611b31565b611907565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561182557600080fd5b505afa92505050801561185657506040513d601f19601f8201168201806040525081019061185391906120f3565b60015b611895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188c90612b9c565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146118fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f190612b5c565b60405180910390fd5b50611906838383611bea565b5b505050565b611914611c16565b73ffffffffffffffffffffffffffffffffffffffff16611932610ad4565b73ffffffffffffffffffffffffffffffffffffffff1614611988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197f90612bdc565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab990612c1c565b60405180910390fd5b611aca611c1e565b565b600060019054906101000a900460ff16611b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1290612c1c565b60405180910390fd5b565b6000819050919050565b6000819050919050565b611b3a81611a50565b611b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7090612bbc565b60405180910390fd5b80611ba67f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611b1d565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611bf383611c7f565b600082511180611c005750805b15611c1157611c0f8383611cce565b505b505050565b600033905090565b600060019054906101000a900460ff16611c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6490612c1c565b60405180910390fd5b611c7d611c78611c16565b61198a565b565b611c8881611b31565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611cf383836040518060600160405280602781526020016132f960279139611cfb565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051611d2591906127e8565b600060405180830381855af49150503d8060008114611d60576040519150601f19603f3d011682016040523d82523d6000602084013e611d65565b606091505b5091509150611d7686838387611d81565b925050509392505050565b60608315611de457600083511415611ddc57611d9c85611a50565b611ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd290612bfc565b60405180910390fd5b5b829050611def565b611dee8383611df7565b5b949350505050565b600082511115611e0a5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3e9190612aba565b60405180910390fd5b6000611e5a611e5584612cd1565b612cac565b905082815260208101848484011115611e7657611e75612f4e565b5b611e81848285612e6a565b509392505050565b600081359050611e988161329c565b92915050565b600081519050611ead8161329c565b92915050565b600081519050611ec2816132b3565b92915050565b600081519050611ed7816132ca565b92915050565b60008083601f840112611ef357611ef2612f3a565b5b8235905067ffffffffffffffff811115611f1057611f0f612f35565b5b602083019150836001820283011115611f2c57611f2b612f49565b5b9250929050565b600082601f830112611f4857611f47612f3a565b5b8135611f58848260208601611e47565b91505092915050565b600060608284031215611f7757611f76612f3f565b5b81905092915050565b600081359050611f8f816132e1565b92915050565b600081519050611fa4816132e1565b92915050565b600060208284031215611fc057611fbf612f5d565b5b6000611fce84828501611e89565b91505092915050565b60008060408385031215611fee57611fed612f5d565b5b6000611ffc85828601611e89565b925050602083013567ffffffffffffffff81111561201d5761201c612f53565b5b61202985828601611f33565b9150509250929050565b6000806040838503121561204a57612049612f5d565b5b600061205885828601611e9e565b925050602061206985828601611f95565b9150509250929050565b60008060006060848603121561208c5761208b612f5d565b5b600061209a86828701611e89565b93505060206120ab86828701611f80565b92505060406120bc86828701611e89565b9150509250925092565b6000602082840312156120dc576120db612f5d565b5b60006120ea84828501611eb3565b91505092915050565b60006020828403121561210957612108612f5d565b5b600061211784828501611ec8565b91505092915050565b60008060006040848603121561213957612138612f5d565b5b600084013567ffffffffffffffff81111561215757612156612f53565b5b61216386828701611f33565b935050602084013567ffffffffffffffff81111561218457612183612f53565b5b61219086828701611edd565b92509250509250925092565b6000806000606084860312156121b5576121b4612f5d565b5b600084013567ffffffffffffffff8111156121d3576121d2612f53565b5b6121df86828701611f33565b93505060206121f086828701611f80565b925050604061220186828701611e89565b9150509250925092565b60008060008060006080868803121561222757612226612f5d565b5b600086013567ffffffffffffffff81111561224557612244612f53565b5b61225188828901611f33565b955050602061226288828901611f80565b945050604061227388828901611e89565b935050606086013567ffffffffffffffff81111561229457612293612f53565b5b6122a088828901611edd565b92509250509295509295909350565b60008060008060008060a087890312156122cc576122cb612f5d565b5b600087013567ffffffffffffffff8111156122ea576122e9612f53565b5b6122f689828a01611f61565b965050602061230789828a01611e89565b955050604061231889828a01611f80565b945050606061232989828a01611e89565b935050608087013567ffffffffffffffff81111561234a57612349612f53565b5b61235689828a01611edd565b92509250509295509295509295565b60006020828403121561237b5761237a612f5d565b5b600061238984828501611f80565b91505092915050565b6000602082840312156123a8576123a7612f5d565b5b60006123b684828501611f95565b91505092915050565b6000806000604084860312156123d8576123d7612f5d565b5b60006123e686828701611f80565b935050602084013567ffffffffffffffff81111561240757612406612f53565b5b61241386828701611edd565b92509250509250925092565b61242881612de7565b82525050565b61243781612de7565b82525050565b61244e61244982612de7565b612edd565b82525050565b61245d81612e05565b82525050565b600061246f8385612d18565b935061247c838584612e6a565b61248583612f62565b840190509392505050565b600061249c8385612d29565b93506124a9838584612e6a565b6124b283612f62565b840190509392505050565b60006124c882612d02565b6124d28185612d29565b93506124e2818560208601612e79565b6124eb81612f62565b840191505092915050565b600061250182612d02565b61250b8185612d3a565b935061251b818560208601612e79565b80840191505092915050565b61253081612e46565b82525050565b61253f81612e58565b82525050565b600061255082612d0d565b61255a8185612d45565b935061256a818560208601612e79565b61257381612f62565b840191505092915050565b600061258b602683612d45565b915061259682612f80565b604082019050919050565b60006125ae602c83612d45565b91506125b982612fcf565b604082019050919050565b60006125d1602c83612d45565b91506125dc8261301e565b604082019050919050565b60006125f4603883612d45565b91506125ff8261306d565b604082019050919050565b6000612617602983612d45565b9150612622826130bc565b604082019050919050565b600061263a602e83612d45565b91506126458261310b565b604082019050919050565b600061265d602e83612d45565b91506126688261315a565b604082019050919050565b6000612680602d83612d45565b915061268b826131a9565b604082019050919050565b60006126a3602083612d45565b91506126ae826131f8565b602082019050919050565b60006126c6600083612d29565b91506126d182613221565b600082019050919050565b60006126e9600083612d3a565b91506126f482613221565b600082019050919050565b600061270c601d83612d45565b915061271782613224565b602082019050919050565b600061272f602b83612d45565b915061273a8261324d565b604082019050919050565b6000606083016127586000840184612d6d565b858303600087015261276b838284612463565b9250505061277c6020840184612d56565b612789602086018261241f565b506127976040840184612dd0565b6127a460408601826127af565b508091505092915050565b6127b881612e2f565b82525050565b6127c781612e2f565b82525050565b60006127d9828461243d565b60148201915081905092915050565b60006127f482846124f6565b915081905092915050565b600061280a826126dc565b9150819050919050565b6000602082019050612829600083018461242e565b92915050565b6000606082019050612844600083018661242e565b612851602083018561242e565b61285e60408301846127be565b949350505050565b600060c08201905061287b600083018a61242e565b818103602083015261288d81896124bd565b905061289c60408301886127be565b6128a96060830187612527565b6128b66080830186612527565b81810360a08301526128c9818486612490565b905098975050505050505050565b600060c0820190506128ec600083018861242e565b81810360208301526128fe81876124bd565b905061290d60408301866127be565b61291a6060830185612527565b6129276080830184612527565b81810360a0830152612938816126b9565b90509695505050505050565b600060c082019050612959600083018a61242e565b818103602083015261296b81896124bd565b905061297a60408301886127be565b61298760608301876127be565b61299460808301866127be565b81810360a08301526129a7818486612490565b905098975050505050505050565b600060c0820190506129ca600083018861242e565b81810360208301526129dc81876124bd565b90506129eb60408301866127be565b6129f860608301856127be565b612a0560808301846127be565b81810360a0830152612a16816126b9565b90509695505050505050565b6000604082019050612a37600083018561242e565b612a4460208301846127be565b9392505050565b6000602082019050612a606000830184612454565b92915050565b60006040820190508181036000830152612a8081866124bd565b90508181036020830152612a95818486612490565b9050949350505050565b6000602082019050612ab46000830184612536565b92915050565b60006020820190508181036000830152612ad48184612545565b905092915050565b60006020820190508181036000830152612af58161257e565b9050919050565b60006020820190508181036000830152612b15816125a1565b9050919050565b60006020820190508181036000830152612b35816125c4565b9050919050565b60006020820190508181036000830152612b55816125e7565b9050919050565b60006020820190508181036000830152612b758161260a565b9050919050565b60006020820190508181036000830152612b958161262d565b9050919050565b60006020820190508181036000830152612bb581612650565b9050919050565b60006020820190508181036000830152612bd581612673565b9050919050565b60006020820190508181036000830152612bf581612696565b9050919050565b60006020820190508181036000830152612c15816126ff565b9050919050565b60006020820190508181036000830152612c3581612722565b9050919050565b60006080820190508181036000830152612c568188612745565b9050612c65602083018761242e565b612c7260408301866127be565b8181036060830152612c85818486612490565b90509695505050505050565b6000602082019050612ca660008301846127be565b92915050565b6000612cb6612cc7565b9050612cc28282612eac565b919050565b6000604051905090565b600067ffffffffffffffff821115612cec57612ceb612f01565b5b612cf582612f62565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000612d656020840184611e89565b905092915050565b60008083356001602003843603038112612d8a57612d89612f58565b5b83810192508235915060208301925067ffffffffffffffff821115612db257612db1612f30565b5b600182023603841315612dc857612dc7612f44565b5b509250929050565b6000612ddf6020840184611f80565b905092915050565b6000612df282612e0f565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612e5182612e2f565b9050919050565b6000612e6382612e39565b9050919050565b82818337600083830152505050565b60005b83811015612e97578082015181840152602081019050612e7c565b83811115612ea6576000848401525b50505050565b612eb582612f62565b810181811067ffffffffffffffff82111715612ed457612ed3612f01565b5b80604052505050565b6000612ee882612eef565b9050919050565b6000612efa82612f73565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b6132a581612de7565b81146132b057600080fd5b50565b6132bc81612df9565b81146132c757600080fd5b50565b6132d381612e05565b81146132de57600080fd5b50565b6132ea81612e2f565b81146132f557600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212208b0e2cd34ca959e4ebb747e668d6b87cf200880d34b89fac5e6539183d9177cf64736f6c63430008070033608060405234801561001057600080fd5b50604051610bcd380380610bcd8339818101604052810190610032919061008d565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610108565b600081519050610087816100f1565b92915050565b6000602082840312156100a3576100a26100ec565b5b60006100b184828501610078565b91505092915050565b60006100c5826100cc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6100fa816100ba565b811461010557600080fd5b50565b610ab6806101176000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b614610062578063a0a1730b14610080575b600080fd5b610060600480360381019061005b91906105fd565b61009c565b005b61006a6102af565b6040516100779190610761565b60405180910390f35b61009a6004803603810190610095919061055e565b6102d3565b005b60008383836040516024016100b39392919061082f565b6040516020818303038152906040527fe04d4f97000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090508473ffffffffffffffffffffffffffffffffffffffff1663095ea7b360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16886040518363ffffffff1660e01b815260040161018d92919061077c565b602060405180830381600087803b1580156101a757600080fd5b505af11580156101bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101df9190610531565b610215576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637993c1e0888888856040518563ffffffff1660e01b815260040161027494939291906107dc565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008383836040516024016102ea9392919061082f565b6040516020818303038152906040527fe04d4f97000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ac7c44c86836040518363ffffffff1660e01b81526004016103c49291906107a5565b600060405180830381600087803b1580156103de57600080fd5b505af11580156103f2573d6000803e3d6000fd5b505050505050505050565b600061041061040b84610892565b61086d565b90508281526020810184848401111561042c5761042b610a1b565b5b610437848285610974565b509392505050565b600061045261044d846108c3565b61086d565b90508281526020810184848401111561046e5761046d610a1b565b5b610479848285610974565b509392505050565b60008135905061049081610a3b565b92915050565b6000813590506104a581610a52565b92915050565b6000815190506104ba81610a52565b92915050565b600082601f8301126104d5576104d4610a16565b5b81356104e58482602086016103fd565b91505092915050565b600082601f83011261050357610502610a16565b5b813561051384826020860161043f565b91505092915050565b60008135905061052b81610a69565b92915050565b60006020828403121561054757610546610a25565b5b6000610555848285016104ab565b91505092915050565b6000806000806080858703121561057857610577610a25565b5b600085013567ffffffffffffffff81111561059657610595610a20565b5b6105a2878288016104c0565b945050602085013567ffffffffffffffff8111156105c3576105c2610a20565b5b6105cf878288016104ee565b93505060406105e08782880161051c565b92505060606105f187828801610496565b91505092959194509250565b60008060008060008060c0878903121561061a57610619610a25565b5b600087013567ffffffffffffffff81111561063857610637610a20565b5b61064489828a016104c0565b965050602061065589828a0161051c565b955050604061066689828a01610481565b945050606087013567ffffffffffffffff81111561068757610686610a20565b5b61069389828a016104ee565b93505060806106a489828a0161051c565b92505060a06106b589828a01610496565b9150509295509295509295565b6106cb8161092c565b82525050565b6106da8161093e565b82525050565b60006106eb826108f4565b6106f5818561090a565b9350610705818560208601610983565b61070e81610a2a565b840191505092915050565b6000610724826108ff565b61072e818561091b565b935061073e818560208601610983565b61074781610a2a565b840191505092915050565b61075b8161096a565b82525050565b600060208201905061077660008301846106c2565b92915050565b600060408201905061079160008301856106c2565b61079e6020830184610752565b9392505050565b600060408201905081810360008301526107bf81856106e0565b905081810360208301526107d381846106e0565b90509392505050565b600060808201905081810360008301526107f681876106e0565b90506108056020830186610752565b61081260408301856106c2565b818103606083015261082481846106e0565b905095945050505050565b600060608201905081810360008301526108498186610719565b90506108586020830185610752565b61086560408301846106d1565b949350505050565b6000610877610888565b905061088382826109b6565b919050565b6000604051905090565b600067ffffffffffffffff8211156108ad576108ac6109e7565b5b6108b682610a2a565b9050602081019050919050565b600067ffffffffffffffff8211156108de576108dd6109e7565b5b6108e782610a2a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006109378261094a565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156109a1578082015181840152602081019050610986565b838111156109b0576000848401525b50505050565b6109bf82610a2a565b810181811067ffffffffffffffff821117156109de576109dd6109e7565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b610a448161092c565b8114610a4f57600080fd5b50565b610a5b8161093e565b8114610a6657600080fd5b50565b610a728161096a565b8114610a7d57600080fd5b5056fea264697066735822122047394ff599eddfa076b2235d0fd5a7dbfc57b711a64fc8cf9215f4568c2a7f7b64736f6c6343000807003360806040523480156200001157600080fd5b50604051620010d7380380620010d7833981810160405281019062000037919062000146565b82600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac560405160405180910390a1505050620001f5565b6000815190506200014081620001db565b92915050565b600080600060608486031215620001625762000161620001d6565b5b600062000172868287016200012f565b935050602062000185868287016200012f565b925050604062000198868287016200012f565b9150509250925092565b6000620001af82620001b6565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b620001e681620001a2565b8114620001f257600080fd5b50565b610ed280620002056000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806397770dff1161007157806397770dff14610166578063a7cb050714610182578063c63585cc1461019e578063d7fd7afb146101ce578063d936a012146101fe578063ee2815ba1461021c576100a9565b80630be15547146100ae5780633c669d55146100de578063513a9c05146100fa578063569541b91461012a578063842da36d14610148575b600080fd5b6100c860048036038101906100c3919061094d565b610238565b6040516100d59190610bce565b60405180910390f35b6100f860048036038101906100f39190610898565b61026b565b005b610114600480360381019061010f919061094d565b6103b8565b6040516101219190610bce565b60405180910390f35b6101326103eb565b60405161013f9190610bce565b60405180910390f35b610150610411565b60405161015d9190610bce565b60405180910390f35b610180600480360381019061017b9190610818565b610437565b005b61019c600480360381019061019791906109ba565b6104d4565b005b6101b860048036038101906101b39190610845565b610528565b6040516101c59190610bce565b60405180910390f35b6101e860048036038101906101e3919061094d565b61059a565b6040516101f59190610c67565b60405180910390f35b6102066105b2565b6040516102139190610bce565b60405180910390f35b6102366004803603810190610231919061097a565b6105d8565b005b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060405180606001604052806040518060200160405280600081525081526020013373ffffffffffffffffffffffffffffffffffffffff1681526020014681525090508473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb87866040518363ffffffff1660e01b81526004016102ea929190610be9565b602060405180830381600087803b15801561030457600080fd5b505af1158015610318573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033c9190610920565b508573ffffffffffffffffffffffffffffffffffffffff1663de43156e82878787876040518663ffffffff1660e01b815260040161037e959493929190610c12565b600060405180830381600087803b15801561039857600080fd5b505af11580156103ac573d6000803e3d6000fd5b50505050505050505050565b60026020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516104c99190610bce565b60405180910390a150565b80600080848152602001908152602001600020819055507f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d828260405161051c929190610cab565b60405180910390a15050565b60008060006105378585610667565b9150915085828260405160200161054f929190610b60565b60405160208183030381529060405280519060200120604051602001610576929190610b8c565b6040516020818303038152906040528051906020012060001c925050509392505050565b60006020528060005260406000206000915090505481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b806001600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d828260405161065b929190610c82565b60405180910390a15050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156106d0576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161061070a57828461070d565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561077c576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60008135905061079281610e57565b92915050565b6000815190506107a781610e6e565b92915050565b60008083601f8401126107c3576107c2610dd3565b5b8235905067ffffffffffffffff8111156107e0576107df610dce565b5b6020830191508360018202830111156107fc576107fb610dd8565b5b9250929050565b60008135905061081281610e85565b92915050565b60006020828403121561082e5761082d610de2565b5b600061083c84828501610783565b91505092915050565b60008060006060848603121561085e5761085d610de2565b5b600061086c86828701610783565b935050602061087d86828701610783565b925050604061088e86828701610783565b9150509250925092565b6000806000806000608086880312156108b4576108b3610de2565b5b60006108c288828901610783565b95505060206108d388828901610783565b94505060406108e488828901610803565b935050606086013567ffffffffffffffff81111561090557610904610ddd565b5b610911888289016107ad565b92509250509295509295909350565b60006020828403121561093657610935610de2565b5b600061094484828501610798565b91505092915050565b60006020828403121561096357610962610de2565b5b600061097184828501610803565b91505092915050565b6000806040838503121561099157610990610de2565b5b600061099f85828601610803565b92505060206109b085828601610783565b9150509250929050565b600080604083850312156109d1576109d0610de2565b5b60006109df85828601610803565b92505060206109f085828601610803565b9150509250929050565b610a0381610d0c565b82525050565b610a1281610d0c565b82525050565b610a29610a2482610d0c565b610da0565b82525050565b610a40610a3b82610d2a565b610db2565b82525050565b6000610a528385610cf0565b9350610a5f838584610d5e565b610a6883610de7565b840190509392505050565b6000610a7e82610cd4565b610a888185610cdf565b9350610a98818560208601610d6d565b610aa181610de7565b840191505092915050565b6000610ab9602083610d01565b9150610ac482610e05565b602082019050919050565b6000610adc600183610d01565b9150610ae782610e2e565b600182019050919050565b60006060830160008301518482036000860152610b0f8282610a73565b9150506020830151610b2460208601826109fa565b506040830151610b376040860182610b42565b508091505092915050565b610b4b81610d54565b82525050565b610b5a81610d54565b82525050565b6000610b6c8285610a18565b601482019150610b7c8284610a18565b6014820191508190509392505050565b6000610b9782610acf565b9150610ba38285610a18565b601482019150610bb38284610a2f565b602082019150610bc282610aac565b91508190509392505050565b6000602082019050610be36000830184610a09565b92915050565b6000604082019050610bfe6000830185610a09565b610c0b6020830184610b51565b9392505050565b60006080820190508181036000830152610c2c8188610af2565b9050610c3b6020830187610a09565b610c486040830186610b51565b8181036060830152610c5b818486610a46565b90509695505050505050565b6000602082019050610c7c6000830184610b51565b92915050565b6000604082019050610c976000830185610b51565b610ca46020830184610a09565b9392505050565b6000604082019050610cc06000830185610b51565b610ccd6020830184610b51565b9392505050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000610d1782610d34565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015610d8b578082015181840152602081019050610d70565b83811115610d9a576000848401525b50505050565b6000610dab82610dbc565b9050919050565b6000819050919050565b6000610dc782610df8565b9050919050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f600082015250565b7fff00000000000000000000000000000000000000000000000000000000000000600082015250565b610e6081610d0c565b8114610e6b57600080fd5b50565b610e7781610d1e565b8114610e8257600080fd5b50565b610e8e81610d54565b8114610e9957600080fd5b5056fea2646970667358221220fc7ae99de1eb543fc941c22b053bacc8edc14f929260909668ffd15cbad6fbfb64736f6c6343000807003360c06040523480156200001157600080fd5b506040516200282d3803806200282d83398181016040528101906200003791906200035b565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620000b1576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760079080519060200190620000c9929190620001d1565b508660089080519060200190620000e2929190620001d1565b5085600960006101000a81548160ff021916908360ff16021790555084608081815250508360028111156200011c576200011b620005ae565b5b60a0816002811115620001345762000133620005ae565b5b60f81b8152505082600281905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505050620006bf565b828054620001df9062000542565b90600052602060002090601f0160209004810192826200020357600085556200024f565b82601f106200021e57805160ff19168380011785556200024f565b828001600101855582156200024f579182015b828111156200024e57825182559160200191906001019062000231565b5b5090506200025e919062000262565b5090565b5b808211156200027d57600081600090555060010162000263565b5090565b60006200029862000292846200048b565b62000462565b905082815260208101848484011115620002b757620002b662000640565b5b620002c48482856200050c565b509392505050565b600081519050620002dd8162000660565b92915050565b600081519050620002f4816200067a565b92915050565b600082601f8301126200031257620003116200063b565b5b81516200032484826020860162000281565b91505092915050565b6000815190506200033e816200068b565b92915050565b6000815190506200035581620006a5565b92915050565b600080600080600080600080610100898b0312156200037f576200037e6200064a565b5b600089015167ffffffffffffffff811115620003a0576200039f62000645565b5b620003ae8b828c01620002fa565b985050602089015167ffffffffffffffff811115620003d257620003d162000645565b5b620003e08b828c01620002fa565b9750506040620003f38b828c0162000344565b9650506060620004068b828c016200032d565b9550506080620004198b828c01620002e3565b94505060a06200042c8b828c016200032d565b93505060c06200043f8b828c01620002cc565b92505060e0620004528b828c01620002cc565b9150509295985092959890939650565b60006200046e62000481565b90506200047c828262000578565b919050565b6000604051905090565b600067ffffffffffffffff821115620004a957620004a86200060c565b5b620004b4826200064f565b9050602081019050919050565b6000620004ce82620004d5565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156200052c5780820151818401526020810190506200050f565b838111156200053c576000848401525b50505050565b600060028204905060018216806200055b57607f821691505b60208210811415620005725762000571620005dd565b5b50919050565b62000583826200064f565b810181811067ffffffffffffffff82111715620005a557620005a46200060c565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200066b81620004c1565b81146200067757600080fd5b50565b600381106200068857600080fd5b50565b6200069681620004f5565b8114620006a257600080fd5b50565b620006b081620004ff565b8114620006bc57600080fd5b50565b60805160a05160f81c612137620006f660003960006109580152600081816108a201528181610c250152610d5a01526121376000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806385e1f4d0116100c3578063d9eeebed1161007c578063d9eeebed146103cc578063dd62ed3e146103eb578063e2f535b81461041b578063eddeb12314610439578063f2441b3214610455578063f687d12a146104735761014d565b806385e1f4d0146102f657806395d89b4114610314578063a3413d0314610332578063a9059cbb14610350578063c701262614610380578063c835d7cc146103b05761014d565b8063313ce56711610115578063313ce5671461020c5780633ce4a5bc1461022a57806342966c681461024857806347e7ef24146102785780634d8943bb146102a857806370a08231146102c65761014d565b806306fdde0314610152578063091d278814610170578063095ea7b31461018e57806318160ddd146101be57806323b872dd146101dc575b600080fd5b61015a61048f565b6040516101679190611cad565b60405180910390f35b610178610521565b6040516101859190611ccf565b60405180910390f35b6101a860048036038101906101a3919061196e565b610527565b6040516101b59190611bfb565b60405180910390f35b6101c6610545565b6040516101d39190611ccf565b60405180910390f35b6101f660048036038101906101f1919061191b565b61054f565b6040516102039190611bfb565b60405180910390f35b610214610647565b6040516102219190611cea565b60405180910390f35b61023261065e565b60405161023f9190611b80565b60405180910390f35b610262600480360381019061025d9190611a37565b610676565b60405161026f9190611bfb565b60405180910390f35b610292600480360381019061028d919061196e565b61068b565b60405161029f9190611bfb565b60405180910390f35b6102b0610851565b6040516102bd9190611ccf565b60405180910390f35b6102e060048036038101906102db9190611881565b610857565b6040516102ed9190611ccf565b60405180910390f35b6102fe6108a0565b60405161030b9190611ccf565b60405180910390f35b61031c6108c4565b6040516103299190611cad565b60405180910390f35b61033a610956565b6040516103479190611c92565b60405180910390f35b61036a6004803603810190610365919061196e565b61097a565b6040516103779190611bfb565b60405180910390f35b61039a600480360381019061039591906119db565b610998565b6040516103a79190611bfb565b60405180910390f35b6103ca60048036038101906103c59190611881565b610aee565b005b6103d4610be1565b6040516103e2929190611bd2565b60405180910390f35b610405600480360381019061040091906118db565b610e4e565b6040516104129190611ccf565b60405180910390f35b610423610ed5565b6040516104309190611b80565b60405180910390f35b610453600480360381019061044e9190611a37565b610efb565b005b61045d610fb5565b60405161046a9190611b80565b60405180910390f35b61048d60048036038101906104889190611a37565b610fd9565b005b60606007805461049e90611f33565b80601f01602080910402602001604051908101604052809291908181526020018280546104ca90611f33565b80156105175780601f106104ec57610100808354040283529160200191610517565b820191906000526020600020905b8154815290600101906020018083116104fa57829003601f168201915b5050505050905090565b60025481565b600061053b610534611093565b848461109b565b6001905092915050565b6000600654905090565b600061055c848484611254565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006105a7611093565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561061e576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61063b8561062a611093565b85846106369190611e43565b61109b565b60019150509392505050565b6000600960009054906101000a900460ff16905090565b73735b14bb79463307aacbed86daf3322b1e6226ab81565b600061068233836114b0565b60019050919050565b600073735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610729575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b80156107835750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156107ba576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107c48383611668565b8273ffffffffffffffffffffffffffffffffffffffff167f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab373735b14bb79463307aacbed86daf3322b1e6226ab6040516020016108219190611b65565b6040516020818303038152906040528460405161083f929190611c16565b60405180910390a26001905092915050565b60035481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060600880546108d390611f33565b80601f01602080910402602001604051908101604052809291908181526020018280546108ff90611f33565b801561094c5780601f106109215761010080835404028352916020019161094c565b820191906000526020600020905b81548152906001019060200180831161092f57829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061098e610987611093565b8484611254565b6001905092915050565b60008060006109a5610be1565b915091508173ffffffffffffffffffffffffffffffffffffffff166323b872dd3373735b14bb79463307aacbed86daf3322b1e6226ab846040518463ffffffff1660e01b81526004016109fa93929190611b9b565b602060405180830381600087803b158015610a1457600080fd5b505af1158015610a28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4c91906119ae565b610a82576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a8c33856114b0565b3373ffffffffffffffffffffffffffffffffffffffff167f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d955868684600354604051610ada9493929190611c46565b60405180910390a260019250505092915050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b67576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae81604051610bd69190611b80565b60405180910390a150565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630be155477f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401610c609190611ccf565b60206040518083038186803b158015610c7857600080fd5b505afa158015610c8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb091906118ae565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d19576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d7fd7afb7f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401610d959190611ccf565b60206040518083038186803b158015610dad57600080fd5b505afa158015610dc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de59190611a64565b90506000811415610e22576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060035460025483610e359190611de9565b610e3f9190611d93565b90508281945094505050509091565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f74576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806003819055507fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f81604051610faa9190611ccf565b60405180910390a150565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611052576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806002819055507fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a816040516110889190611ccf565b60405180910390a150565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611102576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611169576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112479190611ccf565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112bb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611322576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156113a0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81816113ac9190611e43565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461143e9190611d93565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114a29190611ccf565b60405180910390a350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611517576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611595576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81816115a19190611e43565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600660008282546115f69190611e43565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161165b9190611ccf565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116cf576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600660008282546116e19190611d93565b9250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117379190611d93565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161179c9190611ccf565b60405180910390a35050565b60006117bb6117b684611d2a565b611d05565b9050828152602081018484840111156117d7576117d661207b565b5b6117e2848285611ef1565b509392505050565b6000813590506117f9816120bc565b92915050565b60008151905061180e816120bc565b92915050565b600081519050611823816120d3565b92915050565b600082601f83011261183e5761183d612076565b5b813561184e8482602086016117a8565b91505092915050565b600081359050611866816120ea565b92915050565b60008151905061187b816120ea565b92915050565b60006020828403121561189757611896612085565b5b60006118a5848285016117ea565b91505092915050565b6000602082840312156118c4576118c3612085565b5b60006118d2848285016117ff565b91505092915050565b600080604083850312156118f2576118f1612085565b5b6000611900858286016117ea565b9250506020611911858286016117ea565b9150509250929050565b60008060006060848603121561193457611933612085565b5b6000611942868287016117ea565b9350506020611953868287016117ea565b925050604061196486828701611857565b9150509250925092565b6000806040838503121561198557611984612085565b5b6000611993858286016117ea565b92505060206119a485828601611857565b9150509250929050565b6000602082840312156119c4576119c3612085565b5b60006119d284828501611814565b91505092915050565b600080604083850312156119f2576119f1612085565b5b600083013567ffffffffffffffff811115611a1057611a0f612080565b5b611a1c85828601611829565b9250506020611a2d85828601611857565b9150509250929050565b600060208284031215611a4d57611a4c612085565b5b6000611a5b84828501611857565b91505092915050565b600060208284031215611a7a57611a79612085565b5b6000611a888482850161186c565b91505092915050565b611a9a81611e77565b82525050565b611ab1611aac82611e77565b611f96565b82525050565b611ac081611e89565b82525050565b6000611ad182611d5b565b611adb8185611d71565b9350611aeb818560208601611f00565b611af48161208a565b840191505092915050565b611b0881611edf565b82525050565b6000611b1982611d66565b611b238185611d82565b9350611b33818560208601611f00565b611b3c8161208a565b840191505092915050565b611b5081611ec8565b82525050565b611b5f81611ed2565b82525050565b6000611b718284611aa0565b60148201915081905092915050565b6000602082019050611b956000830184611a91565b92915050565b6000606082019050611bb06000830186611a91565b611bbd6020830185611a91565b611bca6040830184611b47565b949350505050565b6000604082019050611be76000830185611a91565b611bf46020830184611b47565b9392505050565b6000602082019050611c106000830184611ab7565b92915050565b60006040820190508181036000830152611c308185611ac6565b9050611c3f6020830184611b47565b9392505050565b60006080820190508181036000830152611c608187611ac6565b9050611c6f6020830186611b47565b611c7c6040830185611b47565b611c896060830184611b47565b95945050505050565b6000602082019050611ca76000830184611aff565b92915050565b60006020820190508181036000830152611cc78184611b0e565b905092915050565b6000602082019050611ce46000830184611b47565b92915050565b6000602082019050611cff6000830184611b56565b92915050565b6000611d0f611d20565b9050611d1b8282611f65565b919050565b6000604051905090565b600067ffffffffffffffff821115611d4557611d44612047565b5b611d4e8261208a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000611d9e82611ec8565b9150611da983611ec8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611dde57611ddd611fba565b5b828201905092915050565b6000611df482611ec8565b9150611dff83611ec8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611e3857611e37611fba565b5b828202905092915050565b6000611e4e82611ec8565b9150611e5983611ec8565b925082821015611e6c57611e6b611fba565b5b828203905092915050565b6000611e8282611ea8565b9050919050565b60008115159050919050565b6000819050611ea3826120a8565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000611eea82611e95565b9050919050565b82818337600083830152505050565b60005b83811015611f1e578082015181840152602081019050611f03565b83811115611f2d576000848401525b50505050565b60006002820490506001821680611f4b57607f821691505b60208210811415611f5f57611f5e612018565b5b50919050565b611f6e8261208a565b810181811067ffffffffffffffff82111715611f8d57611f8c612047565b5b80604052505050565b6000611fa182611fa8565b9050919050565b6000611fb38261209b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b600381106120b9576120b8611fe9565b5b50565b6120c581611e77565b81146120d057600080fd5b50565b6120dc81611e89565b81146120e757600080fd5b50565b6120f381611ec8565b81146120fe57600080fd5b5056fea26469706673582212206982505c1a546edfb86a1aaaca0ad6b7e5542f2d1f24ac30a032805fc80a650e64736f6c63430008070033a2646970667358221220dcca5c678ec92955f311699a854d5639dccde9c1aa0ebf30189c176992cac83264736f6c63430008070033", } // GatewayEVMZEVMTestABI is the input ABI used to generate the binding from. @@ -2007,6 +2007,7 @@ func (it *GatewayEVMZEVMTestWithdrawalIterator) Close() error { // GatewayEVMZEVMTestWithdrawal represents a Withdrawal event raised by the GatewayEVMZEVMTest contract. type GatewayEVMZEVMTestWithdrawal struct { From common.Address + Zrc20 common.Address To []byte Value *big.Int Gasfee *big.Int @@ -2015,9 +2016,9 @@ type GatewayEVMZEVMTestWithdrawal struct { Raw types.Log // Blockchain specific contextual infos } -// FilterWithdrawal is a free log retrieval operation binding the contract event 0x1866ad2994816c79f4103e1eddacc7b085eb7c635205243a28940be69b01536d. +// FilterWithdrawal is a free log retrieval operation binding the contract event 0x2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716. // -// Solidity: event Withdrawal(address indexed from, bytes to, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message) +// Solidity: event Withdrawal(address indexed from, address zrc20, bytes to, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message) func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) FilterWithdrawal(opts *bind.FilterOpts, from []common.Address) (*GatewayEVMZEVMTestWithdrawalIterator, error) { var fromRule []interface{} @@ -2032,9 +2033,9 @@ func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) FilterWithdrawal(opts *bi return &GatewayEVMZEVMTestWithdrawalIterator{contract: _GatewayEVMZEVMTest.contract, event: "Withdrawal", logs: logs, sub: sub}, nil } -// WatchWithdrawal is a free log subscription operation binding the contract event 0x1866ad2994816c79f4103e1eddacc7b085eb7c635205243a28940be69b01536d. +// WatchWithdrawal is a free log subscription operation binding the contract event 0x2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716. // -// Solidity: event Withdrawal(address indexed from, bytes to, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message) +// Solidity: event Withdrawal(address indexed from, address zrc20, bytes to, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message) func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) WatchWithdrawal(opts *bind.WatchOpts, sink chan<- *GatewayEVMZEVMTestWithdrawal, from []common.Address) (event.Subscription, error) { var fromRule []interface{} @@ -2074,9 +2075,9 @@ func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) WatchWithdrawal(opts *bin }), nil } -// ParseWithdrawal is a log parse operation binding the contract event 0x1866ad2994816c79f4103e1eddacc7b085eb7c635205243a28940be69b01536d. +// ParseWithdrawal is a log parse operation binding the contract event 0x2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716. // -// Solidity: event Withdrawal(address indexed from, bytes to, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message) +// Solidity: event Withdrawal(address indexed from, address zrc20, bytes to, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message) func (_GatewayEVMZEVMTest *GatewayEVMZEVMTestFilterer) ParseWithdrawal(log types.Log) (*GatewayEVMZEVMTestWithdrawal, error) { event := new(GatewayEVMZEVMTestWithdrawal) if err := _GatewayEVMZEVMTest.contract.UnpackLog(event, "Withdrawal", log); err != nil { diff --git a/pkg/contracts/prototypes/zevm/gatewayzevm.sol/gatewayzevm.go b/pkg/contracts/prototypes/zevm/gatewayzevm.sol/gatewayzevm.go index d90a14c0..0a91e131 100644 --- a/pkg/contracts/prototypes/zevm/gatewayzevm.sol/gatewayzevm.go +++ b/pkg/contracts/prototypes/zevm/gatewayzevm.sol/gatewayzevm.go @@ -38,8 +38,8 @@ type ZContext struct { // GatewayZEVMMetaData contains all meta data concerning the GatewayZEVM contract. var GatewayZEVMMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerIsNotFungibleModule\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasFeeTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientZRC20Amount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTarget\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WithdrawalFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20BurnFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20TransferFailed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"Call\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"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\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"to\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasfee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolFlatFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"call\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"structzContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"structzContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"withdrawAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152503480156200004757600080fd5b50620000586200005e60201b60201c565b62000208565b600060019054906101000a900460ff1615620000b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a8906200015c565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff1614620001225760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff6040516200011991906200017e565b60405180910390a15b565b6000620001336027836200019b565b91506200014082620001b9565b604082019050919050565b6200015681620001ac565b82525050565b60006020820190508181036000830152620001778162000124565b9050919050565b60006020820190506200019560008301846200014b565b92915050565b600082825260208201905092915050565b600060ff82169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60805160601c612c726200024360003960008181610433015281816104c2015281816105d40152818161066301526107130152612c726000f3fe6080604052600436106100dd5760003560e01c80637993c1e01161007f578063bcf7f32b11610059578063bcf7f32b14610251578063c39aca371461027a578063f2fde38b146102a3578063f45346dc146102cc576100dd565b80637993c1e0146101e65780638129fc1c1461020f5780638da5cb5b14610226576100dd565b80633ce4a5bc116100bb5780633ce4a5bc1461015d5780634f1ef2861461018857806352d1902d146101a4578063715018a6146101cf576100dd565b80630ac7c44c146100e2578063135390f91461010b5780633659cfe614610134575b600080fd5b3480156100ee57600080fd5b5061010960048036038101906101049190611c80565b6102f5565b005b34801561011757600080fd5b50610132600480360381019061012d9190611cfc565b61034c565b005b34801561014057600080fd5b5061015b60048036038101906101569190611b0a565b610431565b005b34801561016957600080fd5b506101726105ba565b60405161017f919061226e565b60405180910390f35b6101a2600480360381019061019d9190611b37565b6105d2565b005b3480156101b057600080fd5b506101b961070f565b6040516101c691906122e9565b60405180910390f35b3480156101db57600080fd5b506101e46107c8565b005b3480156101f257600080fd5b5061020d60048036038101906102089190611d6b565b6107dc565b005b34801561021b57600080fd5b506102246108c7565b005b34801561023257600080fd5b5061023b610a0d565b604051610248919061226e565b60405180910390f35b34801561025d57600080fd5b5061027860048036038101906102739190611e0f565b610a37565b005b34801561028657600080fd5b506102a1600480360381019061029c9190611e0f565b610b2b565b005b3480156102af57600080fd5b506102ca60048036038101906102c59190611b0a565b610d5d565b005b3480156102d857600080fd5b506102f360048036038101906102ee9190611bd3565b610de1565b005b3373ffffffffffffffffffffffffffffffffffffffff167f2b5af078ce280d812dc2241658dc5435c93408020e5418eef55a2b536de51c0f84848460405161033f93929190612304565b60405180910390a2505050565b60006103588383610f9d565b90503373ffffffffffffffffffffffffffffffffffffffff167f1866ad2994816c79f4103e1eddacc7b085eb7c635205243a28940be69b01536d8585848673ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156103db57600080fd5b505afa1580156103ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104139190611ec5565b60405161042394939291906123a0565b60405180910390a250505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614156104c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b79061245c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166104ff61128d565b73ffffffffffffffffffffffffffffffffffffffff1614610555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054c9061247c565b60405180910390fd5b61055e816112e4565b6105b781600067ffffffffffffffff81111561057d5761057c61282b565b5b6040519080825280601f01601f1916602001820160405280156105af5781602001600182028036833780820191505090505b5060006112ef565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab81565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610661576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106589061245c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166106a061128d565b73ffffffffffffffffffffffffffffffffffffffff16146106f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ed9061247c565b60405180910390fd5b6106ff826112e4565b61070b828260016112ef565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461079f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107969061249c565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b6107d061146c565b6107da60006114ea565b565b60006107e88585610f9d565b90503373ffffffffffffffffffffffffffffffffffffffff167f1866ad2994816c79f4103e1eddacc7b085eb7c635205243a28940be69b01536d8787848873ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561086b57600080fd5b505afa15801561087f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a39190611ec5565b88886040516108b79695949392919061233d565b60405180910390a2505050505050565b60008060019054906101000a900460ff161590508080156108f85750600160008054906101000a900460ff1660ff16105b806109255750610907306115b0565b1580156109245750600160008054906101000a900460ff1660ff16145b5b610964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095b906124dc565b60405180910390fd5b60016000806101000a81548160ff021916908360ff16021790555080156109a1576001600060016101000a81548160ff0219169083151502179055505b6109a96115d3565b6109b161162c565b8015610a0a5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610a0191906123ff565b60405180910390a15b50565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ab0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b8152600401610af195949392919061259c565b600060405180830381600087803b158015610b0b57600080fd5b505af1158015610b1f573d6000803e3d6000fd5b50505050505050505050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ba4576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610c1d57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610c54576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166347e7ef2484866040518363ffffffff1660e01b8152600401610c8f9291906122c0565b602060405180830381600087803b158015610ca957600080fd5b505af1158015610cbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce19190611c26565b508273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b8152600401610d2395949392919061259c565b600060405180830381600087803b158015610d3d57600080fd5b505af1158015610d51573d6000803e3d6000fd5b50505050505050505050565b610d6561146c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcc9061243c565b60405180910390fd5b610dde816114ea565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e5a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610ed357503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15610f0a576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166347e7ef2482846040518363ffffffff1660e01b8152600401610f459291906122c0565b602060405180830381600087803b158015610f5f57600080fd5b505af1158015610f73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f979190611c26565b50505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1663d9eeebed6040518163ffffffff1660e01b8152600401604080518083038186803b158015610fe757600080fd5b505afa158015610ffb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101f9190611b93565b915091508173ffffffffffffffffffffffffffffffffffffffff166323b872dd3373735b14bb79463307aacbed86daf3322b1e6226ab846040518463ffffffff1660e01b815260040161107493929190612289565b602060405180830381600087803b15801561108e57600080fd5b505af11580156110a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c69190611c26565b6110fc576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff1660e01b815260040161113993929190612289565b602060405180830381600087803b15801561115357600080fd5b505af1158015611167573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118b9190611c26565b6111c1576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166342966c68866040518263ffffffff1660e01b81526004016111fa91906125f1565b602060405180830381600087803b15801561121457600080fd5b505af1158015611228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124c9190611c26565b611282576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b809250505092915050565b60006112bb7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61167d565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112ec61146c565b50565b61131b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611687565b60000160009054906101000a900460ff161561133f5761133a83611691565b611467565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561138557600080fd5b505afa9250505080156113b657506040513d601f19601f820116820180604052508101906113b39190611c53565b60015b6113f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ec906124fc565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b811461145a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611451906124bc565b60405180910390fd5b5061146683838361174a565b5b505050565b611474611776565b73ffffffffffffffffffffffffffffffffffffffff16611492610a0d565b73ffffffffffffffffffffffffffffffffffffffff16146114e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114df9061253c565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611622576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116199061257c565b60405180910390fd5b61162a61177e565b565b600060019054906101000a900460ff1661167b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116729061257c565b60405180910390fd5b565b6000819050919050565b6000819050919050565b61169a816115b0565b6116d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d09061251c565b60405180910390fd5b806117067f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61167d565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611753836117df565b6000825111806117605750805b156117715761176f838361182e565b505b505050565b600033905090565b600060019054906101000a900460ff166117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c49061257c565b60405180910390fd5b6117dd6117d8611776565b6114ea565b565b6117e881611691565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606118538383604051806060016040528060278152602001612c166027913961185b565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516118859190612257565b600060405180830381855af49150503d80600081146118c0576040519150601f19603f3d011682016040523d82523d6000602084013e6118c5565b606091505b50915091506118d6868383876118e1565b925050509392505050565b606083156119445760008351141561193c576118fc856115b0565b61193b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119329061255c565b60405180910390fd5b5b82905061194f565b61194e8383611957565b5b949350505050565b60008251111561196a5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199e919061241a565b60405180910390fd5b60006119ba6119b584612631565b61260c565b9050828152602081018484840111156119d6576119d5612878565b5b6119e18482856127b8565b509392505050565b6000813590506119f881612bb9565b92915050565b600081519050611a0d81612bb9565b92915050565b600081519050611a2281612bd0565b92915050565b600081519050611a3781612be7565b92915050565b60008083601f840112611a5357611a52612864565b5b8235905067ffffffffffffffff811115611a7057611a6f61285f565b5b602083019150836001820283011115611a8c57611a8b612873565b5b9250929050565b600082601f830112611aa857611aa7612864565b5b8135611ab88482602086016119a7565b91505092915050565b600060608284031215611ad757611ad6612869565b5b81905092915050565b600081359050611aef81612bfe565b92915050565b600081519050611b0481612bfe565b92915050565b600060208284031215611b2057611b1f612887565b5b6000611b2e848285016119e9565b91505092915050565b60008060408385031215611b4e57611b4d612887565b5b6000611b5c858286016119e9565b925050602083013567ffffffffffffffff811115611b7d57611b7c61287d565b5b611b8985828601611a93565b9150509250929050565b60008060408385031215611baa57611ba9612887565b5b6000611bb8858286016119fe565b9250506020611bc985828601611af5565b9150509250929050565b600080600060608486031215611bec57611beb612887565b5b6000611bfa868287016119e9565b9350506020611c0b86828701611ae0565b9250506040611c1c868287016119e9565b9150509250925092565b600060208284031215611c3c57611c3b612887565b5b6000611c4a84828501611a13565b91505092915050565b600060208284031215611c6957611c68612887565b5b6000611c7784828501611a28565b91505092915050565b600080600060408486031215611c9957611c98612887565b5b600084013567ffffffffffffffff811115611cb757611cb661287d565b5b611cc386828701611a93565b935050602084013567ffffffffffffffff811115611ce457611ce361287d565b5b611cf086828701611a3d565b92509250509250925092565b600080600060608486031215611d1557611d14612887565b5b600084013567ffffffffffffffff811115611d3357611d3261287d565b5b611d3f86828701611a93565b9350506020611d5086828701611ae0565b9250506040611d61868287016119e9565b9150509250925092565b600080600080600060808688031215611d8757611d86612887565b5b600086013567ffffffffffffffff811115611da557611da461287d565b5b611db188828901611a93565b9550506020611dc288828901611ae0565b9450506040611dd3888289016119e9565b935050606086013567ffffffffffffffff811115611df457611df361287d565b5b611e0088828901611a3d565b92509250509295509295909350565b60008060008060008060a08789031215611e2c57611e2b612887565b5b600087013567ffffffffffffffff811115611e4a57611e4961287d565b5b611e5689828a01611ac1565b9650506020611e6789828a016119e9565b9550506040611e7889828a01611ae0565b9450506060611e8989828a016119e9565b935050608087013567ffffffffffffffff811115611eaa57611ea961287d565b5b611eb689828a01611a3d565b92509250509295509295509295565b600060208284031215611edb57611eda612887565b5b6000611ee984828501611af5565b91505092915050565b611efb81612747565b82525050565b611f0a81612747565b82525050565b611f1981612765565b82525050565b6000611f2b8385612678565b9350611f388385846127b8565b611f418361288c565b840190509392505050565b6000611f588385612689565b9350611f658385846127b8565b611f6e8361288c565b840190509392505050565b6000611f8482612662565b611f8e8185612689565b9350611f9e8185602086016127c7565b611fa78161288c565b840191505092915050565b6000611fbd82612662565b611fc7818561269a565b9350611fd78185602086016127c7565b80840191505092915050565b611fec816127a6565b82525050565b6000611ffd8261266d565b61200781856126a5565b93506120178185602086016127c7565b6120208161288c565b840191505092915050565b60006120386026836126a5565b91506120438261289d565b604082019050919050565b600061205b602c836126a5565b9150612066826128ec565b604082019050919050565b600061207e602c836126a5565b91506120898261293b565b604082019050919050565b60006120a16038836126a5565b91506120ac8261298a565b604082019050919050565b60006120c46029836126a5565b91506120cf826129d9565b604082019050919050565b60006120e7602e836126a5565b91506120f282612a28565b604082019050919050565b600061210a602e836126a5565b915061211582612a77565b604082019050919050565b600061212d602d836126a5565b915061213882612ac6565b604082019050919050565b60006121506020836126a5565b915061215b82612b15565b602082019050919050565b6000612173600083612689565b915061217e82612b3e565b600082019050919050565b6000612196601d836126a5565b91506121a182612b41565b602082019050919050565b60006121b9602b836126a5565b91506121c482612b6a565b604082019050919050565b6000606083016121e260008401846126cd565b85830360008701526121f5838284611f1f565b9250505061220660208401846126b6565b6122136020860182611ef2565b506122216040840184612730565b61222e6040860182612239565b508091505092915050565b6122428161278f565b82525050565b6122518161278f565b82525050565b60006122638284611fb2565b915081905092915050565b60006020820190506122836000830184611f01565b92915050565b600060608201905061229e6000830186611f01565b6122ab6020830185611f01565b6122b86040830184612248565b949350505050565b60006040820190506122d56000830185611f01565b6122e26020830184612248565b9392505050565b60006020820190506122fe6000830184611f10565b92915050565b6000604082019050818103600083015261231e8186611f79565b90508181036020830152612333818486611f4c565b9050949350505050565b600060a08201905081810360008301526123578189611f79565b90506123666020830188612248565b6123736040830187612248565b6123806060830186612248565b8181036080830152612393818486611f4c565b9050979650505050505050565b600060a08201905081810360008301526123ba8187611f79565b90506123c96020830186612248565b6123d66040830185612248565b6123e36060830184612248565b81810360808301526123f481612166565b905095945050505050565b60006020820190506124146000830184611fe3565b92915050565b600060208201905081810360008301526124348184611ff2565b905092915050565b600060208201905081810360008301526124558161202b565b9050919050565b600060208201905081810360008301526124758161204e565b9050919050565b6000602082019050818103600083015261249581612071565b9050919050565b600060208201905081810360008301526124b581612094565b9050919050565b600060208201905081810360008301526124d5816120b7565b9050919050565b600060208201905081810360008301526124f5816120da565b9050919050565b60006020820190508181036000830152612515816120fd565b9050919050565b6000602082019050818103600083015261253581612120565b9050919050565b6000602082019050818103600083015261255581612143565b9050919050565b6000602082019050818103600083015261257581612189565b9050919050565b60006020820190508181036000830152612595816121ac565b9050919050565b600060808201905081810360008301526125b681886121cf565b90506125c56020830187611f01565b6125d26040830186612248565b81810360608301526125e5818486611f4c565b90509695505050505050565b60006020820190506126066000830184612248565b92915050565b6000612616612627565b905061262282826127fa565b919050565b6000604051905090565b600067ffffffffffffffff82111561264c5761264b61282b565b5b6126558261288c565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006126c560208401846119e9565b905092915050565b600080833560016020038436030381126126ea576126e9612882565b5b83810192508235915060208301925067ffffffffffffffff8211156127125761271161285a565b5b6001820236038413156127285761272761286e565b5b509250929050565b600061273f6020840184611ae0565b905092915050565b60006127528261276f565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006127b182612799565b9050919050565b82818337600083830152505050565b60005b838110156127e55780820151818401526020810190506127ca565b838111156127f4576000848401525b50505050565b6128038261288c565b810181811067ffffffffffffffff821117156128225761282161282b565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b612bc281612747565b8114612bcd57600080fd5b50565b612bd981612759565b8114612be457600080fd5b50565b612bf081612765565b8114612bfb57600080fd5b50565b612c078161278f565b8114612c1257600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220627eb039ecb52d09fd70ebde1f5eca61fe0f91321a96929ebe38dc8e38d999ab64736f6c63430008070033", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"CallerIsNotFungibleModule\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedZetaSent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasFeeTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientZRC20Amount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTarget\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WZETATransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WithdrawalFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20BurnFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20TransferFailed\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"Call\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"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\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"to\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasfee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolFlatFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"Withdrawal\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"FUNGIBLE_MODULE_ADDRESS\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"call\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"structzContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"depositAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"bytes\",\"name\":\"origin\",\"type\":\"bytes\"},{\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"chainID\",\"type\":\"uint256\"}],\"internalType\":\"structzContext\",\"name\":\"context\",\"type\":\"tuple\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"execute\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_wzeta\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"withdrawAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"withdrawAndCall\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"wzeta\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"}]", + Bin: "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152503480156200004757600080fd5b50620000586200005e60201b60201c565b62000208565b600060019054906101000a900460ff1615620000b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a8906200015c565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff1614620001225760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff6040516200011991906200017e565b60405180910390a15b565b6000620001336027836200019b565b91506200014082620001b9565b604082019050919050565b6200015681620001ac565b82525050565b60006020820190508181036000830152620001778162000124565b9050919050565b60006020820190506200019560008301846200014b565b92915050565b600082825260208201905092915050565b600060ff82169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60805160601c613355620002436000396000818161063e015281816106cd015281816107df0152818161086e015261091e01526133556000f3fe6080604052600436106100fd5760003560e01c806352d1902d11610095578063bcf7f32b11610064578063bcf7f32b146102d7578063c39aca3714610300578063c4d66de814610329578063f2fde38b14610352578063f45346dc1461037b576100fd565b806352d1902d14610241578063715018a61461026c5780637993c1e0146102835780638da5cb5b146102ac576100fd565b80632e1a7d4d116100d15780632e1a7d4d146101a85780633659cfe6146101d15780633ce4a5bc146101fa5780634f1ef28614610225576100fd565b8062173d46146101025780630ac7c44c1461012d578063135390f914610156578063267e75a01461017f575b600080fd5b34801561010e57600080fd5b506101176103a4565b6040516101249190612814565b60405180910390f35b34801561013957600080fd5b50610154600480360381019061014f9190612120565b6103ca565b005b34801561016257600080fd5b5061017d6004803603810190610178919061219c565b610421565b005b34801561018b57600080fd5b506101a660048036038101906101a191906123bf565b610508565b005b3480156101b457600080fd5b506101cf60048036038101906101ca9190612365565b6105a5565b005b3480156101dd57600080fd5b506101f860048036038101906101f39190611faa565b61063c565b005b34801561020657600080fd5b5061020f6107c5565b60405161021c9190612814565b60405180910390f35b61023f600480360381019061023a9190611fd7565b6107dd565b005b34801561024d57600080fd5b5061025661091a565b6040516102639190612a4b565b60405180910390f35b34801561027857600080fd5b506102816109d3565b005b34801561028f57600080fd5b506102aa60048036038101906102a5919061220b565b6109e7565b005b3480156102b857600080fd5b506102c1610ad4565b6040516102ce9190612814565b60405180910390f35b3480156102e357600080fd5b506102fe60048036038101906102f991906122af565b610afe565b005b34801561030c57600080fd5b50610327600480360381019061032291906122af565b610bf2565b005b34801561033557600080fd5b50610350600480360381019061034b9190611faa565b610e24565b005b34801561035e57600080fd5b5061037960048036038101906103749190611faa565b610fce565b005b34801561038757600080fd5b506103a2600480360381019061039d9190612073565b611052565b005b60c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff167f2b5af078ce280d812dc2241658dc5435c93408020e5418eef55a2b536de51c0f84848460405161041493929190612a66565b60405180910390a2505050565b600061042d838361120e565b90503373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716838686858773ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104b157600080fd5b505afa1580156104c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e99190612392565b6040516104fa9594939291906129b5565b60405180910390a250505050565b610511836114fe565b3373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716600073735b14bb79463307aacbed86daf3322b1e6226ab60405160200161057091906127cd565b6040516020818303038152906040528660008088886040516105989796959493929190612866565b60405180910390a2505050565b6105ae816114fe565b3373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716600073735b14bb79463307aacbed86daf3322b1e6226ab60405160200161060d91906127cd565b604051602081830303815290604052846000806040516106319594939291906128d7565b60405180910390a250565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614156106cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c290612afc565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661070a61172d565b73ffffffffffffffffffffffffffffffffffffffff1614610760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075790612b1c565b60405180910390fd5b61076981611784565b6107c281600067ffffffffffffffff81111561078857610787612f01565b5b6040519080825280601f01601f1916602001820160405280156107ba5781602001600182028036833780820191505090505b50600061178f565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab81565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16141561086c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086390612afc565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108ab61172d565b73ffffffffffffffffffffffffffffffffffffffff1614610901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f890612b1c565b60405180910390fd5b61090a82611784565b6109168282600161178f565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16146109aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a190612b3c565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b6109db61190c565b6109e5600061198a565b565b60006109f3858561120e565b90503373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716858888858973ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a7757600080fd5b505afa158015610a8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aaf9190612392565b8989604051610ac49796959493929190612944565b60405180910390a2505050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b77576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b8152600401610bb8959493929190612c3c565b600060405180830381600087803b158015610bd257600080fd5b505af1158015610be6573d6000803e3d6000fd5b50505050505050505050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c6b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610ce457503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610d1b576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166347e7ef2484866040518363ffffffff1660e01b8152600401610d56929190612a22565b602060405180830381600087803b158015610d7057600080fd5b505af1158015610d84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da891906120c6565b508273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b8152600401610dea959493929190612c3c565b600060405180830381600087803b158015610e0457600080fd5b505af1158015610e18573d6000803e3d6000fd5b50505050505050505050565b60008060019054906101000a900460ff16159050808015610e555750600160008054906101000a900460ff1660ff16105b80610e825750610e6430611a50565b158015610e815750600160008054906101000a900460ff1660ff16145b5b610ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb890612b7c565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610efe576001600060016101000a81548160ff0219169083151502179055505b610f06611a73565b610f0e611acc565b60c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660c960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015610fca5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610fc19190612a9f565b60405180910390a15b5050565b610fd661190c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103d90612adc565b60405180910390fd5b61104f8161198a565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110cb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061114457503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561117b576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166347e7ef2482846040518363ffffffff1660e01b81526004016111b6929190612a22565b602060405180830381600087803b1580156111d057600080fd5b505af11580156111e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120891906120c6565b50505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1663d9eeebed6040518163ffffffff1660e01b8152600401604080518083038186803b15801561125857600080fd5b505afa15801561126c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112909190612033565b915091508173ffffffffffffffffffffffffffffffffffffffff166323b872dd3373735b14bb79463307aacbed86daf3322b1e6226ab846040518463ffffffff1660e01b81526004016112e59392919061282f565b602060405180830381600087803b1580156112ff57600080fd5b505af1158015611313573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133791906120c6565b61136d576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff1660e01b81526004016113aa9392919061282f565b602060405180830381600087803b1580156113c457600080fd5b505af11580156113d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fc91906120c6565b611432576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166342966c68866040518263ffffffff1660e01b815260040161146b9190612c91565b602060405180830381600087803b15801561148557600080fd5b505af1158015611499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bd91906120c6565b6114f3576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b809250505092915050565b60c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b815260040161155d9392919061282f565b602060405180830381600087803b15801561157757600080fd5b505af115801561158b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115af91906120c6565b6115e5576040517fa8c6fd4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b81526004016116409190612c91565b600060405180830381600087803b15801561165a57600080fd5b505af115801561166e573d6000803e3d6000fd5b50505050600073735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff16826040516116ac906127ff565b60006040518083038185875af1925050503d80600081146116e9576040519150601f19603f3d011682016040523d82523d6000602084013e6116ee565b606091505b5050905080611729576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b600061175b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611b1d565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61178c61190c565b50565b6117bb7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611b27565b60000160009054906101000a900460ff16156117df576117da83611b31565b611907565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561182557600080fd5b505afa92505050801561185657506040513d601f19601f8201168201806040525081019061185391906120f3565b60015b611895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188c90612b9c565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146118fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f190612b5c565b60405180910390fd5b50611906838383611bea565b5b505050565b611914611c16565b73ffffffffffffffffffffffffffffffffffffffff16611932610ad4565b73ffffffffffffffffffffffffffffffffffffffff1614611988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197f90612bdc565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab990612c1c565b60405180910390fd5b611aca611c1e565b565b600060019054906101000a900460ff16611b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1290612c1c565b60405180910390fd5b565b6000819050919050565b6000819050919050565b611b3a81611a50565b611b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7090612bbc565b60405180910390fd5b80611ba67f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611b1d565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611bf383611c7f565b600082511180611c005750805b15611c1157611c0f8383611cce565b505b505050565b600033905090565b600060019054906101000a900460ff16611c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6490612c1c565b60405180910390fd5b611c7d611c78611c16565b61198a565b565b611c8881611b31565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611cf383836040518060600160405280602781526020016132f960279139611cfb565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051611d2591906127e8565b600060405180830381855af49150503d8060008114611d60576040519150601f19603f3d011682016040523d82523d6000602084013e611d65565b606091505b5091509150611d7686838387611d81565b925050509392505050565b60608315611de457600083511415611ddc57611d9c85611a50565b611ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd290612bfc565b60405180910390fd5b5b829050611def565b611dee8383611df7565b5b949350505050565b600082511115611e0a5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3e9190612aba565b60405180910390fd5b6000611e5a611e5584612cd1565b612cac565b905082815260208101848484011115611e7657611e75612f4e565b5b611e81848285612e6a565b509392505050565b600081359050611e988161329c565b92915050565b600081519050611ead8161329c565b92915050565b600081519050611ec2816132b3565b92915050565b600081519050611ed7816132ca565b92915050565b60008083601f840112611ef357611ef2612f3a565b5b8235905067ffffffffffffffff811115611f1057611f0f612f35565b5b602083019150836001820283011115611f2c57611f2b612f49565b5b9250929050565b600082601f830112611f4857611f47612f3a565b5b8135611f58848260208601611e47565b91505092915050565b600060608284031215611f7757611f76612f3f565b5b81905092915050565b600081359050611f8f816132e1565b92915050565b600081519050611fa4816132e1565b92915050565b600060208284031215611fc057611fbf612f5d565b5b6000611fce84828501611e89565b91505092915050565b60008060408385031215611fee57611fed612f5d565b5b6000611ffc85828601611e89565b925050602083013567ffffffffffffffff81111561201d5761201c612f53565b5b61202985828601611f33565b9150509250929050565b6000806040838503121561204a57612049612f5d565b5b600061205885828601611e9e565b925050602061206985828601611f95565b9150509250929050565b60008060006060848603121561208c5761208b612f5d565b5b600061209a86828701611e89565b93505060206120ab86828701611f80565b92505060406120bc86828701611e89565b9150509250925092565b6000602082840312156120dc576120db612f5d565b5b60006120ea84828501611eb3565b91505092915050565b60006020828403121561210957612108612f5d565b5b600061211784828501611ec8565b91505092915050565b60008060006040848603121561213957612138612f5d565b5b600084013567ffffffffffffffff81111561215757612156612f53565b5b61216386828701611f33565b935050602084013567ffffffffffffffff81111561218457612183612f53565b5b61219086828701611edd565b92509250509250925092565b6000806000606084860312156121b5576121b4612f5d565b5b600084013567ffffffffffffffff8111156121d3576121d2612f53565b5b6121df86828701611f33565b93505060206121f086828701611f80565b925050604061220186828701611e89565b9150509250925092565b60008060008060006080868803121561222757612226612f5d565b5b600086013567ffffffffffffffff81111561224557612244612f53565b5b61225188828901611f33565b955050602061226288828901611f80565b945050604061227388828901611e89565b935050606086013567ffffffffffffffff81111561229457612293612f53565b5b6122a088828901611edd565b92509250509295509295909350565b60008060008060008060a087890312156122cc576122cb612f5d565b5b600087013567ffffffffffffffff8111156122ea576122e9612f53565b5b6122f689828a01611f61565b965050602061230789828a01611e89565b955050604061231889828a01611f80565b945050606061232989828a01611e89565b935050608087013567ffffffffffffffff81111561234a57612349612f53565b5b61235689828a01611edd565b92509250509295509295509295565b60006020828403121561237b5761237a612f5d565b5b600061238984828501611f80565b91505092915050565b6000602082840312156123a8576123a7612f5d565b5b60006123b684828501611f95565b91505092915050565b6000806000604084860312156123d8576123d7612f5d565b5b60006123e686828701611f80565b935050602084013567ffffffffffffffff81111561240757612406612f53565b5b61241386828701611edd565b92509250509250925092565b61242881612de7565b82525050565b61243781612de7565b82525050565b61244e61244982612de7565b612edd565b82525050565b61245d81612e05565b82525050565b600061246f8385612d18565b935061247c838584612e6a565b61248583612f62565b840190509392505050565b600061249c8385612d29565b93506124a9838584612e6a565b6124b283612f62565b840190509392505050565b60006124c882612d02565b6124d28185612d29565b93506124e2818560208601612e79565b6124eb81612f62565b840191505092915050565b600061250182612d02565b61250b8185612d3a565b935061251b818560208601612e79565b80840191505092915050565b61253081612e46565b82525050565b61253f81612e58565b82525050565b600061255082612d0d565b61255a8185612d45565b935061256a818560208601612e79565b61257381612f62565b840191505092915050565b600061258b602683612d45565b915061259682612f80565b604082019050919050565b60006125ae602c83612d45565b91506125b982612fcf565b604082019050919050565b60006125d1602c83612d45565b91506125dc8261301e565b604082019050919050565b60006125f4603883612d45565b91506125ff8261306d565b604082019050919050565b6000612617602983612d45565b9150612622826130bc565b604082019050919050565b600061263a602e83612d45565b91506126458261310b565b604082019050919050565b600061265d602e83612d45565b91506126688261315a565b604082019050919050565b6000612680602d83612d45565b915061268b826131a9565b604082019050919050565b60006126a3602083612d45565b91506126ae826131f8565b602082019050919050565b60006126c6600083612d29565b91506126d182613221565b600082019050919050565b60006126e9600083612d3a565b91506126f482613221565b600082019050919050565b600061270c601d83612d45565b915061271782613224565b602082019050919050565b600061272f602b83612d45565b915061273a8261324d565b604082019050919050565b6000606083016127586000840184612d6d565b858303600087015261276b838284612463565b9250505061277c6020840184612d56565b612789602086018261241f565b506127976040840184612dd0565b6127a460408601826127af565b508091505092915050565b6127b881612e2f565b82525050565b6127c781612e2f565b82525050565b60006127d9828461243d565b60148201915081905092915050565b60006127f482846124f6565b915081905092915050565b600061280a826126dc565b9150819050919050565b6000602082019050612829600083018461242e565b92915050565b6000606082019050612844600083018661242e565b612851602083018561242e565b61285e60408301846127be565b949350505050565b600060c08201905061287b600083018a61242e565b818103602083015261288d81896124bd565b905061289c60408301886127be565b6128a96060830187612527565b6128b66080830186612527565b81810360a08301526128c9818486612490565b905098975050505050505050565b600060c0820190506128ec600083018861242e565b81810360208301526128fe81876124bd565b905061290d60408301866127be565b61291a6060830185612527565b6129276080830184612527565b81810360a0830152612938816126b9565b90509695505050505050565b600060c082019050612959600083018a61242e565b818103602083015261296b81896124bd565b905061297a60408301886127be565b61298760608301876127be565b61299460808301866127be565b81810360a08301526129a7818486612490565b905098975050505050505050565b600060c0820190506129ca600083018861242e565b81810360208301526129dc81876124bd565b90506129eb60408301866127be565b6129f860608301856127be565b612a0560808301846127be565b81810360a0830152612a16816126b9565b90509695505050505050565b6000604082019050612a37600083018561242e565b612a4460208301846127be565b9392505050565b6000602082019050612a606000830184612454565b92915050565b60006040820190508181036000830152612a8081866124bd565b90508181036020830152612a95818486612490565b9050949350505050565b6000602082019050612ab46000830184612536565b92915050565b60006020820190508181036000830152612ad48184612545565b905092915050565b60006020820190508181036000830152612af58161257e565b9050919050565b60006020820190508181036000830152612b15816125a1565b9050919050565b60006020820190508181036000830152612b35816125c4565b9050919050565b60006020820190508181036000830152612b55816125e7565b9050919050565b60006020820190508181036000830152612b758161260a565b9050919050565b60006020820190508181036000830152612b958161262d565b9050919050565b60006020820190508181036000830152612bb581612650565b9050919050565b60006020820190508181036000830152612bd581612673565b9050919050565b60006020820190508181036000830152612bf581612696565b9050919050565b60006020820190508181036000830152612c15816126ff565b9050919050565b60006020820190508181036000830152612c3581612722565b9050919050565b60006080820190508181036000830152612c568188612745565b9050612c65602083018761242e565b612c7260408301866127be565b8181036060830152612c85818486612490565b90509695505050505050565b6000602082019050612ca660008301846127be565b92915050565b6000612cb6612cc7565b9050612cc28282612eac565b919050565b6000604051905090565b600067ffffffffffffffff821115612cec57612ceb612f01565b5b612cf582612f62565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000612d656020840184611e89565b905092915050565b60008083356001602003843603038112612d8a57612d89612f58565b5b83810192508235915060208301925067ffffffffffffffff821115612db257612db1612f30565b5b600182023603841315612dc857612dc7612f44565b5b509250929050565b6000612ddf6020840184611f80565b905092915050565b6000612df282612e0f565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612e5182612e2f565b9050919050565b6000612e6382612e39565b9050919050565b82818337600083830152505050565b60005b83811015612e97578082015181840152602081019050612e7c565b83811115612ea6576000848401525b50505050565b612eb582612f62565b810181811067ffffffffffffffff82111715612ed457612ed3612f01565b5b80604052505050565b6000612ee882612eef565b9050919050565b6000612efa82612f73565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b6132a581612de7565b81146132b057600080fd5b50565b6132bc81612df9565b81146132c757600080fd5b50565b6132d381612e05565b81146132de57600080fd5b50565b6132ea81612e2f565b81146132f557600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212208b0e2cd34ca959e4ebb747e668d6b87cf200880d34b89fac5e6539183d9177cf64736f6c63430008070033", } // GatewayZEVMABI is the input ABI used to generate the binding from. @@ -302,6 +302,37 @@ func (_GatewayZEVM *GatewayZEVMCallerSession) ProxiableUUID() ([32]byte, error) return _GatewayZEVM.Contract.ProxiableUUID(&_GatewayZEVM.CallOpts) } +// Wzeta is a free data retrieval call binding the contract method 0x00173d46. +// +// Solidity: function wzeta() view returns(address) +func (_GatewayZEVM *GatewayZEVMCaller) Wzeta(opts *bind.CallOpts) (common.Address, error) { + var out []interface{} + err := _GatewayZEVM.contract.Call(opts, &out, "wzeta") + + if err != nil { + return *new(common.Address), err + } + + out0 := *abi.ConvertType(out[0], new(common.Address)).(*common.Address) + + return out0, err + +} + +// Wzeta is a free data retrieval call binding the contract method 0x00173d46. +// +// Solidity: function wzeta() view returns(address) +func (_GatewayZEVM *GatewayZEVMSession) Wzeta() (common.Address, error) { + return _GatewayZEVM.Contract.Wzeta(&_GatewayZEVM.CallOpts) +} + +// Wzeta is a free data retrieval call binding the contract method 0x00173d46. +// +// Solidity: function wzeta() view returns(address) +func (_GatewayZEVM *GatewayZEVMCallerSession) Wzeta() (common.Address, error) { + return _GatewayZEVM.Contract.Wzeta(&_GatewayZEVM.CallOpts) +} + // Call is a paid mutator transaction binding the contract method 0x0ac7c44c. // // Solidity: function call(bytes receiver, bytes message) returns() @@ -386,25 +417,25 @@ func (_GatewayZEVM *GatewayZEVMTransactorSession) Execute(context ZContext, zrc2 return _GatewayZEVM.Contract.Execute(&_GatewayZEVM.TransactOpts, context, zrc20, amount, target, message) } -// Initialize is a paid mutator transaction binding the contract method 0x8129fc1c. +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. // -// Solidity: function initialize() returns() -func (_GatewayZEVM *GatewayZEVMTransactor) Initialize(opts *bind.TransactOpts) (*types.Transaction, error) { - return _GatewayZEVM.contract.Transact(opts, "initialize") +// Solidity: function initialize(address _wzeta) returns() +func (_GatewayZEVM *GatewayZEVMTransactor) Initialize(opts *bind.TransactOpts, _wzeta common.Address) (*types.Transaction, error) { + return _GatewayZEVM.contract.Transact(opts, "initialize", _wzeta) } -// Initialize is a paid mutator transaction binding the contract method 0x8129fc1c. +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. // -// Solidity: function initialize() returns() -func (_GatewayZEVM *GatewayZEVMSession) Initialize() (*types.Transaction, error) { - return _GatewayZEVM.Contract.Initialize(&_GatewayZEVM.TransactOpts) +// Solidity: function initialize(address _wzeta) returns() +func (_GatewayZEVM *GatewayZEVMSession) Initialize(_wzeta common.Address) (*types.Transaction, error) { + return _GatewayZEVM.Contract.Initialize(&_GatewayZEVM.TransactOpts, _wzeta) } -// Initialize is a paid mutator transaction binding the contract method 0x8129fc1c. +// Initialize is a paid mutator transaction binding the contract method 0xc4d66de8. // -// Solidity: function initialize() returns() -func (_GatewayZEVM *GatewayZEVMTransactorSession) Initialize() (*types.Transaction, error) { - return _GatewayZEVM.Contract.Initialize(&_GatewayZEVM.TransactOpts) +// Solidity: function initialize(address _wzeta) returns() +func (_GatewayZEVM *GatewayZEVMTransactorSession) Initialize(_wzeta common.Address) (*types.Transaction, error) { + return _GatewayZEVM.Contract.Initialize(&_GatewayZEVM.TransactOpts, _wzeta) } // RenounceOwnership is a paid mutator transaction binding the contract method 0x715018a6. @@ -512,25 +543,67 @@ func (_GatewayZEVM *GatewayZEVMTransactorSession) Withdraw(receiver []byte, amou return _GatewayZEVM.Contract.Withdraw(&_GatewayZEVM.TransactOpts, receiver, amount, zrc20) } -// WithdrawAndCall is a paid mutator transaction binding the contract method 0x7993c1e0. +// Withdraw0 is a paid mutator transaction binding the contract method 0x2e1a7d4d. +// +// Solidity: function withdraw(uint256 amount) returns() +func (_GatewayZEVM *GatewayZEVMTransactor) Withdraw0(opts *bind.TransactOpts, amount *big.Int) (*types.Transaction, error) { + return _GatewayZEVM.contract.Transact(opts, "withdraw0", amount) +} + +// Withdraw0 is a paid mutator transaction binding the contract method 0x2e1a7d4d. +// +// Solidity: function withdraw(uint256 amount) returns() +func (_GatewayZEVM *GatewayZEVMSession) Withdraw0(amount *big.Int) (*types.Transaction, error) { + return _GatewayZEVM.Contract.Withdraw0(&_GatewayZEVM.TransactOpts, amount) +} + +// Withdraw0 is a paid mutator transaction binding the contract method 0x2e1a7d4d. +// +// Solidity: function withdraw(uint256 amount) returns() +func (_GatewayZEVM *GatewayZEVMTransactorSession) Withdraw0(amount *big.Int) (*types.Transaction, error) { + return _GatewayZEVM.Contract.Withdraw0(&_GatewayZEVM.TransactOpts, amount) +} + +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x267e75a0. +// +// Solidity: function withdrawAndCall(uint256 amount, bytes message) returns() +func (_GatewayZEVM *GatewayZEVMTransactor) WithdrawAndCall(opts *bind.TransactOpts, amount *big.Int, message []byte) (*types.Transaction, error) { + return _GatewayZEVM.contract.Transact(opts, "withdrawAndCall", amount, message) +} + +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x267e75a0. +// +// Solidity: function withdrawAndCall(uint256 amount, bytes message) returns() +func (_GatewayZEVM *GatewayZEVMSession) WithdrawAndCall(amount *big.Int, message []byte) (*types.Transaction, error) { + return _GatewayZEVM.Contract.WithdrawAndCall(&_GatewayZEVM.TransactOpts, amount, message) +} + +// WithdrawAndCall is a paid mutator transaction binding the contract method 0x267e75a0. +// +// Solidity: function withdrawAndCall(uint256 amount, bytes message) returns() +func (_GatewayZEVM *GatewayZEVMTransactorSession) WithdrawAndCall(amount *big.Int, message []byte) (*types.Transaction, error) { + return _GatewayZEVM.Contract.WithdrawAndCall(&_GatewayZEVM.TransactOpts, amount, message) +} + +// WithdrawAndCall0 is a paid mutator transaction binding the contract method 0x7993c1e0. // // Solidity: function withdrawAndCall(bytes receiver, uint256 amount, address zrc20, bytes message) returns() -func (_GatewayZEVM *GatewayZEVMTransactor) WithdrawAndCall(opts *bind.TransactOpts, receiver []byte, amount *big.Int, zrc20 common.Address, message []byte) (*types.Transaction, error) { - return _GatewayZEVM.contract.Transact(opts, "withdrawAndCall", receiver, amount, zrc20, message) +func (_GatewayZEVM *GatewayZEVMTransactor) WithdrawAndCall0(opts *bind.TransactOpts, receiver []byte, amount *big.Int, zrc20 common.Address, message []byte) (*types.Transaction, error) { + return _GatewayZEVM.contract.Transact(opts, "withdrawAndCall0", receiver, amount, zrc20, message) } -// WithdrawAndCall is a paid mutator transaction binding the contract method 0x7993c1e0. +// WithdrawAndCall0 is a paid mutator transaction binding the contract method 0x7993c1e0. // // Solidity: function withdrawAndCall(bytes receiver, uint256 amount, address zrc20, bytes message) returns() -func (_GatewayZEVM *GatewayZEVMSession) WithdrawAndCall(receiver []byte, amount *big.Int, zrc20 common.Address, message []byte) (*types.Transaction, error) { - return _GatewayZEVM.Contract.WithdrawAndCall(&_GatewayZEVM.TransactOpts, receiver, amount, zrc20, message) +func (_GatewayZEVM *GatewayZEVMSession) WithdrawAndCall0(receiver []byte, amount *big.Int, zrc20 common.Address, message []byte) (*types.Transaction, error) { + return _GatewayZEVM.Contract.WithdrawAndCall0(&_GatewayZEVM.TransactOpts, receiver, amount, zrc20, message) } -// WithdrawAndCall is a paid mutator transaction binding the contract method 0x7993c1e0. +// WithdrawAndCall0 is a paid mutator transaction binding the contract method 0x7993c1e0. // // Solidity: function withdrawAndCall(bytes receiver, uint256 amount, address zrc20, bytes message) returns() -func (_GatewayZEVM *GatewayZEVMTransactorSession) WithdrawAndCall(receiver []byte, amount *big.Int, zrc20 common.Address, message []byte) (*types.Transaction, error) { - return _GatewayZEVM.Contract.WithdrawAndCall(&_GatewayZEVM.TransactOpts, receiver, amount, zrc20, message) +func (_GatewayZEVM *GatewayZEVMTransactorSession) WithdrawAndCall0(receiver []byte, amount *big.Int, zrc20 common.Address, message []byte) (*types.Transaction, error) { + return _GatewayZEVM.Contract.WithdrawAndCall0(&_GatewayZEVM.TransactOpts, receiver, amount, zrc20, message) } // GatewayZEVMAdminChangedIterator is returned from FilterAdminChanged and is used to iterate over the raw logs and unpacked data for AdminChanged events raised by the GatewayZEVM contract. @@ -1459,6 +1532,7 @@ func (it *GatewayZEVMWithdrawalIterator) Close() error { // GatewayZEVMWithdrawal represents a Withdrawal event raised by the GatewayZEVM contract. type GatewayZEVMWithdrawal struct { From common.Address + Zrc20 common.Address To []byte Value *big.Int Gasfee *big.Int @@ -1467,9 +1541,9 @@ type GatewayZEVMWithdrawal struct { Raw types.Log // Blockchain specific contextual infos } -// FilterWithdrawal is a free log retrieval operation binding the contract event 0x1866ad2994816c79f4103e1eddacc7b085eb7c635205243a28940be69b01536d. +// FilterWithdrawal is a free log retrieval operation binding the contract event 0x2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716. // -// Solidity: event Withdrawal(address indexed from, bytes to, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message) +// Solidity: event Withdrawal(address indexed from, address zrc20, bytes to, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message) func (_GatewayZEVM *GatewayZEVMFilterer) FilterWithdrawal(opts *bind.FilterOpts, from []common.Address) (*GatewayZEVMWithdrawalIterator, error) { var fromRule []interface{} @@ -1484,9 +1558,9 @@ func (_GatewayZEVM *GatewayZEVMFilterer) FilterWithdrawal(opts *bind.FilterOpts, return &GatewayZEVMWithdrawalIterator{contract: _GatewayZEVM.contract, event: "Withdrawal", logs: logs, sub: sub}, nil } -// WatchWithdrawal is a free log subscription operation binding the contract event 0x1866ad2994816c79f4103e1eddacc7b085eb7c635205243a28940be69b01536d. +// WatchWithdrawal is a free log subscription operation binding the contract event 0x2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716. // -// Solidity: event Withdrawal(address indexed from, bytes to, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message) +// Solidity: event Withdrawal(address indexed from, address zrc20, bytes to, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message) func (_GatewayZEVM *GatewayZEVMFilterer) WatchWithdrawal(opts *bind.WatchOpts, sink chan<- *GatewayZEVMWithdrawal, from []common.Address) (event.Subscription, error) { var fromRule []interface{} @@ -1526,9 +1600,9 @@ func (_GatewayZEVM *GatewayZEVMFilterer) WatchWithdrawal(opts *bind.WatchOpts, s }), nil } -// ParseWithdrawal is a log parse operation binding the contract event 0x1866ad2994816c79f4103e1eddacc7b085eb7c635205243a28940be69b01536d. +// ParseWithdrawal is a log parse operation binding the contract event 0x2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716. // -// Solidity: event Withdrawal(address indexed from, bytes to, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message) +// Solidity: event Withdrawal(address indexed from, address zrc20, bytes to, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message) func (_GatewayZEVM *GatewayZEVMFilterer) ParseWithdrawal(log types.Log) (*GatewayZEVMWithdrawal, error) { event := new(GatewayZEVMWithdrawal) if err := _GatewayZEVM.contract.UnpackLog(event, "Withdrawal", log); err != nil { diff --git a/pkg/contracts/prototypes/zevm/interfaces.sol/igatewayzevmerrors.go b/pkg/contracts/prototypes/zevm/interfaces.sol/igatewayzevmerrors.go index dde8fa8c..1308aa3c 100644 --- a/pkg/contracts/prototypes/zevm/interfaces.sol/igatewayzevmerrors.go +++ b/pkg/contracts/prototypes/zevm/interfaces.sol/igatewayzevmerrors.go @@ -31,7 +31,7 @@ var ( // IGatewayZEVMErrorsMetaData contains all meta data concerning the IGatewayZEVMErrors contract. var IGatewayZEVMErrorsMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"name\":\"CallerIsNotFungibleModule\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasFeeTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientZRC20Amount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTarget\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WithdrawalFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20BurnFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20TransferFailed\",\"type\":\"error\"}]", + ABI: "[{\"inputs\":[],\"name\":\"CallerIsNotFungibleModule\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedZetaSent\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GasFeeTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientZRC20Amount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidTarget\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WZETATransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"WithdrawalFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20BurnFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ZRC20TransferFailed\",\"type\":\"error\"}]", } // IGatewayZEVMErrorsABI is the input ABI used to generate the binding from. diff --git a/pkg/contracts/prototypes/zevm/interfaces.sol/igatewayzevmevents.go b/pkg/contracts/prototypes/zevm/interfaces.sol/igatewayzevmevents.go index 2ace4e35..0b128fce 100644 --- a/pkg/contracts/prototypes/zevm/interfaces.sol/igatewayzevmevents.go +++ b/pkg/contracts/prototypes/zevm/interfaces.sol/igatewayzevmevents.go @@ -31,7 +31,7 @@ var ( // IGatewayZEVMEventsMetaData contains all meta data concerning the IGatewayZEVMEvents contract. var IGatewayZEVMEventsMetaData = &bind.MetaData{ - ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"Call\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"to\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasfee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolFlatFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"Withdrawal\",\"type\":\"event\"}]", + ABI: "[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"Call\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"from\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"to\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"gasfee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"protocolFlatFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"message\",\"type\":\"bytes\"}],\"name\":\"Withdrawal\",\"type\":\"event\"}]", } // IGatewayZEVMEventsABI is the input ABI used to generate the binding from. @@ -396,6 +396,7 @@ func (it *IGatewayZEVMEventsWithdrawalIterator) Close() error { // IGatewayZEVMEventsWithdrawal represents a Withdrawal event raised by the IGatewayZEVMEvents contract. type IGatewayZEVMEventsWithdrawal struct { From common.Address + Zrc20 common.Address To []byte Value *big.Int Gasfee *big.Int @@ -404,9 +405,9 @@ type IGatewayZEVMEventsWithdrawal struct { Raw types.Log // Blockchain specific contextual infos } -// FilterWithdrawal is a free log retrieval operation binding the contract event 0x1866ad2994816c79f4103e1eddacc7b085eb7c635205243a28940be69b01536d. +// FilterWithdrawal is a free log retrieval operation binding the contract event 0x2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716. // -// Solidity: event Withdrawal(address indexed from, bytes to, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message) +// Solidity: event Withdrawal(address indexed from, address zrc20, bytes to, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message) func (_IGatewayZEVMEvents *IGatewayZEVMEventsFilterer) FilterWithdrawal(opts *bind.FilterOpts, from []common.Address) (*IGatewayZEVMEventsWithdrawalIterator, error) { var fromRule []interface{} @@ -421,9 +422,9 @@ func (_IGatewayZEVMEvents *IGatewayZEVMEventsFilterer) FilterWithdrawal(opts *bi return &IGatewayZEVMEventsWithdrawalIterator{contract: _IGatewayZEVMEvents.contract, event: "Withdrawal", logs: logs, sub: sub}, nil } -// WatchWithdrawal is a free log subscription operation binding the contract event 0x1866ad2994816c79f4103e1eddacc7b085eb7c635205243a28940be69b01536d. +// WatchWithdrawal is a free log subscription operation binding the contract event 0x2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716. // -// Solidity: event Withdrawal(address indexed from, bytes to, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message) +// Solidity: event Withdrawal(address indexed from, address zrc20, bytes to, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message) func (_IGatewayZEVMEvents *IGatewayZEVMEventsFilterer) WatchWithdrawal(opts *bind.WatchOpts, sink chan<- *IGatewayZEVMEventsWithdrawal, from []common.Address) (event.Subscription, error) { var fromRule []interface{} @@ -463,9 +464,9 @@ func (_IGatewayZEVMEvents *IGatewayZEVMEventsFilterer) WatchWithdrawal(opts *bin }), nil } -// ParseWithdrawal is a log parse operation binding the contract event 0x1866ad2994816c79f4103e1eddacc7b085eb7c635205243a28940be69b01536d. +// ParseWithdrawal is a log parse operation binding the contract event 0x2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716. // -// Solidity: event Withdrawal(address indexed from, bytes to, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message) +// Solidity: event Withdrawal(address indexed from, address zrc20, bytes to, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message) func (_IGatewayZEVMEvents *IGatewayZEVMEventsFilterer) ParseWithdrawal(log types.Log) (*IGatewayZEVMEventsWithdrawal, error) { event := new(IGatewayZEVMEventsWithdrawal) if err := _IGatewayZEVMEvents.contract.UnpackLog(event, "Withdrawal", log); err != nil { diff --git a/pkg/contracts/prototypes/zevm/senderzevm.sol/senderzevm.go b/pkg/contracts/prototypes/zevm/senderzevm.sol/senderzevm.go index 0edd4100..dec285be 100644 --- a/pkg/contracts/prototypes/zevm/senderzevm.sol/senderzevm.go +++ b/pkg/contracts/prototypes/zevm/senderzevm.sol/senderzevm.go @@ -32,7 +32,7 @@ var ( // SenderZEVMMetaData contains all meta data concerning the SenderZEVM contract. var SenderZEVMMetaData = &bind.MetaData{ ABI: "[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_gateway\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ApprovalFailed\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"num\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"name\":\"callReceiver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"gateway\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"receiver\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"zrc20\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"num\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"flag\",\"type\":\"bool\"}],\"name\":\"withdrawAndCallReceiver\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", - Bin: "0x608060405234801561001057600080fd5b50604051610bcd380380610bcd8339818101604052810190610032919061008d565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610108565b600081519050610087816100f1565b92915050565b6000602082840312156100a3576100a26100ec565b5b60006100b184828501610078565b91505092915050565b60006100c5826100cc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6100fa816100ba565b811461010557600080fd5b50565b610ab6806101176000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b614610062578063a0a1730b14610080575b600080fd5b610060600480360381019061005b91906105fd565b61009c565b005b61006a6102af565b6040516100779190610761565b60405180910390f35b61009a6004803603810190610095919061055e565b6102d3565b005b60008383836040516024016100b39392919061082f565b6040516020818303038152906040527fe04d4f97000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090508473ffffffffffffffffffffffffffffffffffffffff1663095ea7b360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16886040518363ffffffff1660e01b815260040161018d92919061077c565b602060405180830381600087803b1580156101a757600080fd5b505af11580156101bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101df9190610531565b610215576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637993c1e0888888856040518563ffffffff1660e01b815260040161027494939291906107dc565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008383836040516024016102ea9392919061082f565b6040516020818303038152906040527fe04d4f97000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ac7c44c86836040518363ffffffff1660e01b81526004016103c49291906107a5565b600060405180830381600087803b1580156103de57600080fd5b505af11580156103f2573d6000803e3d6000fd5b505050505050505050565b600061041061040b84610892565b61086d565b90508281526020810184848401111561042c5761042b610a1b565b5b610437848285610974565b509392505050565b600061045261044d846108c3565b61086d565b90508281526020810184848401111561046e5761046d610a1b565b5b610479848285610974565b509392505050565b60008135905061049081610a3b565b92915050565b6000813590506104a581610a52565b92915050565b6000815190506104ba81610a52565b92915050565b600082601f8301126104d5576104d4610a16565b5b81356104e58482602086016103fd565b91505092915050565b600082601f83011261050357610502610a16565b5b813561051384826020860161043f565b91505092915050565b60008135905061052b81610a69565b92915050565b60006020828403121561054757610546610a25565b5b6000610555848285016104ab565b91505092915050565b6000806000806080858703121561057857610577610a25565b5b600085013567ffffffffffffffff81111561059657610595610a20565b5b6105a2878288016104c0565b945050602085013567ffffffffffffffff8111156105c3576105c2610a20565b5b6105cf878288016104ee565b93505060406105e08782880161051c565b92505060606105f187828801610496565b91505092959194509250565b60008060008060008060c0878903121561061a57610619610a25565b5b600087013567ffffffffffffffff81111561063857610637610a20565b5b61064489828a016104c0565b965050602061065589828a0161051c565b955050604061066689828a01610481565b945050606087013567ffffffffffffffff81111561068757610686610a20565b5b61069389828a016104ee565b93505060806106a489828a0161051c565b92505060a06106b589828a01610496565b9150509295509295509295565b6106cb8161092c565b82525050565b6106da8161093e565b82525050565b60006106eb826108f4565b6106f5818561090a565b9350610705818560208601610983565b61070e81610a2a565b840191505092915050565b6000610724826108ff565b61072e818561091b565b935061073e818560208601610983565b61074781610a2a565b840191505092915050565b61075b8161096a565b82525050565b600060208201905061077660008301846106c2565b92915050565b600060408201905061079160008301856106c2565b61079e6020830184610752565b9392505050565b600060408201905081810360008301526107bf81856106e0565b905081810360208301526107d381846106e0565b90509392505050565b600060808201905081810360008301526107f681876106e0565b90506108056020830186610752565b61081260408301856106c2565b818103606083015261082481846106e0565b905095945050505050565b600060608201905081810360008301526108498186610719565b90506108586020830185610752565b61086560408301846106d1565b949350505050565b6000610877610888565b905061088382826109b6565b919050565b6000604051905090565b600067ffffffffffffffff8211156108ad576108ac6109e7565b5b6108b682610a2a565b9050602081019050919050565b600067ffffffffffffffff8211156108de576108dd6109e7565b5b6108e782610a2a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006109378261094a565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156109a1578082015181840152602081019050610986565b838111156109b0576000848401525b50505050565b6109bf82610a2a565b810181811067ffffffffffffffff821117156109de576109dd6109e7565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b610a448161092c565b8114610a4f57600080fd5b50565b610a5b8161093e565b8114610a6657600080fd5b50565b610a728161096a565b8114610a7d57600080fd5b5056fea2646970667358221220192b4e23b9b6daaae9f30fb00f65433e56a5d8a6906223e4fbd169def800a8a264736f6c63430008070033", + Bin: "0x608060405234801561001057600080fd5b50604051610bcd380380610bcd8339818101604052810190610032919061008d565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610108565b600081519050610087816100f1565b92915050565b6000602082840312156100a3576100a26100ec565b5b60006100b184828501610078565b91505092915050565b60006100c5826100cc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6100fa816100ba565b811461010557600080fd5b50565b610ab6806101176000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b614610062578063a0a1730b14610080575b600080fd5b610060600480360381019061005b91906105fd565b61009c565b005b61006a6102af565b6040516100779190610761565b60405180910390f35b61009a6004803603810190610095919061055e565b6102d3565b005b60008383836040516024016100b39392919061082f565b6040516020818303038152906040527fe04d4f97000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090508473ffffffffffffffffffffffffffffffffffffffff1663095ea7b360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16886040518363ffffffff1660e01b815260040161018d92919061077c565b602060405180830381600087803b1580156101a757600080fd5b505af11580156101bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101df9190610531565b610215576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637993c1e0888888856040518563ffffffff1660e01b815260040161027494939291906107dc565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008383836040516024016102ea9392919061082f565b6040516020818303038152906040527fe04d4f97000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ac7c44c86836040518363ffffffff1660e01b81526004016103c49291906107a5565b600060405180830381600087803b1580156103de57600080fd5b505af11580156103f2573d6000803e3d6000fd5b505050505050505050565b600061041061040b84610892565b61086d565b90508281526020810184848401111561042c5761042b610a1b565b5b610437848285610974565b509392505050565b600061045261044d846108c3565b61086d565b90508281526020810184848401111561046e5761046d610a1b565b5b610479848285610974565b509392505050565b60008135905061049081610a3b565b92915050565b6000813590506104a581610a52565b92915050565b6000815190506104ba81610a52565b92915050565b600082601f8301126104d5576104d4610a16565b5b81356104e58482602086016103fd565b91505092915050565b600082601f83011261050357610502610a16565b5b813561051384826020860161043f565b91505092915050565b60008135905061052b81610a69565b92915050565b60006020828403121561054757610546610a25565b5b6000610555848285016104ab565b91505092915050565b6000806000806080858703121561057857610577610a25565b5b600085013567ffffffffffffffff81111561059657610595610a20565b5b6105a2878288016104c0565b945050602085013567ffffffffffffffff8111156105c3576105c2610a20565b5b6105cf878288016104ee565b93505060406105e08782880161051c565b92505060606105f187828801610496565b91505092959194509250565b60008060008060008060c0878903121561061a57610619610a25565b5b600087013567ffffffffffffffff81111561063857610637610a20565b5b61064489828a016104c0565b965050602061065589828a0161051c565b955050604061066689828a01610481565b945050606087013567ffffffffffffffff81111561068757610686610a20565b5b61069389828a016104ee565b93505060806106a489828a0161051c565b92505060a06106b589828a01610496565b9150509295509295509295565b6106cb8161092c565b82525050565b6106da8161093e565b82525050565b60006106eb826108f4565b6106f5818561090a565b9350610705818560208601610983565b61070e81610a2a565b840191505092915050565b6000610724826108ff565b61072e818561091b565b935061073e818560208601610983565b61074781610a2a565b840191505092915050565b61075b8161096a565b82525050565b600060208201905061077660008301846106c2565b92915050565b600060408201905061079160008301856106c2565b61079e6020830184610752565b9392505050565b600060408201905081810360008301526107bf81856106e0565b905081810360208301526107d381846106e0565b90509392505050565b600060808201905081810360008301526107f681876106e0565b90506108056020830186610752565b61081260408301856106c2565b818103606083015261082481846106e0565b905095945050505050565b600060608201905081810360008301526108498186610719565b90506108586020830185610752565b61086560408301846106d1565b949350505050565b6000610877610888565b905061088382826109b6565b919050565b6000604051905090565b600067ffffffffffffffff8211156108ad576108ac6109e7565b5b6108b682610a2a565b9050602081019050919050565b600067ffffffffffffffff8211156108de576108dd6109e7565b5b6108e782610a2a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006109378261094a565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156109a1578082015181840152602081019050610986565b838111156109b0576000848401525b50505050565b6109bf82610a2a565b810181811067ffffffffffffffff821117156109de576109dd6109e7565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b610a448161092c565b8114610a4f57600080fd5b50565b610a5b8161093e565b8114610a6657600080fd5b50565b610a728161096a565b8114610a7d57600080fd5b5056fea264697066735822122047394ff599eddfa076b2235d0fd5a7dbfc57b711a64fc8cf9215f4568c2a7f7b64736f6c63430008070033", } // SenderZEVMABI is the input ABI used to generate the binding from. diff --git a/scripts/worker.ts b/scripts/worker.ts index aaf749a9..ddea9189 100644 --- a/scripts/worker.ts +++ b/scripts/worker.ts @@ -131,11 +131,11 @@ export const startWorker = async () => { await executeTx.wait(); }); - // event Withdrawal(address indexed from, bytes to, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message); + // event Withdrawal(address indexed from, address zrc20, bytes to, uint256 value, uint256 gasfee, uint256 protocolFlatFee, bytes message); systemContracts.gatewayZEVM.on("Withdrawal", async (...args: Array) => { console.log("Worker: Withdrawal event on GatewayZEVM."); const receiver = args[1]; - const message = args[5]; + const message = args[6]; if (message != "0x") { console.log("Worker: Calling ReceiverEVM through GatewayEVM..."); const executeTx = await systemContracts.gatewayEVM.execute(receiver, message, { value: 0 }); diff --git a/test/fuzz/ERC20CustodyNewEchidnaTest.sol b/test/fuzz/ERC20CustodyNewEchidnaTest.sol index 079334df..ae46ace7 100644 --- a/test/fuzz/ERC20CustodyNewEchidnaTest.sol +++ b/test/fuzz/ERC20CustodyNewEchidnaTest.sol @@ -13,7 +13,7 @@ contract ERC20CustodyNewEchidnaTest is ERC20CustodyNew { GatewayEVM testGateway = new GatewayEVM(); constructor() ERC20CustodyNew(address(testGateway)) { - testGateway.initialize(echidnaCaller); + testGateway.initialize(echidnaCaller, address(0x123)); testERC20 = new TestERC20("test", "TEST"); testGateway.setCustody(address(this)); } diff --git a/test/fuzz/GatewayEVMEchidnaTest.sol b/test/fuzz/GatewayEVMEchidnaTest.sol index fda16cbe..f1fefa4d 100644 --- a/test/fuzz/GatewayEVMEchidnaTest.sol +++ b/test/fuzz/GatewayEVMEchidnaTest.sol @@ -11,7 +11,7 @@ contract GatewayEVMEchidnaTest is GatewayEVM { address public echidnaCaller = msg.sender; constructor() { - initialize(echidnaCaller); + initialize(echidnaCaller, address(0x123)); testERC20 = new TestERC20("test", "TEST"); custody = address(new ERC20CustodyNew(address(this))); } diff --git a/test/prototypes/GatewayIntegration.spec.ts b/test/prototypes/GatewayIntegration.spec.ts index 1fef7d6e..741c353c 100644 --- a/test/prototypes/GatewayIntegration.spec.ts +++ b/test/prototypes/GatewayIntegration.spec.ts @@ -1,6 +1,6 @@ import { AddressZero } from "@ethersproject/constants"; import { SignerWithAddress } from "@nomiclabs/hardhat-ethers/signers"; -import { SystemContract, ZRC20 } from "@typechain-types"; +import { SystemContract, ZRC20, WETH9 } from "@typechain-types"; import { expect } from "chai"; import { Contract } from "ethers"; import { parseEther } from "ethers/lib/utils"; @@ -33,8 +33,10 @@ describe("GatewayEVM GatewayZEVM integration", function () { const GatewayEVM = await ethers.getContractFactory("GatewayEVM"); const Custody = await ethers.getContractFactory("ERC20CustodyNew"); const ZetaConnector = await ethers.getContractFactory("ZetaConnectorNew"); + const WZETAFactory = await ethers.getContractFactory("contracts/zevm/WZETA.sol:WETH9"); // Deploy the contracts + const zetaTokenContract = (await WZETAFactory.deploy()) as WETH9; const zeta = await TestERC20.deploy("Zeta", "ZETA"); token = await TestERC20.deploy("Test Token", "TTK"); receiverEVM = await ReceiverEVM.deploy(); @@ -85,7 +87,7 @@ describe("GatewayEVM GatewayZEVM integration", function () { await ZRC20Contract.connect(fungibleModuleSigner).deposit(ownerZEVM.address, parseEther("100")); const GatewayZEVM = await ethers.getContractFactory("GatewayZEVM"); - gatewayZEVM = await upgrades.deployProxy(GatewayZEVM, [], { + gatewayZEVM = await upgrades.deployProxy(GatewayZEVM, [zetaTokenContract.address], { initializer: "initialize", kind: "uups", }); @@ -141,13 +143,13 @@ describe("GatewayEVM GatewayZEVM integration", function () { // Encode the function call data and call on zevm const message = receiverEVM.interface.encodeFunctionData("receivePayable", [str, num, flag]); const callTx = await gatewayZEVM - .connect(ownerZEVM) - .withdrawAndCall(receiverEVM.address, parseEther("1"), ZRC20Contract.address, message); + .connect(ownerZEVM)["withdrawAndCall(bytes,uint256,address,bytes)"](receiverEVM.address, parseEther("1"), ZRC20Contract.address, message); await expect(callTx) .to.emit(gatewayZEVM, "Withdrawal") .withArgs( ethers.utils.getAddress(ownerZEVM.address), + ethers.utils.getAddress(ZRC20Contract.address), receiverEVM.address.toLowerCase(), parseEther("1"), 0, @@ -158,7 +160,7 @@ describe("GatewayEVM GatewayZEVM integration", function () { // Get message from events const callTxReceipt = await callTx.wait(); const callEvent = callTxReceipt.events.filter((e) => e.event == "Withdrawal")[0]; - const callMessage = callEvent.args[5]; + const callMessage = callEvent.args[6]; // Call execute on evm const executeTx = await gatewayEVM.execute(receiverEVM.address, callMessage, { value: value }); @@ -217,6 +219,7 @@ describe("GatewayEVM GatewayZEVM integration", function () { .to.emit(gatewayZEVM, "Withdrawal") .withArgs( ethers.utils.getAddress(senderZEVM.address), + ethers.utils.getAddress(ZRC20Contract.address), receiverEVM.address.toLowerCase(), parseEther("1"), 0, @@ -225,7 +228,7 @@ describe("GatewayEVM GatewayZEVM integration", function () { ); const callEvent = callTxReceipt.events.filter((e) => e.event == "Withdrawal")[0]; - const callMessage = callEvent.args[5]; + const callMessage = callEvent.args[6]; // Call execute on evm const executeTx = await gatewayEVM.execute(receiverEVM.address, callMessage, { value: value }); diff --git a/test/prototypes/GatewayZEVM.spec.ts b/test/prototypes/GatewayZEVM.spec.ts index f215e762..43055791 100644 --- a/test/prototypes/GatewayZEVM.spec.ts +++ b/test/prototypes/GatewayZEVM.spec.ts @@ -33,9 +33,11 @@ describe("GatewayZEVM", function () { const SystemContractFactory = await ethers.getContractFactory("SystemContractMock"); systemContract = (await SystemContractFactory.deploy(AddressZero, AddressZero, AddressZero)) as SystemContract; + const WZETAFactory = await ethers.getContractFactory("contracts/zevm/WZETA.sol:WETH9"); + const zetaTokenContract = (await WZETAFactory.deploy()); const Gateway = await ethers.getContractFactory("GatewayZEVM"); - gateway = await upgrades.deployProxy(Gateway, [], { + gateway = await upgrades.deployProxy(Gateway, [zetaTokenContract.address], { initializer: "initialize", kind: "uups", }); @@ -67,7 +69,7 @@ describe("GatewayZEVM", function () { it("should withdraw zrc20 and emit event", async function () { const tx = await gateway .connect(owner) - .withdraw(ethers.utils.arrayify(addrs[0].address), parseEther("1"), ZRC20Contract.address); + ["withdraw(bytes,uint256,address)"](ethers.utils.arrayify(addrs[0].address), parseEther("1"), ZRC20Contract.address); const balanceOfAfterWithdrawal = (await ZRC20Contract.balanceOf(owner.address)) as BigNumber; expect(balanceOfAfterWithdrawal).to.equal(parseEther("99")); @@ -76,6 +78,7 @@ describe("GatewayZEVM", function () { .to.emit(gateway, "Withdrawal") .withArgs( ethers.utils.getAddress(owner.address), + ethers.utils.getAddress(ZRC20Contract.address), addrs[0].address.toLowerCase(), parseEther("1"), 0, @@ -91,7 +94,7 @@ describe("GatewayZEVM", function () { const tx = await gateway .connect(owner) - .withdrawAndCall(ethers.utils.arrayify(addrs[0].address), parseEther("1"), ZRC20Contract.address, message); + ["withdrawAndCall(bytes,uint256,address,bytes)"](ethers.utils.arrayify(addrs[0].address), parseEther("1"), ZRC20Contract.address, message); const balanceOfAfterWithdrawal = (await ZRC20Contract.balanceOf(owner.address)) as BigNumber; expect(balanceOfAfterWithdrawal).to.equal(parseEther("99")); @@ -100,6 +103,7 @@ describe("GatewayZEVM", function () { .to.emit(gateway, "Withdrawal") .withArgs( ethers.utils.getAddress(owner.address), + ethers.utils.getAddress(ZRC20Contract.address), addrs[0].address.toLowerCase(), parseEther("1"), 0, diff --git a/typechain-types/contracts/prototypes/test/GatewayEVMZEVM.t.sol/GatewayEVMZEVMTest.ts b/typechain-types/contracts/prototypes/test/GatewayEVMZEVM.t.sol/GatewayEVMZEVMTest.ts index a887755e..ab262892 100644 --- a/typechain-types/contracts/prototypes/test/GatewayEVMZEVM.t.sol/GatewayEVMZEVMTest.ts +++ b/typechain-types/contracts/prototypes/test/GatewayEVMZEVM.t.sol/GatewayEVMZEVMTest.ts @@ -200,7 +200,7 @@ export interface GatewayEVMZEVMTestInterface extends utils.Interface { "ReceivedNoParams(address)": EventFragment; "ReceivedNonPayable(address,string[],uint256[],bool)": EventFragment; "ReceivedPayable(address,uint256,string,uint256,bool)": EventFragment; - "Withdrawal(address,bytes,uint256,uint256,uint256,bytes)": EventFragment; + "Withdrawal(address,address,bytes,uint256,uint256,uint256,bytes)": EventFragment; "log(string)": EventFragment; "log_address(address)": EventFragment; "log_array(uint256[])": EventFragment; @@ -387,6 +387,7 @@ export type ReceivedPayableEventFilter = TypedEventFilter; export interface WithdrawalEventObject { from: string; + zrc20: string; to: string; value: BigNumber; gasfee: BigNumber; @@ -394,7 +395,7 @@ export interface WithdrawalEventObject { message: string; } export type WithdrawalEvent = TypedEvent< - [string, string, BigNumber, BigNumber, BigNumber, string], + [string, string, string, BigNumber, BigNumber, BigNumber, string], WithdrawalEventObject >; @@ -889,8 +890,9 @@ export interface GatewayEVMZEVMTest extends BaseContract { flag?: null ): ReceivedPayableEventFilter; - "Withdrawal(address,bytes,uint256,uint256,uint256,bytes)"( + "Withdrawal(address,address,bytes,uint256,uint256,uint256,bytes)"( from?: PromiseOrValue | null, + zrc20?: null, to?: null, value?: null, gasfee?: null, @@ -899,6 +901,7 @@ export interface GatewayEVMZEVMTest extends BaseContract { ): WithdrawalEventFilter; Withdrawal( from?: PromiseOrValue | null, + zrc20?: null, to?: null, value?: null, gasfee?: null, diff --git a/typechain-types/contracts/prototypes/zevm/GatewayZEVM.ts b/typechain-types/contracts/prototypes/zevm/GatewayZEVM.ts index a9dde1e5..b972f4d6 100644 --- a/typechain-types/contracts/prototypes/zevm/GatewayZEVM.ts +++ b/typechain-types/contracts/prototypes/zevm/GatewayZEVM.ts @@ -47,7 +47,7 @@ export interface GatewayZEVMInterface extends utils.Interface { "deposit(address,uint256,address)": FunctionFragment; "depositAndCall((bytes,address,uint256),address,uint256,address,bytes)": FunctionFragment; "execute((bytes,address,uint256),address,uint256,address,bytes)": FunctionFragment; - "initialize()": FunctionFragment; + "initialize(address)": FunctionFragment; "owner()": FunctionFragment; "proxiableUUID()": FunctionFragment; "renounceOwnership()": FunctionFragment; @@ -55,7 +55,10 @@ export interface GatewayZEVMInterface extends utils.Interface { "upgradeTo(address)": FunctionFragment; "upgradeToAndCall(address,bytes)": FunctionFragment; "withdraw(bytes,uint256,address)": FunctionFragment; + "withdraw(uint256)": FunctionFragment; + "withdrawAndCall(uint256,bytes)": FunctionFragment; "withdrawAndCall(bytes,uint256,address,bytes)": FunctionFragment; + "wzeta()": FunctionFragment; }; getFunction( @@ -72,8 +75,11 @@ export interface GatewayZEVMInterface extends utils.Interface { | "transferOwnership" | "upgradeTo" | "upgradeToAndCall" - | "withdraw" - | "withdrawAndCall" + | "withdraw(bytes,uint256,address)" + | "withdraw(uint256)" + | "withdrawAndCall(uint256,bytes)" + | "withdrawAndCall(bytes,uint256,address,bytes)" + | "wzeta" ): FunctionFragment; encodeFunctionData( @@ -114,7 +120,7 @@ export interface GatewayZEVMInterface extends utils.Interface { ): string; encodeFunctionData( functionFragment: "initialize", - values?: undefined + values: [PromiseOrValue] ): string; encodeFunctionData(functionFragment: "owner", values?: undefined): string; encodeFunctionData( @@ -138,7 +144,7 @@ export interface GatewayZEVMInterface extends utils.Interface { values: [PromiseOrValue, PromiseOrValue] ): string; encodeFunctionData( - functionFragment: "withdraw", + functionFragment: "withdraw(bytes,uint256,address)", values: [ PromiseOrValue, PromiseOrValue, @@ -146,7 +152,15 @@ export interface GatewayZEVMInterface extends utils.Interface { ] ): string; encodeFunctionData( - functionFragment: "withdrawAndCall", + functionFragment: "withdraw(uint256)", + values: [PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "withdrawAndCall(uint256,bytes)", + values: [PromiseOrValue, PromiseOrValue] + ): string; + encodeFunctionData( + functionFragment: "withdrawAndCall(bytes,uint256,address,bytes)", values: [ PromiseOrValue, PromiseOrValue, @@ -154,6 +168,7 @@ export interface GatewayZEVMInterface extends utils.Interface { PromiseOrValue ] ): string; + encodeFunctionData(functionFragment: "wzeta", values?: undefined): string; decodeFunctionResult( functionFragment: "FUNGIBLE_MODULE_ADDRESS", @@ -185,11 +200,23 @@ export interface GatewayZEVMInterface extends utils.Interface { functionFragment: "upgradeToAndCall", data: BytesLike ): Result; - decodeFunctionResult(functionFragment: "withdraw", data: BytesLike): Result; decodeFunctionResult( - functionFragment: "withdrawAndCall", + functionFragment: "withdraw(bytes,uint256,address)", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "withdraw(uint256)", data: BytesLike ): Result; + decodeFunctionResult( + functionFragment: "withdrawAndCall(uint256,bytes)", + data: BytesLike + ): Result; + decodeFunctionResult( + functionFragment: "withdrawAndCall(bytes,uint256,address,bytes)", + data: BytesLike + ): Result; + decodeFunctionResult(functionFragment: "wzeta", data: BytesLike): Result; events: { "AdminChanged(address,address)": EventFragment; @@ -198,7 +225,7 @@ export interface GatewayZEVMInterface extends utils.Interface { "Initialized(uint8)": EventFragment; "OwnershipTransferred(address,address)": EventFragment; "Upgraded(address)": EventFragment; - "Withdrawal(address,bytes,uint256,uint256,uint256,bytes)": EventFragment; + "Withdrawal(address,address,bytes,uint256,uint256,uint256,bytes)": EventFragment; }; getEvent(nameOrSignatureOrTopic: "AdminChanged"): EventFragment; @@ -268,6 +295,7 @@ export type UpgradedEventFilter = TypedEventFilter; export interface WithdrawalEventObject { from: string; + zrc20: string; to: string; value: BigNumber; gasfee: BigNumber; @@ -275,7 +303,7 @@ export interface WithdrawalEventObject { message: string; } export type WithdrawalEvent = TypedEvent< - [string, string, BigNumber, BigNumber, BigNumber, string], + [string, string, string, BigNumber, BigNumber, BigNumber, string], WithdrawalEventObject >; @@ -342,6 +370,7 @@ export interface GatewayZEVM extends BaseContract { ): Promise; initialize( + _wzeta: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; @@ -369,20 +398,33 @@ export interface GatewayZEVM extends BaseContract { overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - withdraw( + "withdraw(bytes,uint256,address)"( receiver: PromiseOrValue, amount: PromiseOrValue, zrc20: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - withdrawAndCall( + "withdraw(uint256)"( + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "withdrawAndCall(uint256,bytes)"( + amount: PromiseOrValue, + message: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "withdrawAndCall(bytes,uint256,address,bytes)"( receiver: PromiseOrValue, amount: PromiseOrValue, zrc20: PromiseOrValue, message: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + + wzeta(overrides?: CallOverrides): Promise<[string]>; }; FUNGIBLE_MODULE_ADDRESS(overrides?: CallOverrides): Promise; @@ -419,6 +461,7 @@ export interface GatewayZEVM extends BaseContract { ): Promise; initialize( + _wzeta: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; @@ -446,14 +489,25 @@ export interface GatewayZEVM extends BaseContract { overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - withdraw( + "withdraw(bytes,uint256,address)"( receiver: PromiseOrValue, amount: PromiseOrValue, zrc20: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - withdrawAndCall( + "withdraw(uint256)"( + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "withdrawAndCall(uint256,bytes)"( + amount: PromiseOrValue, + message: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "withdrawAndCall(bytes,uint256,address,bytes)"( receiver: PromiseOrValue, amount: PromiseOrValue, zrc20: PromiseOrValue, @@ -461,6 +515,8 @@ export interface GatewayZEVM extends BaseContract { overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + wzeta(overrides?: CallOverrides): Promise; + callStatic: { FUNGIBLE_MODULE_ADDRESS(overrides?: CallOverrides): Promise; @@ -495,7 +551,10 @@ export interface GatewayZEVM extends BaseContract { overrides?: CallOverrides ): Promise; - initialize(overrides?: CallOverrides): Promise; + initialize( + _wzeta: PromiseOrValue, + overrides?: CallOverrides + ): Promise; owner(overrides?: CallOverrides): Promise; @@ -519,20 +578,33 @@ export interface GatewayZEVM extends BaseContract { overrides?: CallOverrides ): Promise; - withdraw( + "withdraw(bytes,uint256,address)"( receiver: PromiseOrValue, amount: PromiseOrValue, zrc20: PromiseOrValue, overrides?: CallOverrides ): Promise; - withdrawAndCall( + "withdraw(uint256)"( + amount: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "withdrawAndCall(uint256,bytes)"( + amount: PromiseOrValue, + message: PromiseOrValue, + overrides?: CallOverrides + ): Promise; + + "withdrawAndCall(bytes,uint256,address,bytes)"( receiver: PromiseOrValue, amount: PromiseOrValue, zrc20: PromiseOrValue, message: PromiseOrValue, overrides?: CallOverrides ): Promise; + + wzeta(overrides?: CallOverrides): Promise; }; filters: { @@ -582,8 +654,9 @@ export interface GatewayZEVM extends BaseContract { implementation?: PromiseOrValue | null ): UpgradedEventFilter; - "Withdrawal(address,bytes,uint256,uint256,uint256,bytes)"( + "Withdrawal(address,address,bytes,uint256,uint256,uint256,bytes)"( from?: PromiseOrValue | null, + zrc20?: null, to?: null, value?: null, gasfee?: null, @@ -592,6 +665,7 @@ export interface GatewayZEVM extends BaseContract { ): WithdrawalEventFilter; Withdrawal( from?: PromiseOrValue | null, + zrc20?: null, to?: null, value?: null, gasfee?: null, @@ -635,6 +709,7 @@ export interface GatewayZEVM extends BaseContract { ): Promise; initialize( + _wzeta: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; @@ -662,20 +737,33 @@ export interface GatewayZEVM extends BaseContract { overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - withdraw( + "withdraw(bytes,uint256,address)"( receiver: PromiseOrValue, amount: PromiseOrValue, zrc20: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - withdrawAndCall( + "withdraw(uint256)"( + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "withdrawAndCall(uint256,bytes)"( + amount: PromiseOrValue, + message: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "withdrawAndCall(bytes,uint256,address,bytes)"( receiver: PromiseOrValue, amount: PromiseOrValue, zrc20: PromiseOrValue, message: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + + wzeta(overrides?: CallOverrides): Promise; }; populateTransaction: { @@ -715,6 +803,7 @@ export interface GatewayZEVM extends BaseContract { ): Promise; initialize( + _wzeta: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; @@ -742,19 +831,32 @@ export interface GatewayZEVM extends BaseContract { overrides?: PayableOverrides & { from?: PromiseOrValue } ): Promise; - withdraw( + "withdraw(bytes,uint256,address)"( receiver: PromiseOrValue, amount: PromiseOrValue, zrc20: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; - withdrawAndCall( + "withdraw(uint256)"( + amount: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "withdrawAndCall(uint256,bytes)"( + amount: PromiseOrValue, + message: PromiseOrValue, + overrides?: Overrides & { from?: PromiseOrValue } + ): Promise; + + "withdrawAndCall(bytes,uint256,address,bytes)"( receiver: PromiseOrValue, amount: PromiseOrValue, zrc20: PromiseOrValue, message: PromiseOrValue, overrides?: Overrides & { from?: PromiseOrValue } ): Promise; + + wzeta(overrides?: CallOverrides): Promise; }; } diff --git a/typechain-types/contracts/prototypes/zevm/interfaces.sol/IGatewayZEVMEvents.ts b/typechain-types/contracts/prototypes/zevm/interfaces.sol/IGatewayZEVMEvents.ts index 21a7ccd5..829208d9 100644 --- a/typechain-types/contracts/prototypes/zevm/interfaces.sol/IGatewayZEVMEvents.ts +++ b/typechain-types/contracts/prototypes/zevm/interfaces.sol/IGatewayZEVMEvents.ts @@ -17,7 +17,7 @@ export interface IGatewayZEVMEventsInterface extends utils.Interface { events: { "Call(address,bytes,bytes)": EventFragment; - "Withdrawal(address,bytes,uint256,uint256,uint256,bytes)": EventFragment; + "Withdrawal(address,address,bytes,uint256,uint256,uint256,bytes)": EventFragment; }; getEvent(nameOrSignatureOrTopic: "Call"): EventFragment; @@ -35,6 +35,7 @@ export type CallEventFilter = TypedEventFilter; export interface WithdrawalEventObject { from: string; + zrc20: string; to: string; value: BigNumber; gasfee: BigNumber; @@ -42,7 +43,7 @@ export interface WithdrawalEventObject { message: string; } export type WithdrawalEvent = TypedEvent< - [string, string, BigNumber, BigNumber, BigNumber, string], + [string, string, string, BigNumber, BigNumber, BigNumber, string], WithdrawalEventObject >; @@ -90,8 +91,9 @@ export interface IGatewayZEVMEvents extends BaseContract { message?: null ): CallEventFilter; - "Withdrawal(address,bytes,uint256,uint256,uint256,bytes)"( + "Withdrawal(address,address,bytes,uint256,uint256,uint256,bytes)"( from?: PromiseOrValue | null, + zrc20?: null, to?: null, value?: null, gasfee?: null, @@ -100,6 +102,7 @@ export interface IGatewayZEVMEvents extends BaseContract { ): WithdrawalEventFilter; Withdrawal( from?: PromiseOrValue | null, + zrc20?: null, to?: null, value?: null, gasfee?: null, diff --git a/typechain-types/factories/contracts/prototypes/test/GatewayEVMZEVM.t.sol/GatewayEVMZEVMTest__factory.ts b/typechain-types/factories/contracts/prototypes/test/GatewayEVMZEVM.t.sol/GatewayEVMZEVMTest__factory.ts index d435ca66..38d4fde3 100644 --- a/typechain-types/factories/contracts/prototypes/test/GatewayEVMZEVM.t.sol/GatewayEVMZEVMTest__factory.ts +++ b/typechain-types/factories/contracts/prototypes/test/GatewayEVMZEVM.t.sol/GatewayEVMZEVMTest__factory.ts @@ -35,6 +35,11 @@ const _abi = [ name: "ExecutionFailed", type: "error", }, + { + inputs: [], + name: "FailedZetaSent", + type: "error", + }, { inputs: [], name: "GasFeeTransferFailed", @@ -60,6 +65,11 @@ const _abi = [ name: "InvalidTarget", type: "error", }, + { + inputs: [], + name: "WZETATransferFailed", + type: "error", + }, { inputs: [], name: "WithdrawalFailed", @@ -344,6 +354,12 @@ const _abi = [ name: "from", type: "address", }, + { + indexed: false, + internalType: "address", + name: "zrc20", + type: "address", + }, { indexed: false, internalType: "bytes", @@ -963,7 +979,7 @@ const _abi = [ ] as const; const _bytecode = - "0x60806040526001600c60006101000a81548160ff0219169083151502179055506001601f60006101000a81548160ff02191690831515021790555034801561004657600080fd5b5062012d6280620000586000396000f3fe60806040523480156200001157600080fd5b5060043610620001005760003560e01c8063916a17c61162000099578063b5508aa9116200006f578063b5508aa9146200022d578063ba414fa6146200024f578063e20c9f711462000271578063fa7626d414620002935762000100565b8063916a17c614620001dd5780639683c69514620001ff578063b0464fdc146200020b5762000100565b80633e5e3c2311620000db5780633e5e3c2314620001555780633f7286f4146200017757806366d9a9a0146200019957806385226c8114620001bb5762000100565b80630a9254e414620001055780631ed7831c14620001115780632ade38801462000133575b600080fd5b6200010f620002b5565b005b6200011b6200135c565b6040516200012a919062002fcc565b60405180910390f35b6200013d620013ec565b6040516200014c919062003038565b60405180910390f35b6200015f62001586565b6040516200016e919062002fcc565b60405180910390f35b6200018162001616565b60405162000190919062002fcc565b60405180910390f35b620001a3620016a6565b604051620001b2919062003014565b60405180910390f35b620001c56200183d565b604051620001d4919062002ff0565b60405180910390f35b620001e762001920565b604051620001f691906200305c565b60405180910390f35b6200020962001a73565b005b6200021562002112565b6040516200022491906200305c565b60405180910390f35b6200023762002265565b60405162000246919062002ff0565b60405180910390f35b6200025962002348565b60405162000268919062003080565b60405180910390f35b6200027b6200247b565b6040516200028a919062002fcc565b60405180910390f35b6200029d6200250b565b604051620002ac919062003080565b60405180910390f35b30602560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611234602660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550615678602760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614321602c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051620003cd906200251e565b620003d890620032a2565b604051809103906000f080158015620003f5573d6000803e3d6000fd5b50602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405162000444906200251e565b6200044f90620031d3565b604051809103906000f0801580156200046c573d6000803e3d6000fd5b50602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051620004bb906200252c565b604051809103906000f080158015620004d8573d6000803e3d6000fd5b50601f60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516200054a906200253a565b62000556919062002e5d565b604051809103906000f08015801562000573573d6000803e3d6000fd5b50602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051620006089062002548565b6200061592919062002e7a565b604051809103906000f08015801562000632573d6000803e3d6000fd5b50602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663485cc955602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016200071692919062002e7a565b600060405180830381600087803b1580156200073157600080fd5b505af115801562000746573d6000803e3d6000fd5b50505050601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516200077b906200253a565b62000787919062002e5d565b604051809103906000f080158015620007a4573d6000803e3d6000fd5b50602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae7a3a6f602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040162000864919062002e5d565b600060405180830381600087803b1580156200087f57600080fd5b505af115801562000894573d6000803e3d6000fd5b50505050601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166310188aef602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040162000917919062002e5d565b600060405180830381600087803b1580156200093257600080fd5b505af115801562000947573d6000803e3d6000fd5b50505050602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620f42406040518363ffffffff1660e01b8152600401620009cf92919062002f45565b600060405180830381600087803b158015620009ea57600080fd5b505af1158015620009ff573d6000803e3d6000fd5b50505050602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166207a1206040518363ffffffff1660e01b815260040162000a8792919062002f72565b602060405180830381600087803b15801562000aa257600080fd5b505af115801562000ab7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000add919062002648565b5060405162000aec9062002556565b604051809103906000f08015801562000b09573d6000803e3d6000fd5b50602460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405162000b589062002564565b604051809103906000f08015801562000b75573d6000803e3d6000fd5b50602860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405162000be79062002572565b62000bf3919062002e5d565b604051809103906000f08015801562000c10573d6000803e3d6000fd5b50602960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073735b14bb79463307aacbed86daf3322b1e6226ab90507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff166306447d56826040518263ffffffff1660e01b815260040162000cc8919062002e5d565b600060405180830381600087803b15801562000ce357600080fd5b505af115801562000cf8573d6000803e3d6000fd5b50505050600080600060405162000d0f9062002580565b62000d1d9392919062002ea7565b604051809103906000f08015801562000d3a573d6000803e3d6000fd5b50602a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060126001600080602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405162000dd6906200258e565b62000de7969594939291906200320a565b604051809103906000f08015801562000e04573d6000803e3d6000fd5b50602b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ee2815ba6001602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b815260040162000ec792919062003135565b600060405180830381600087803b15801562000ee257600080fd5b505af115801562000ef7573d6000803e3d6000fd5b50505050602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a7cb05076001806040518363ffffffff1660e01b815260040162000f5b92919062003162565b600060405180830381600087803b15801562000f7657600080fd5b505af115801562000f8b573d6000803e3d6000fd5b50505050602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166347e7ef24602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620f42406040518363ffffffff1660e01b81526004016200101392919062002f45565b602060405180830381600087803b1580156200102e57600080fd5b505af115801562001043573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001069919062002648565b50602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166347e7ef24602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620f42406040518363ffffffff1660e01b8152600401620010ee92919062002f45565b602060405180830381600087803b1580156200110957600080fd5b505af11580156200111e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001144919062002648565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620011b157600080fd5b505af1158015620011c6573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff1663ca669fa7602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016200124a919062002e5d565b600060405180830381600087803b1580156200126557600080fd5b505af11580156200127a573d6000803e3d6000fd5b50505050602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620f42406040518363ffffffff1660e01b81526004016200130292919062002f45565b602060405180830381600087803b1580156200131d57600080fd5b505af115801562001332573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001358919062002648565b5050565b60606016805480602002602001604051908101604052809291908181526020018280548015620013e257602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831162001397575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156200157d57838290600052602060002090600202016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201805480602002602001604051908101604052809291908181526020016000905b8282101562001565578382906000526020600020018054620014d190620036a8565b80601f0160208091040260200160405190810160405280929190818152602001828054620014ff90620036a8565b8015620015505780601f10620015245761010080835404028352916020019162001550565b820191906000526020600020905b8154815290600101906020018083116200153257829003601f168201915b505050505081526020019060010190620014af565b50505050815250508152602001906001019062001410565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156200160c57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311620015c1575b5050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156200169c57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831162001651575b5050505050905090565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156200183457838290600052602060002090600202016040518060400160405290816000820180546200170090620036a8565b80601f01602080910402602001604051908101604052809291908181526020018280546200172e90620036a8565b80156200177f5780601f1062001753576101008083540402835291602001916200177f565b820191906000526020600020905b8154815290600101906020018083116200176157829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156200181b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411620017c75790505b50505050508152505081526020019060010190620016ca565b50505050905090565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015620019175783829060005260206000200180546200188390620036a8565b80601f0160208091040260200160405190810160405280929190818152602001828054620018b190620036a8565b8015620019025780601f10620018d65761010080835404028352916020019162001902565b820191906000526020600020905b815481529060010190602001808311620018e457829003601f168201915b50505050508152602001906001019062001861565b50505050905090565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101562001a6a57838290600052602060002090600202016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820180548060200260200160405190810160405280929190818152602001828054801562001a5157602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411620019fd5790505b5050505050815250508152602001906001019062001944565b50505050905090565b60006040518060400160405280600f81526020017f48656c6c6f2c204861726468617421000000000000000000000000000000000081525090506000602a90506000600190506000670de0b6b3a76400009050600063e04d4f9760e01b85858560405160240162001ae7939291906200318f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff1663ca669fa7602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040162001bc6919062002e5d565b600060405180830381600087803b15801562001be157600080fd5b505af115801562001bf6573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff166381bad6f3600180600180602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518663ffffffff1660e01b815260040162001c849594939291906200309d565b600060405180830381600087803b15801562001c9f57600080fd5b505af115801562001cb4573d6000803e3d6000fd5b50505050602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f2b5af078ce280d812dc2241658dc5435c93408020e5418eef55a2b536de51c0f602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405160200162001d47919062002e40565b6040516020818303038152906040528360405162001d67929190620030fa565b60405180910390a2602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ac7c44c602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405160200162001de2919062002e40565b604051602081830303815290604052836040518363ffffffff1660e01b815260040162001e11929190620030fa565b600060405180830381600087803b15801562001e2c57600080fd5b505af115801562001e41573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff1663c88a5e6d601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b815260040162001ec792919062002f9f565b600060405180830381600087803b15801562001ee257600080fd5b505af115801562001ef7573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff166381bad6f3600180600180601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518663ffffffff1660e01b815260040162001f859594939291906200309d565b600060405180830381600087803b15801562001fa057600080fd5b505af115801562001fb5573d6000803e3d6000fd5b50505050602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f838360405162002025929190620032d9565b60405180910390a2601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631cff79cd83602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401620020af92919062002f11565b6000604051808303818588803b158015620020c957600080fd5b505af1158015620020de573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f820116820180604052508101906200210a9190620026ac565b505050505050565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156200225c57838290600052602060002090600202016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182018054806020026020016040519081016040528092919081815260200182805480156200224357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411620021ef5790505b5050505050815250508152602001906001019062002136565b50505050905090565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156200233f578382906000526020600020018054620022ab90620036a8565b80601f0160208091040260200160405190810160405280929190818152602001828054620022d990620036a8565b80156200232a5780601f10620022fe576101008083540402835291602001916200232a565b820191906000526020600020905b8154815290600101906020018083116200230c57829003601f168201915b50505050508152602001906001019062002289565b50505050905090565b6000600860009054906101000a900460ff16156200237857600860009054906101000a900460ff16905062002478565b6000801b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff1663667f9d707f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c7f6661696c656400000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b81526004016200241f92919062002ee4565b60206040518083038186803b1580156200243857600080fd5b505afa1580156200244d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200247391906200267a565b141590505b90565b606060158054806020026020016040519081016040528092919081815260200182805480156200250157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311620024b6575b5050505050905090565b601f60009054906101000a900460ff1681565b611813806200393d83390190565b613564806200515083390190565b61109080620086b483390190565b6111b9806200974483390190565b6110aa806200a8fd83390190565b612eb5806200b9a783390190565b610bcd806200e85c83390190565b6110d7806200f42983390190565b61282d806201050083390190565b6000620025b3620025ad8462003336565b6200330d565b905082815260208101848484011115620025d257620025d1620037ce565b5b620025df84828562003672565b509392505050565b600081519050620025f88162003908565b92915050565b6000815190506200260f8162003922565b92915050565b600082601f8301126200262d576200262c620037c9565b5b81516200263f8482602086016200259c565b91505092915050565b600060208284031215620026615762002660620037d8565b5b60006200267184828501620025e7565b91505092915050565b600060208284031215620026935762002692620037d8565b5b6000620026a384828501620025fe565b91505092915050565b600060208284031215620026c557620026c4620037d8565b5b600082015167ffffffffffffffff811115620026e657620026e5620037d3565b5b620026f48482850162002615565b91505092915050565b60006200270b838362002789565b60208301905092915050565b600062002725838362002b26565b60208301905092915050565b60006200273f838362002bf9565b905092915050565b600062002755838362002d65565b905092915050565b60006200276b838362002dad565b905092915050565b600062002781838362002dee565b905092915050565b62002794816200351c565b82525050565b620027a5816200351c565b82525050565b6000620027b882620033cc565b620027c4818562003472565b9350620027d1836200336c565b8060005b8381101562002808578151620027ec8882620026fd565b9750620027f98362003424565b925050600181019050620027d5565b5085935050505092915050565b60006200282282620033d7565b6200282e818562003483565b93506200283b836200337c565b8060005b838110156200287257815162002856888262002717565b9750620028638362003431565b9250506001810190506200283f565b5085935050505092915050565b60006200288c82620033e2565b62002898818562003494565b935083602082028501620028ac856200338c565b8060005b85811015620028ee5784840389528151620028cc858262002731565b9450620028d9836200343e565b925060208a01995050600181019050620028b0565b50829750879550505050505092915050565b60006200290d82620033e2565b620029198185620034a5565b9350836020820285016200292d856200338c565b8060005b858110156200296f57848403895281516200294d858262002731565b94506200295a836200343e565b925060208a0199505060018101905062002931565b50829750879550505050505092915050565b60006200298e82620033ed565b6200299a8185620034b6565b935083602082028501620029ae856200339c565b8060005b85811015620029f05784840389528151620029ce858262002747565b9450620029db836200344b565b925060208a01995050600181019050620029b2565b50829750879550505050505092915050565b600062002a0f82620033f8565b62002a1b8185620034c7565b93508360208202850162002a2f85620033ac565b8060005b8581101562002a71578484038952815162002a4f85826200275d565b945062002a5c8362003458565b925060208a0199505060018101905062002a33565b50829750879550505050505092915050565b600062002a908262003403565b62002a9c8185620034d8565b93508360208202850162002ab085620033bc565b8060005b8581101562002af2578484038952815162002ad0858262002773565b945062002add8362003465565b925060208a0199505060018101905062002ab4565b50829750879550505050505092915050565b62002b0f8162003530565b82525050565b62002b20816200353c565b82525050565b62002b318162003546565b82525050565b600062002b44826200340e565b62002b508185620034e9565b935062002b6281856020860162003672565b62002b6d81620037dd565b840191505092915050565b62002b8d62002b8782620035be565b62003714565b82525050565b62002b9e81620035d2565b82525050565b62002baf81620035e6565b82525050565b62002bc081620035fa565b82525050565b62002bd1816200360e565b82525050565b62002be28162003622565b82525050565b62002bf38162003636565b82525050565b600062002c068262003419565b62002c128185620034fa565b935062002c2481856020860162003672565b62002c2f81620037dd565b840191505092915050565b600062002c478262003419565b62002c5381856200350b565b935062002c6581856020860162003672565b62002c7081620037dd565b840191505092915050565b600062002c8a6003836200350b565b915062002c9782620037fb565b602082019050919050565b600062002cb16004836200350b565b915062002cbe8262003824565b602082019050919050565b600062002cd86004836200350b565b915062002ce5826200384d565b602082019050919050565b600062002cff6005836200350b565b915062002d0c8262003876565b602082019050919050565b600062002d266004836200350b565b915062002d33826200389f565b602082019050919050565b600062002d4d6003836200350b565b915062002d5a82620038c8565b602082019050919050565b6000604083016000830151848203600086015262002d84828262002bf9565b9150506020830151848203602086015262002da0828262002815565b9150508091505092915050565b600060408301600083015162002dc7600086018262002789565b506020830151848203602086015262002de182826200287f565b9150508091505092915050565b600060408301600083015162002e08600086018262002789565b506020830151848203602086015262002e22828262002815565b9150508091505092915050565b62002e3a81620035a7565b82525050565b600062002e4e828462002b78565b60148201915081905092915050565b600060208201905062002e7460008301846200279a565b92915050565b600060408201905062002e9160008301856200279a565b62002ea060208301846200279a565b9392505050565b600060608201905062002ebe60008301866200279a565b62002ecd60208301856200279a565b62002edc60408301846200279a565b949350505050565b600060408201905062002efb60008301856200279a565b62002f0a602083018462002b15565b9392505050565b600060408201905062002f2860008301856200279a565b818103602083015262002f3c818462002b37565b90509392505050565b600060408201905062002f5c60008301856200279a565b62002f6b602083018462002bb5565b9392505050565b600060408201905062002f8960008301856200279a565b62002f98602083018462002be8565b9392505050565b600060408201905062002fb660008301856200279a565b62002fc5602083018462002e2f565b9392505050565b6000602082019050818103600083015262002fe88184620027ab565b905092915050565b600060208201905081810360008301526200300c818462002900565b905092915050565b6000602082019050818103600083015262003030818462002981565b905092915050565b6000602082019050818103600083015262003054818462002a02565b905092915050565b6000602082019050818103600083015262003078818462002a83565b905092915050565b600060208201905062003097600083018462002b04565b92915050565b600060a082019050620030b4600083018862002b04565b620030c3602083018762002b04565b620030d2604083018662002b04565b620030e1606083018562002b04565b620030f060808301846200279a565b9695505050505050565b6000604082019050818103600083015262003116818562002b37565b905081810360208301526200312c818462002b37565b90509392505050565b60006040820190506200314c600083018562002bd7565b6200315b60208301846200279a565b9392505050565b600060408201905062003179600083018562002bd7565b62003188602083018462002bd7565b9392505050565b60006060820190508181036000830152620031ab818662002c3a565b9050620031bc602083018562002e2f565b620031cb604083018462002b04565b949350505050565b60006040820190508181036000830152620031ee8162002ca2565b90508181036020830152620032038162002cc9565b9050919050565b6000610100820190508181036000830152620032268162002cf0565b905081810360208301526200323b8162002d3e565b90506200324c604083018962002bc6565b6200325b606083018862002bd7565b6200326a608083018762002b93565b6200327960a083018662002ba4565b6200328860c08301856200279a565b6200329760e08301846200279a565b979650505050505050565b60006040820190508181036000830152620032bd8162002d17565b90508181036020830152620032d28162002c7b565b9050919050565b6000604082019050620032f0600083018562002e2f565b818103602083015262003304818462002b37565b90509392505050565b6000620033196200332c565b9050620033278282620036de565b919050565b6000604051905090565b600067ffffffffffffffff8211156200335457620033536200379a565b5b6200335f82620037dd565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000620035298262003587565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60008190506200358282620038f1565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000620035cb826200364a565b9050919050565b6000620035df8262003572565b9050919050565b6000620035f382620035a7565b9050919050565b60006200360782620035a7565b9050919050565b60006200361b82620035b1565b9050919050565b60006200362f82620035a7565b9050919050565b60006200364382620035a7565b9050919050565b600062003657826200365e565b9050919050565b60006200366b8262003587565b9050919050565b60005b838110156200369257808201518184015260208101905062003675565b83811115620036a2576000848401525b50505050565b60006002820490506001821680620036c157607f821691505b60208210811415620036d857620036d76200376b565b5b50919050565b620036e982620037dd565b810181811067ffffffffffffffff821117156200370b576200370a6200379a565b5b80604052505050565b6000620037218262003728565b9050919050565b60006200373582620037ee565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f54544b0000000000000000000000000000000000000000000000000000000000600082015250565b7f7a65746100000000000000000000000000000000000000000000000000000000600082015250565b7f5a45544100000000000000000000000000000000000000000000000000000000600082015250565b7f544f4b454e000000000000000000000000000000000000000000000000000000600082015250565b7f7465737400000000000000000000000000000000000000000000000000000000600082015250565b7f544b4e0000000000000000000000000000000000000000000000000000000000600082015250565b600381106200390557620039046200373c565b5b50565b620039138162003530565b81146200391f57600080fd5b50565b6200392d816200353c565b81146200393957600080fd5b5056fe60806040523480156200001157600080fd5b5060405162001813380380620018138339818101604052810190620000379190620001a3565b818181600390805190602001906200005192919062000075565b5080600490805190602001906200006a92919062000075565b5050505050620003ac565b8280546200008390620002bd565b90600052602060002090601f016020900481019282620000a75760008555620000f3565b82601f10620000c257805160ff1916838001178555620000f3565b82800160010185558215620000f3579182015b82811115620000f2578251825591602001919060010190620000d5565b5b50905062000102919062000106565b5090565b5b808211156200012157600081600090555060010162000107565b5090565b60006200013c620001368462000251565b62000228565b9050828152602081018484840111156200015b576200015a6200038c565b5b6200016884828562000287565b509392505050565b600082601f83011262000188576200018762000387565b5b81516200019a84826020860162000125565b91505092915050565b60008060408385031215620001bd57620001bc62000396565b5b600083015167ffffffffffffffff811115620001de57620001dd62000391565b5b620001ec8582860162000170565b925050602083015167ffffffffffffffff81111562000210576200020f62000391565b5b6200021e8582860162000170565b9150509250929050565b60006200023462000247565b9050620002428282620002f3565b919050565b6000604051905090565b600067ffffffffffffffff8211156200026f576200026e62000358565b5b6200027a826200039b565b9050602081019050919050565b60005b83811015620002a75780820151818401526020810190506200028a565b83811115620002b7576000848401525b50505050565b60006002820490506001821680620002d657607f821691505b60208210811415620002ed57620002ec62000329565b5b50919050565b620002fe826200039b565b810181811067ffffffffffffffff8211171562000320576200031f62000358565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b61145780620003bc6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806340c10f191161007157806340c10f19146101a357806370a08231146101bf57806395d89b41146101ef578063a457c2d71461020d578063a9059cbb1461023d578063dd62ed3e1461026d576100b4565b806306fdde03146100b9578063095ea7b3146100d757806318160ddd1461010757806323b872dd14610125578063313ce567146101555780633950935114610173575b600080fd5b6100c161029d565b6040516100ce9190610ecf565b60405180910390f35b6100f160048036038101906100ec9190610cf6565b61032f565b6040516100fe9190610eb4565b60405180910390f35b61010f610352565b60405161011c9190610ff1565b60405180910390f35b61013f600480360381019061013a9190610ca3565b61035c565b60405161014c9190610eb4565b60405180910390f35b61015d61038b565b60405161016a919061100c565b60405180910390f35b61018d60048036038101906101889190610cf6565b610394565b60405161019a9190610eb4565b60405180910390f35b6101bd60048036038101906101b89190610cf6565b6103cb565b005b6101d960048036038101906101d49190610c36565b6103d9565b6040516101e69190610ff1565b60405180910390f35b6101f7610421565b6040516102049190610ecf565b60405180910390f35b61022760048036038101906102229190610cf6565b6104b3565b6040516102349190610eb4565b60405180910390f35b61025760048036038101906102529190610cf6565b61052a565b6040516102649190610eb4565b60405180910390f35b61028760048036038101906102829190610c63565b61054d565b6040516102949190610ff1565b60405180910390f35b6060600380546102ac90611121565b80601f01602080910402602001604051908101604052809291908181526020018280546102d890611121565b80156103255780601f106102fa57610100808354040283529160200191610325565b820191906000526020600020905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b60008061033a6105d4565b90506103478185856105dc565b600191505092915050565b6000600254905090565b6000806103676105d4565b90506103748582856107a7565b61037f858585610833565b60019150509392505050565b60006012905090565b60008061039f6105d4565b90506103c08185856103b1858961054d565b6103bb9190611043565b6105dc565b600191505092915050565b6103d58282610aab565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461043090611121565b80601f016020809104026020016040519081016040528092919081815260200182805461045c90611121565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b5050505050905090565b6000806104be6105d4565b905060006104cc828661054d565b905083811015610511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050890610fb1565b60405180910390fd5b61051e82868684036105dc565b60019250505092915050565b6000806105356105d4565b9050610542818585610833565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561064c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064390610f91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156106bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b390610f11565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161079a9190610ff1565b60405180910390a3505050565b60006107b3848461054d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461082d578181101561081f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081690610f31565b60405180910390fd5b61082c84848484036105dc565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089a90610f71565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090a90610ef1565b60405180910390fd5b61091e838383610c02565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156109a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099b90610f51565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a929190610ff1565b60405180910390a3610aa5848484610c07565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1290610fd1565b60405180910390fd5b610b2760008383610c02565b8060026000828254610b399190611043565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610bea9190610ff1565b60405180910390a3610bfe60008383610c07565b5050565b505050565b505050565b600081359050610c1b816113f3565b92915050565b600081359050610c308161140a565b92915050565b600060208284031215610c4c57610c4b6111b1565b5b6000610c5a84828501610c0c565b91505092915050565b60008060408385031215610c7a57610c796111b1565b5b6000610c8885828601610c0c565b9250506020610c9985828601610c0c565b9150509250929050565b600080600060608486031215610cbc57610cbb6111b1565b5b6000610cca86828701610c0c565b9350506020610cdb86828701610c0c565b9250506040610cec86828701610c21565b9150509250925092565b60008060408385031215610d0d57610d0c6111b1565b5b6000610d1b85828601610c0c565b9250506020610d2c85828601610c21565b9150509250929050565b610d3f816110ab565b82525050565b6000610d5082611027565b610d5a8185611032565b9350610d6a8185602086016110ee565b610d73816111b6565b840191505092915050565b6000610d8b602383611032565b9150610d96826111c7565b604082019050919050565b6000610dae602283611032565b9150610db982611216565b604082019050919050565b6000610dd1601d83611032565b9150610ddc82611265565b602082019050919050565b6000610df4602683611032565b9150610dff8261128e565b604082019050919050565b6000610e17602583611032565b9150610e22826112dd565b604082019050919050565b6000610e3a602483611032565b9150610e458261132c565b604082019050919050565b6000610e5d602583611032565b9150610e688261137b565b604082019050919050565b6000610e80601f83611032565b9150610e8b826113ca565b602082019050919050565b610e9f816110d7565b82525050565b610eae816110e1565b82525050565b6000602082019050610ec96000830184610d36565b92915050565b60006020820190508181036000830152610ee98184610d45565b905092915050565b60006020820190508181036000830152610f0a81610d7e565b9050919050565b60006020820190508181036000830152610f2a81610da1565b9050919050565b60006020820190508181036000830152610f4a81610dc4565b9050919050565b60006020820190508181036000830152610f6a81610de7565b9050919050565b60006020820190508181036000830152610f8a81610e0a565b9050919050565b60006020820190508181036000830152610faa81610e2d565b9050919050565b60006020820190508181036000830152610fca81610e50565b9050919050565b60006020820190508181036000830152610fea81610e73565b9050919050565b60006020820190506110066000830184610e96565b92915050565b60006020820190506110216000830184610ea5565b92915050565b600081519050919050565b600082825260208201905092915050565b600061104e826110d7565b9150611059836110d7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561108e5761108d611153565b5b828201905092915050565b60006110a4826110b7565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561110c5780820151818401526020810190506110f1565b8381111561111b576000848401525b50505050565b6000600282049050600182168061113957607f821691505b6020821081141561114d5761114c611182565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6113fc81611099565b811461140757600080fd5b50565b611413816110d7565b811461141e57600080fd5b5056fea2646970667358221220d4c96329400732e284f624232c8d7228fc90c00ee7b1a48a85080262107815d864736f6c6343000807003360a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b81525034801561004657600080fd5b5060805160601c6134e361008160003960008181610768015281816107f701528181610b2201528181610bb10152610fcd01526134e36000f3fe60806040526004361061011f5760003560e01c80635b112591116100a0578063dda79b7511610064578063dda79b7514610382578063f2fde38b146103ad578063f31e62bf146103d6578063f340fa0114610401578063f45346dc1461041d5761011f565b80635b112591146102c3578063715018a6146102ee5780638c6f037f146103055780638da5cb5b1461032e578063ae7a3a6f146103595761011f565b8063485cc955116100e7578063485cc955146101eb5780634f1ef286146102145780635131ab591461023057806352d1902d1461026d57806357bec62f146102985761011f565b806310188aef146101245780631b8b921d1461014d5780631cff79cd1461017657806329c59b5d146101a65780633659cfe6146101c2575b600080fd5b34801561013057600080fd5b5061014b6004803603810190610146919061244e565b610446565b005b34801561015957600080fd5b50610174600480360381019061016f9190612543565b610512565b005b610190600480360381019061018b9190612543565b61057e565b60405161019d9190612bd6565b60405180910390f35b6101c060048036038101906101bb9190612543565b6105ec565b005b3480156101ce57600080fd5b506101e960048036038101906101e4919061244e565b610766565b005b3480156101f757600080fd5b50610212600480360381019061020d919061247b565b6108ef565b005b61022e600480360381019061022991906125a3565b610b20565b005b34801561023c57600080fd5b50610257600480360381019061025291906124bb565b610c5d565b6040516102649190612bd6565b60405180910390f35b34801561027957600080fd5b50610282610fc9565b60405161028f9190612b97565b60405180910390f35b3480156102a457600080fd5b506102ad611082565b6040516102ba9190612af3565b60405180910390f35b3480156102cf57600080fd5b506102d86110a8565b6040516102e59190612af3565b60405180910390f35b3480156102fa57600080fd5b506103036110ce565b005b34801561031157600080fd5b5061032c60048036038101906103279190612652565b6110e2565b005b34801561033a57600080fd5b50610343611260565b6040516103509190612af3565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b919061244e565b61128a565b005b34801561038e57600080fd5b50610397611356565b6040516103a49190612af3565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf919061244e565b61137c565b005b3480156103e257600080fd5b506103eb611400565b6040516103f89190612af3565b60405180910390f35b61041b6004803603810190610416919061244e565b611426565b005b34801561042957600080fd5b50610444600480360381019061043f91906125ff565b61159a565b005b600073ffffffffffffffffffffffffffffffffffffffff1660cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146104ce576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060cb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610571929190612bb2565b60405180910390a3505050565b6060600061058d858585611712565b90508473ffffffffffffffffffffffffffffffffffffffff167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f3486866040516105d993929190612e51565b60405180910390a2809150509392505050565b6000341415610627576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163460405161066f90612ade565b60006040518083038185875af1925050503d80600081146106ac576040519150601f19603f3d011682016040523d82523d6000602084013e6106b1565b606091505b505090506000151581151514156106f4576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a434600087876040516107589493929190612dd5565b60405180910390a350505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614156107f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ec90612c55565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108346117c9565b73ffffffffffffffffffffffffffffffffffffffff161461088a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088190612c75565b60405180910390fd5b61089381611820565b6108ec81600067ffffffffffffffff8111156108b2576108b1613012565b5b6040519080825280601f01601f1916602001820160405280156108e45781602001600182028036833780820191505090505b50600061182b565b50565b60008060019054906101000a900460ff161590508080156109205750600160008054906101000a900460ff1660ff16105b8061094d575061092f306119a8565b15801561094c5750600160008054906101000a900460ff1660ff16145b5b61098c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098390612cf5565b60405180910390fd5b60016000806101000a81548160ff021916908360ff16021790555080156109c9576001600060016101000a81548160ff0219169083151502179055505b6109d16119cb565b6109d9611a24565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a40576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260ca60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160cc60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015610b1b5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610b129190612bf8565b60405180910390a15b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba690612c55565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610bee6117c9565b73ffffffffffffffffffffffffffffffffffffffff1614610c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3b90612c75565b60405180910390fd5b610c4d82611820565b610c598282600161182b565b5050565b60606000841415610c9a576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ca48686611a75565b610cda576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff1663095ea7b386866040518363ffffffff1660e01b8152600401610d15929190612b6e565b602060405180830381600087803b158015610d2f57600080fd5b505af1158015610d43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6791906126da565b610d9d576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610daa868585611712565b9050610db68787611a75565b610dec576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e279190612af3565b60206040518083038186803b158015610e3f57600080fd5b505afa158015610e53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e779190612734565b90506000811115610f5257600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060cc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161415610f255760cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b610f5081838b73ffffffffffffffffffffffffffffffffffffffff16611b0d9092919063ffffffff16565b505b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382888888604051610fb393929190612e51565b60405180910390a3819250505095945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105090612cb5565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110d6611b93565b6110e06000611c11565b565b600084141561111d576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060cc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156111c05760cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b6111ed3382878773ffffffffffffffffffffffffffffffffffffffff16611cd7909392919063ffffffff16565b8573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4878787876040516112509493929190612dd5565b60405180910390a3505050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff1660c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611312576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060c960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611384611b93565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113eb90612c35565b60405180910390fd5b6113fd81611c11565b50565b60cc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000341415611461576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16346040516114a990612ade565b60006040518083038185875af1925050503d80600081146114e6576040519150601f19603f3d011682016040523d82523d6000602084013e6114eb565b606091505b5050905060001515811515141561152e576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a434600060405161158e929190612e15565b60405180910390a35050565b60008214156115d5576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060cc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116785760cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b6116a53382858573ffffffffffffffffffffffffffffffffffffffff16611cd7909392919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48585604051611704929190612e15565b60405180910390a350505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1634868660405161173f929190612aae565b60006040518083038185875af1925050503d806000811461177c576040519150601f19603f3d011682016040523d82523d6000602084013e611781565b606091505b5091509150816117bd576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80925050509392505050565b60006117f77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611d60565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611828611b93565b50565b6118577f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611d6a565b60000160009054906101000a900460ff161561187b5761187683611d74565b6119a3565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156118c157600080fd5b505afa9250505080156118f257506040513d601f19601f820116820180604052508101906118ef9190612707565b60015b611931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192890612d15565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d90612cd5565b60405180910390fd5b506119a2838383611e2d565b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1190612d95565b60405180910390fd5b611a22611e59565b565b600060019054906101000a900460ff16611a73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6a90612d95565b60405180910390fd5b565b60008273ffffffffffffffffffffffffffffffffffffffff1663095ea7b38360006040518363ffffffff1660e01b8152600401611ab3929190612b45565b602060405180830381600087803b158015611acd57600080fd5b505af1158015611ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0591906126da565b905092915050565b611b8e8363a9059cbb60e01b8484604051602401611b2c929190612b6e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611eba565b505050565b611b9b611f81565b73ffffffffffffffffffffffffffffffffffffffff16611bb9611260565b73ffffffffffffffffffffffffffffffffffffffff1614611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0690612d55565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611d5a846323b872dd60e01b858585604051602401611cf893929190612b0e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611eba565b50505050565b6000819050919050565b6000819050919050565b611d7d816119a8565b611dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db390612d35565b60405180910390fd5b80611de97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611d60565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611e3683611f89565b600082511180611e435750805b15611e5457611e528383611fd8565b505b505050565b600060019054906101000a900460ff16611ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9f90612d95565b60405180910390fd5b611eb8611eb3611f81565b611c11565b565b6000611f1c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166120059092919063ffffffff16565b9050600081511115611f7c5780806020019051810190611f3c91906126da565b611f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7290612db5565b60405180910390fd5b5b505050565b600033905090565b611f9281611d74565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611ffd83836040518060600160405280602781526020016134876027913961201d565b905092915050565b606061201484846000856120a3565b90509392505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516120479190612ac7565b600060405180830381855af49150503d8060008114612082576040519150601f19603f3d011682016040523d82523d6000602084013e612087565b606091505b509150915061209886838387612170565b925050509392505050565b6060824710156120e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120df90612c95565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516121119190612ac7565b60006040518083038185875af1925050503d806000811461214e576040519150601f19603f3d011682016040523d82523d6000602084013e612153565b606091505b5091509150612164878383876121e6565b92505050949350505050565b606083156121d3576000835114156121cb5761218b856119a8565b6121ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c190612d75565b60405180910390fd5b5b8290506121de565b6121dd838361225c565b5b949350505050565b606083156122495760008351141561224157612201856122ac565b612240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223790612d75565b60405180910390fd5b5b829050612254565b61225383836122cf565b5b949350505050565b60008251111561226f5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a39190612c13565b60405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156122e25781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123169190612c13565b60405180910390fd5b600061233261232d84612ea8565b612e83565b90508281526020810184848401111561234e5761234d613050565b5b612359848285612f9f565b509392505050565b6000813590506123708161342a565b92915050565b60008151905061238581613441565b92915050565b60008151905061239a81613458565b92915050565b60008083601f8401126123b6576123b5613046565b5b8235905067ffffffffffffffff8111156123d3576123d2613041565b5b6020830191508360018202830111156123ef576123ee61304b565b5b9250929050565b600082601f83011261240b5761240a613046565b5b813561241b84826020860161231f565b91505092915050565b6000813590506124338161346f565b92915050565b6000815190506124488161346f565b92915050565b6000602082840312156124645761246361305a565b5b600061247284828501612361565b91505092915050565b600080604083850312156124925761249161305a565b5b60006124a085828601612361565b92505060206124b185828601612361565b9150509250929050565b6000806000806000608086880312156124d7576124d661305a565b5b60006124e588828901612361565b95505060206124f688828901612361565b945050604061250788828901612424565b935050606086013567ffffffffffffffff81111561252857612527613055565b5b612534888289016123a0565b92509250509295509295909350565b60008060006040848603121561255c5761255b61305a565b5b600061256a86828701612361565b935050602084013567ffffffffffffffff81111561258b5761258a613055565b5b612597868287016123a0565b92509250509250925092565b600080604083850312156125ba576125b961305a565b5b60006125c885828601612361565b925050602083013567ffffffffffffffff8111156125e9576125e8613055565b5b6125f5858286016123f6565b9150509250929050565b6000806000606084860312156126185761261761305a565b5b600061262686828701612361565b935050602061263786828701612424565b925050604061264886828701612361565b9150509250925092565b60008060008060006080868803121561266e5761266d61305a565b5b600061267c88828901612361565b955050602061268d88828901612424565b945050604061269e88828901612361565b935050606086013567ffffffffffffffff8111156126bf576126be613055565b5b6126cb888289016123a0565b92509250509295509295909350565b6000602082840312156126f0576126ef61305a565b5b60006126fe84828501612376565b91505092915050565b60006020828403121561271d5761271c61305a565b5b600061272b8482850161238b565b91505092915050565b60006020828403121561274a5761274961305a565b5b600061275884828501612439565b91505092915050565b61276a81612f1c565b82525050565b61277981612f3a565b82525050565b600061278b8385612eef565b9350612798838584612f9f565b6127a18361305f565b840190509392505050565b60006127b88385612f00565b93506127c5838584612f9f565b82840190509392505050565b60006127dc82612ed9565b6127e68185612eef565b93506127f6818560208601612fae565b6127ff8161305f565b840191505092915050565b600061281582612ed9565b61281f8185612f00565b935061282f818560208601612fae565b80840191505092915050565b61284481612f7b565b82525050565b61285381612f8d565b82525050565b600061286482612ee4565b61286e8185612f0b565b935061287e818560208601612fae565b6128878161305f565b840191505092915050565b600061289f602683612f0b565b91506128aa82613070565b604082019050919050565b60006128c2602c83612f0b565b91506128cd826130bf565b604082019050919050565b60006128e5602c83612f0b565b91506128f08261310e565b604082019050919050565b6000612908602683612f0b565b91506129138261315d565b604082019050919050565b600061292b603883612f0b565b9150612936826131ac565b604082019050919050565b600061294e602983612f0b565b9150612959826131fb565b604082019050919050565b6000612971602e83612f0b565b915061297c8261324a565b604082019050919050565b6000612994602e83612f0b565b915061299f82613299565b604082019050919050565b60006129b7602d83612f0b565b91506129c2826132e8565b604082019050919050565b60006129da602083612f0b565b91506129e582613337565b602082019050919050565b60006129fd600083612eef565b9150612a0882613360565b600082019050919050565b6000612a20600083612f00565b9150612a2b82613360565b600082019050919050565b6000612a43601d83612f0b565b9150612a4e82613363565b602082019050919050565b6000612a66602b83612f0b565b9150612a718261338c565b604082019050919050565b6000612a89602a83612f0b565b9150612a94826133db565b604082019050919050565b612aa881612f64565b82525050565b6000612abb8284866127ac565b91508190509392505050565b6000612ad3828461280a565b915081905092915050565b6000612ae982612a13565b9150819050919050565b6000602082019050612b086000830184612761565b92915050565b6000606082019050612b236000830186612761565b612b306020830185612761565b612b3d6040830184612a9f565b949350505050565b6000604082019050612b5a6000830185612761565b612b67602083018461283b565b9392505050565b6000604082019050612b836000830185612761565b612b906020830184612a9f565b9392505050565b6000602082019050612bac6000830184612770565b92915050565b60006020820190508181036000830152612bcd81848661277f565b90509392505050565b60006020820190508181036000830152612bf081846127d1565b905092915050565b6000602082019050612c0d600083018461284a565b92915050565b60006020820190508181036000830152612c2d8184612859565b905092915050565b60006020820190508181036000830152612c4e81612892565b9050919050565b60006020820190508181036000830152612c6e816128b5565b9050919050565b60006020820190508181036000830152612c8e816128d8565b9050919050565b60006020820190508181036000830152612cae816128fb565b9050919050565b60006020820190508181036000830152612cce8161291e565b9050919050565b60006020820190508181036000830152612cee81612941565b9050919050565b60006020820190508181036000830152612d0e81612964565b9050919050565b60006020820190508181036000830152612d2e81612987565b9050919050565b60006020820190508181036000830152612d4e816129aa565b9050919050565b60006020820190508181036000830152612d6e816129cd565b9050919050565b60006020820190508181036000830152612d8e81612a36565b9050919050565b60006020820190508181036000830152612dae81612a59565b9050919050565b60006020820190508181036000830152612dce81612a7c565b9050919050565b6000606082019050612dea6000830187612a9f565b612df76020830186612761565b8181036040830152612e0a81848661277f565b905095945050505050565b6000606082019050612e2a6000830185612a9f565b612e376020830184612761565b8181036040830152612e48816129f0565b90509392505050565b6000604082019050612e666000830186612a9f565b8181036020830152612e7981848661277f565b9050949350505050565b6000612e8d612e9e565b9050612e998282612fe1565b919050565b6000604051905090565b600067ffffffffffffffff821115612ec357612ec2613012565b5b612ecc8261305f565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000612f2782612f44565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612f8682612f64565b9050919050565b6000612f9882612f6e565b9050919050565b82818337600083830152505050565b60005b83811015612fcc578082015181840152602081019050612fb1565b83811115612fdb576000848401525b50505050565b612fea8261305f565b810181811067ffffffffffffffff8211171561300957613008613012565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b61343381612f1c565b811461343e57600080fd5b50565b61344a81612f2e565b811461345557600080fd5b50565b61346181612f3a565b811461346c57600080fd5b50565b61347881612f64565b811461348357600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220a92291d9031c32880ffc1e5010a2c6663dffc6271b359692f77d40a3df8488cc64736f6c6343000807003360806040523480156200001157600080fd5b506040516200109038038062001090833981810160405281019062000037919062000106565b6001600081905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620000a7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506200018b565b600081519050620001008162000171565b92915050565b6000602082840312156200011f576200011e6200016c565b5b60006200012f84828501620000ef565b91505092915050565b600062000145826200014c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6200017c8162000138565b81146200018857600080fd5b50565b610ef5806200019b6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063116191b61461004657806321fc65f214610064578063d9caed1214610080575b600080fd5b61004e61009c565b60405161005b9190610a98565b60405180910390f35b61007e600480360381019061007991906107bc565b6100c2565b005b61009a60048036038101906100959190610769565b61024a565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ca6102ef565b610117600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16848773ffffffffffffffffffffffffffffffffffffffff1661033f9092919063ffffffff16565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635131ab5986868686866040518663ffffffff1660e01b815260040161017a959493929190610a21565b600060405180830381600087803b15801561019457600080fd5b505af11580156101a8573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906101d19190610871565b508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e85858560405161023393929190610b70565b60405180910390a36102436103c5565b5050505050565b6102526102ef565b61027d82828573ffffffffffffffffffffffffffffffffffffffff1661033f9092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb836040516102da9190610b55565b60405180910390a36102ea6103c5565b505050565b60026000541415610335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032c90610b35565b60405180910390fd5b6002600081905550565b6103c08363a9059cbb60e01b848460405160240161035e929190610a6f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506103cf565b505050565b6001600081905550565b6000610431826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166104969092919063ffffffff16565b905060008151111561049157808060200190518101906104519190610844565b610490576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048790610b15565b60405180910390fd5b5b505050565b60606104a584846000856104ae565b90509392505050565b6060824710156104f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ea90610ad5565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161051c9190610a0a565b60006040518083038185875af1925050503d8060008114610559576040519150601f19603f3d011682016040523d82523d6000602084013e61055e565b606091505b509150915061056f8783838761057b565b92505050949350505050565b606083156105de576000835114156105d657610596856105f1565b6105d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105cc90610af5565b60405180910390fd5b5b8290506105e9565b6105e88383610614565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156106275781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065b9190610ab3565b60405180910390fd5b600061067761067284610bc7565b610ba2565b90508281526020810184848401111561069357610692610d6a565b5b61069e848285610cc8565b509392505050565b6000813590506106b581610e7a565b92915050565b6000815190506106ca81610e91565b92915050565b60008083601f8401126106e6576106e5610d60565b5b8235905067ffffffffffffffff81111561070357610702610d5b565b5b60208301915083600182028301111561071f5761071e610d65565b5b9250929050565b600082601f83011261073b5761073a610d60565b5b815161074b848260208601610664565b91505092915050565b60008135905061076381610ea8565b92915050565b60008060006060848603121561078257610781610d74565b5b6000610790868287016106a6565b93505060206107a1868287016106a6565b92505060406107b286828701610754565b9150509250925092565b6000806000806000608086880312156107d8576107d7610d74565b5b60006107e6888289016106a6565b95505060206107f7888289016106a6565b945050604061080888828901610754565b935050606086013567ffffffffffffffff81111561082957610828610d6f565b5b610835888289016106d0565b92509250509295509295909350565b60006020828403121561085a57610859610d74565b5b6000610868848285016106bb565b91505092915050565b60006020828403121561088757610886610d74565b5b600082015167ffffffffffffffff8111156108a5576108a4610d6f565b5b6108b184828501610726565b91505092915050565b6108c381610c3b565b82525050565b60006108d58385610c0e565b93506108e2838584610cb9565b6108eb83610d79565b840190509392505050565b600061090182610bf8565b61090b8185610c1f565b935061091b818560208601610cc8565b80840191505092915050565b61093081610c83565b82525050565b600061094182610c03565b61094b8185610c2a565b935061095b818560208601610cc8565b61096481610d79565b840191505092915050565b600061097c602683610c2a565b915061098782610d8a565b604082019050919050565b600061099f601d83610c2a565b91506109aa82610dd9565b602082019050919050565b60006109c2602a83610c2a565b91506109cd82610e02565b604082019050919050565b60006109e5601f83610c2a565b91506109f082610e51565b602082019050919050565b610a0481610c79565b82525050565b6000610a1682846108f6565b915081905092915050565b6000608082019050610a3660008301886108ba565b610a4360208301876108ba565b610a5060408301866109fb565b8181036060830152610a638184866108c9565b90509695505050505050565b6000604082019050610a8460008301856108ba565b610a9160208301846109fb565b9392505050565b6000602082019050610aad6000830184610927565b92915050565b60006020820190508181036000830152610acd8184610936565b905092915050565b60006020820190508181036000830152610aee8161096f565b9050919050565b60006020820190508181036000830152610b0e81610992565b9050919050565b60006020820190508181036000830152610b2e816109b5565b9050919050565b60006020820190508181036000830152610b4e816109d8565b9050919050565b6000602082019050610b6a60008301846109fb565b92915050565b6000604082019050610b8560008301866109fb565b8181036020830152610b988184866108c9565b9050949350505050565b6000610bac610bbd565b9050610bb88282610cfb565b919050565b6000604051905090565b600067ffffffffffffffff821115610be257610be1610d2c565b5b610beb82610d79565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000610c4682610c59565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610c8e82610c95565b9050919050565b6000610ca082610ca7565b9050919050565b6000610cb282610c59565b9050919050565b82818337600083830152505050565b60005b83811015610ce6578082015181840152602081019050610ccb565b83811115610cf5576000848401525b50505050565b610d0482610d79565b810181811067ffffffffffffffff82111715610d2357610d22610d2c565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b610e8381610c3b565b8114610e8e57600080fd5b50565b610e9a81610c4d565b8114610ea557600080fd5b50565b610eb181610c79565b8114610ebc57600080fd5b5056fea2646970667358221220c6f7c0f9935341aaaabcabf7504d01bbd38a0606132004742a97e6a200eb432564736f6c6343000807003360806040523480156200001157600080fd5b50604051620011b9380380620011b9833981810160405281019062000037919062000180565b6001600081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480620000a75750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15620000df576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506200021a565b6000815190506200017a8162000200565b92915050565b600080604083850312156200019a5762000199620001fb565b5b6000620001aa8582860162000169565b9250506020620001bd8582860162000169565b9150509250929050565b6000620001d482620001db565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6200020b81620001c7565b81146200021757600080fd5b50565b610f8f806200022a6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806302a04c0d14610051578063116191b61461006d578063e8f9cb3a1461008b578063f3fef3a3146100a9575b600080fd5b61006b6004803603810190610066919061082e565b6100c5565b005b610075610279565b6040516100829190610b20565b60405180910390f35b61009361029f565b6040516100a09190610b05565b60405180910390f35b6100c360048036038101906100be91906107ee565b6102c5565b005b6100cd610374565b61013c600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166103c49092919063ffffffff16565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635131ab59600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868686866040518663ffffffff1660e01b81526004016101c1959493929190610a8e565b600060405180830381600087803b1580156101db57600080fd5b505af11580156101ef573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061021891906108cf565b508373ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced84848460405161026393929190610bf8565b60405180910390a261027361044a565b50505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6102cd610374565b61031a8282600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166103c49092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364826040516103609190610bdd565b60405180910390a261037061044a565b5050565b600260005414156103ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103b190610bbd565b60405180910390fd5b6002600081905550565b6104458363a9059cbb60e01b84846040516024016103e3929190610adc565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610454565b505050565b6001600081905550565b60006104b6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661051b9092919063ffffffff16565b905060008151111561051657808060200190518101906104d691906108a2565b610515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050c90610b9d565b60405180910390fd5b5b505050565b606061052a8484600085610533565b90509392505050565b606082471015610578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056f90610b5d565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516105a19190610a77565b60006040518083038185875af1925050503d80600081146105de576040519150601f19603f3d011682016040523d82523d6000602084013e6105e3565b606091505b50915091506105f487838387610600565b92505050949350505050565b606083156106635760008351141561065b5761061b85610676565b61065a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065190610b7d565b60405180910390fd5b5b82905061066e565b61066d8383610699565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156106ac5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e09190610b3b565b60405180910390fd5b60006106fc6106f784610c4f565b610c2a565b90508281526020810184848401111561071857610717610e04565b5b610723848285610d62565b509392505050565b60008135905061073a81610f14565b92915050565b60008151905061074f81610f2b565b92915050565b60008083601f84011261076b5761076a610dfa565b5b8235905067ffffffffffffffff81111561078857610787610df5565b5b6020830191508360018202830111156107a4576107a3610dff565b5b9250929050565b600082601f8301126107c0576107bf610dfa565b5b81516107d08482602086016106e9565b91505092915050565b6000813590506107e881610f42565b92915050565b6000806040838503121561080557610804610e0e565b5b60006108138582860161072b565b9250506020610824858286016107d9565b9150509250929050565b6000806000806060858703121561084857610847610e0e565b5b60006108568782880161072b565b9450506020610867878288016107d9565b935050604085013567ffffffffffffffff81111561088857610887610e09565b5b61089487828801610755565b925092505092959194509250565b6000602082840312156108b8576108b7610e0e565b5b60006108c684828501610740565b91505092915050565b6000602082840312156108e5576108e4610e0e565b5b600082015167ffffffffffffffff81111561090357610902610e09565b5b61090f848285016107ab565b91505092915050565b61092181610cc3565b82525050565b60006109338385610c96565b9350610940838584610d53565b61094983610e13565b840190509392505050565b600061095f82610c80565b6109698185610ca7565b9350610979818560208601610d62565b80840191505092915050565b61098e81610d0b565b82525050565b61099d81610d1d565b82525050565b60006109ae82610c8b565b6109b88185610cb2565b93506109c8818560208601610d62565b6109d181610e13565b840191505092915050565b60006109e9602683610cb2565b91506109f482610e24565b604082019050919050565b6000610a0c601d83610cb2565b9150610a1782610e73565b602082019050919050565b6000610a2f602a83610cb2565b9150610a3a82610e9c565b604082019050919050565b6000610a52601f83610cb2565b9150610a5d82610eeb565b602082019050919050565b610a7181610d01565b82525050565b6000610a838284610954565b915081905092915050565b6000608082019050610aa36000830188610918565b610ab06020830187610918565b610abd6040830186610a68565b8181036060830152610ad0818486610927565b90509695505050505050565b6000604082019050610af16000830185610918565b610afe6020830184610a68565b9392505050565b6000602082019050610b1a6000830184610985565b92915050565b6000602082019050610b356000830184610994565b92915050565b60006020820190508181036000830152610b5581846109a3565b905092915050565b60006020820190508181036000830152610b76816109dc565b9050919050565b60006020820190508181036000830152610b96816109ff565b9050919050565b60006020820190508181036000830152610bb681610a22565b9050919050565b60006020820190508181036000830152610bd681610a45565b9050919050565b6000602082019050610bf26000830184610a68565b92915050565b6000604082019050610c0d6000830186610a68565b8181036020830152610c20818486610927565b9050949350505050565b6000610c34610c45565b9050610c408282610d95565b919050565b6000604051905090565b600067ffffffffffffffff821115610c6a57610c69610dc6565b5b610c7382610e13565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000610cce82610ce1565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610d1682610d2f565b9050919050565b6000610d2882610d2f565b9050919050565b6000610d3a82610d41565b9050919050565b6000610d4c82610ce1565b9050919050565b82818337600083830152505050565b60005b83811015610d80578082015181840152602081019050610d65565b83811115610d8f576000848401525b50505050565b610d9e82610e13565b810181811067ffffffffffffffff82111715610dbd57610dbc610dc6565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b610f1d81610cc3565b8114610f2857600080fd5b50565b610f3481610cd5565b8114610f3f57600080fd5b50565b610f4b81610d01565b8114610f5657600080fd5b5056fea2646970667358221220bdea1bc357822401542c5c1b57f5c8696f7fa6c99ecfef1bfd392504260c0f1164736f6c63430008070033608060405234801561001057600080fd5b5061108a806100206000396000f3fe60806040526004361061003f5760003560e01c8063357fc5a2146100445780636ed701691461006d578063e04d4f9714610084578063f05b6abf146100a0575b600080fd5b34801561005057600080fd5b5061006b6004803603810190610066919061085a565b6100c9565b005b34801561007957600080fd5b50610082610138565b005b61009e600480360381019061009991906107eb565b610171565b005b3480156100ac57600080fd5b506100c760048036038101906100c29190610733565b6101b5565b005b6100f63382858573ffffffffffffffffffffffffffffffffffffffff166101f7909392919063ffffffff16565b7f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af603384848460405161012b9493929190610bb0565b60405180910390a1505050565b7fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0336040516101679190610b0b565b60405180910390a1565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa33348585856040516101a8959493929190610bf5565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516101ea9493929190610b5d565b60405180910390a1505050565b61027a846323b872dd60e01b85858560405160240161021893929190610b26565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610280565b50505050565b60006102e2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166103479092919063ffffffff16565b9050600081511115610342578080602001905181019061030291906107be565b610341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033890610cb1565b60405180910390fd5b5b505050565b6060610356848460008561035f565b90509392505050565b6060824710156103a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039b90610c71565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516103cd9190610af4565b60006040518083038185875af1925050503d806000811461040a576040519150601f19603f3d011682016040523d82523d6000602084013e61040f565b606091505b50915091506104208783838761042c565b92505050949350505050565b6060831561048f5760008351141561048757610447856104a2565b610486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047d90610c91565b60405180910390fd5b5b82905061049a565b61049983836104c5565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156104d85781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050c9190610c4f565b60405180910390fd5b600061052861052384610cf6565b610cd1565b9050808382526020820190508285602086028201111561054b5761054a610f23565b5b60005b8581101561059957813567ffffffffffffffff81111561057157610570610f1e565b5b80860161057e89826106f0565b8552602085019450602084019350505060018101905061054e565b5050509392505050565b60006105b66105b184610d22565b610cd1565b905080838252602082019050828560208602820111156105d9576105d8610f23565b5b60005b8581101561060957816105ef888261071e565b8452602084019350602083019250506001810190506105dc565b5050509392505050565b600061062661062184610d4e565b610cd1565b90508281526020810184848401111561064257610641610f28565b5b61064d848285610e7c565b509392505050565b6000813590506106648161100f565b92915050565b600082601f83011261067f5761067e610f1e565b5b813561068f848260208601610515565b91505092915050565b600082601f8301126106ad576106ac610f1e565b5b81356106bd8482602086016105a3565b91505092915050565b6000813590506106d581611026565b92915050565b6000815190506106ea81611026565b92915050565b600082601f83011261070557610704610f1e565b5b8135610715848260208601610613565b91505092915050565b60008135905061072d8161103d565b92915050565b60008060006060848603121561074c5761074b610f32565b5b600084013567ffffffffffffffff81111561076a57610769610f2d565b5b6107768682870161066a565b935050602084013567ffffffffffffffff81111561079757610796610f2d565b5b6107a386828701610698565b92505060406107b4868287016106c6565b9150509250925092565b6000602082840312156107d4576107d3610f32565b5b60006107e2848285016106db565b91505092915050565b60008060006060848603121561080457610803610f32565b5b600084013567ffffffffffffffff81111561082257610821610f2d565b5b61082e868287016106f0565b935050602061083f8682870161071e565b9250506040610850868287016106c6565b9150509250925092565b60008060006060848603121561087357610872610f32565b5b60006108818682870161071e565b935050602061089286828701610655565b92505060406108a386828701610655565b9150509250925092565b60006108b983836109fb565b905092915050565b60006108cd8383610ad6565b60208301905092915050565b6108e281610e34565b82525050565b60006108f382610d9f565b6108fd8185610de5565b93508360208202850161090f85610d7f565b8060005b8581101561094b578484038952815161092c85826108ad565b945061093783610dcb565b925060208a01995050600181019050610913565b50829750879550505050505092915050565b600061096882610daa565b6109728185610df6565b935061097d83610d8f565b8060005b838110156109ae57815161099588826108c1565b97506109a083610dd8565b925050600181019050610981565b5085935050505092915050565b6109c481610e46565b82525050565b60006109d582610db5565b6109df8185610e07565b93506109ef818560208601610e8b565b80840191505092915050565b6000610a0682610dc0565b610a108185610e12565b9350610a20818560208601610e8b565b610a2981610f37565b840191505092915050565b6000610a3f82610dc0565b610a498185610e23565b9350610a59818560208601610e8b565b610a6281610f37565b840191505092915050565b6000610a7a602683610e23565b9150610a8582610f48565b604082019050919050565b6000610a9d601d83610e23565b9150610aa882610f97565b602082019050919050565b6000610ac0602a83610e23565b9150610acb82610fc0565b604082019050919050565b610adf81610e72565b82525050565b610aee81610e72565b82525050565b6000610b0082846109ca565b915081905092915050565b6000602082019050610b2060008301846108d9565b92915050565b6000606082019050610b3b60008301866108d9565b610b4860208301856108d9565b610b556040830184610ae5565b949350505050565b6000608082019050610b7260008301876108d9565b8181036020830152610b8481866108e8565b90508181036040830152610b98818561095d565b9050610ba760608301846109bb565b95945050505050565b6000608082019050610bc560008301876108d9565b610bd26020830186610ae5565b610bdf60408301856108d9565b610bec60608301846108d9565b95945050505050565b600060a082019050610c0a60008301886108d9565b610c176020830187610ae5565b8181036040830152610c298186610a34565b9050610c386060830185610ae5565b610c4560808301846109bb565b9695505050505050565b60006020820190508181036000830152610c698184610a34565b905092915050565b60006020820190508181036000830152610c8a81610a6d565b9050919050565b60006020820190508181036000830152610caa81610a90565b9050919050565b60006020820190508181036000830152610cca81610ab3565b9050919050565b6000610cdb610cec565b9050610ce78282610ebe565b919050565b6000604051905090565b600067ffffffffffffffff821115610d1157610d10610eef565b5b602082029050602081019050919050565b600067ffffffffffffffff821115610d3d57610d3c610eef565b5b602082029050602081019050919050565b600067ffffffffffffffff821115610d6957610d68610eef565b5b610d7282610f37565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000610e3f82610e52565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015610ea9578082015181840152602081019050610e8e565b83811115610eb8576000848401525b50505050565b610ec782610f37565b810181811067ffffffffffffffff82111715610ee657610ee5610eef565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b61101881610e34565b811461102357600080fd5b50565b61102f81610e46565b811461103a57600080fd5b50565b61104681610e72565b811461105157600080fd5b5056fea2646970667358221220086a1c9f56ed96506c7198d50cf431a5b03003c16cd4168d2395cdedfc1ac06164736f6c6343000807003360a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152503480156200004757600080fd5b50620000586200005e60201b60201c565b62000208565b600060019054906101000a900460ff1615620000b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a8906200015c565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff1614620001225760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff6040516200011991906200017e565b60405180910390a15b565b6000620001336027836200019b565b91506200014082620001b9565b604082019050919050565b6200015681620001ac565b82525050565b60006020820190508181036000830152620001778162000124565b9050919050565b60006020820190506200019560008301846200014b565b92915050565b600082825260208201905092915050565b600060ff82169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60805160601c612c726200024360003960008181610433015281816104c2015281816105d40152818161066301526107130152612c726000f3fe6080604052600436106100dd5760003560e01c80637993c1e01161007f578063bcf7f32b11610059578063bcf7f32b14610251578063c39aca371461027a578063f2fde38b146102a3578063f45346dc146102cc576100dd565b80637993c1e0146101e65780638129fc1c1461020f5780638da5cb5b14610226576100dd565b80633ce4a5bc116100bb5780633ce4a5bc1461015d5780634f1ef2861461018857806352d1902d146101a4578063715018a6146101cf576100dd565b80630ac7c44c146100e2578063135390f91461010b5780633659cfe614610134575b600080fd5b3480156100ee57600080fd5b5061010960048036038101906101049190611c80565b6102f5565b005b34801561011757600080fd5b50610132600480360381019061012d9190611cfc565b61034c565b005b34801561014057600080fd5b5061015b60048036038101906101569190611b0a565b610431565b005b34801561016957600080fd5b506101726105ba565b60405161017f919061226e565b60405180910390f35b6101a2600480360381019061019d9190611b37565b6105d2565b005b3480156101b057600080fd5b506101b961070f565b6040516101c691906122e9565b60405180910390f35b3480156101db57600080fd5b506101e46107c8565b005b3480156101f257600080fd5b5061020d60048036038101906102089190611d6b565b6107dc565b005b34801561021b57600080fd5b506102246108c7565b005b34801561023257600080fd5b5061023b610a0d565b604051610248919061226e565b60405180910390f35b34801561025d57600080fd5b5061027860048036038101906102739190611e0f565b610a37565b005b34801561028657600080fd5b506102a1600480360381019061029c9190611e0f565b610b2b565b005b3480156102af57600080fd5b506102ca60048036038101906102c59190611b0a565b610d5d565b005b3480156102d857600080fd5b506102f360048036038101906102ee9190611bd3565b610de1565b005b3373ffffffffffffffffffffffffffffffffffffffff167f2b5af078ce280d812dc2241658dc5435c93408020e5418eef55a2b536de51c0f84848460405161033f93929190612304565b60405180910390a2505050565b60006103588383610f9d565b90503373ffffffffffffffffffffffffffffffffffffffff167f1866ad2994816c79f4103e1eddacc7b085eb7c635205243a28940be69b01536d8585848673ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156103db57600080fd5b505afa1580156103ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104139190611ec5565b60405161042394939291906123a0565b60405180910390a250505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614156104c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b79061245c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166104ff61128d565b73ffffffffffffffffffffffffffffffffffffffff1614610555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054c9061247c565b60405180910390fd5b61055e816112e4565b6105b781600067ffffffffffffffff81111561057d5761057c61282b565b5b6040519080825280601f01601f1916602001820160405280156105af5781602001600182028036833780820191505090505b5060006112ef565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab81565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610661576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106589061245c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166106a061128d565b73ffffffffffffffffffffffffffffffffffffffff16146106f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ed9061247c565b60405180910390fd5b6106ff826112e4565b61070b828260016112ef565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461079f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107969061249c565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b6107d061146c565b6107da60006114ea565b565b60006107e88585610f9d565b90503373ffffffffffffffffffffffffffffffffffffffff167f1866ad2994816c79f4103e1eddacc7b085eb7c635205243a28940be69b01536d8787848873ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561086b57600080fd5b505afa15801561087f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a39190611ec5565b88886040516108b79695949392919061233d565b60405180910390a2505050505050565b60008060019054906101000a900460ff161590508080156108f85750600160008054906101000a900460ff1660ff16105b806109255750610907306115b0565b1580156109245750600160008054906101000a900460ff1660ff16145b5b610964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095b906124dc565b60405180910390fd5b60016000806101000a81548160ff021916908360ff16021790555080156109a1576001600060016101000a81548160ff0219169083151502179055505b6109a96115d3565b6109b161162c565b8015610a0a5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610a0191906123ff565b60405180910390a15b50565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ab0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b8152600401610af195949392919061259c565b600060405180830381600087803b158015610b0b57600080fd5b505af1158015610b1f573d6000803e3d6000fd5b50505050505050505050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ba4576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610c1d57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610c54576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166347e7ef2484866040518363ffffffff1660e01b8152600401610c8f9291906122c0565b602060405180830381600087803b158015610ca957600080fd5b505af1158015610cbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce19190611c26565b508273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b8152600401610d2395949392919061259c565b600060405180830381600087803b158015610d3d57600080fd5b505af1158015610d51573d6000803e3d6000fd5b50505050505050505050565b610d6561146c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcc9061243c565b60405180910390fd5b610dde816114ea565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e5a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610ed357503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15610f0a576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166347e7ef2482846040518363ffffffff1660e01b8152600401610f459291906122c0565b602060405180830381600087803b158015610f5f57600080fd5b505af1158015610f73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f979190611c26565b50505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1663d9eeebed6040518163ffffffff1660e01b8152600401604080518083038186803b158015610fe757600080fd5b505afa158015610ffb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101f9190611b93565b915091508173ffffffffffffffffffffffffffffffffffffffff166323b872dd3373735b14bb79463307aacbed86daf3322b1e6226ab846040518463ffffffff1660e01b815260040161107493929190612289565b602060405180830381600087803b15801561108e57600080fd5b505af11580156110a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c69190611c26565b6110fc576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff1660e01b815260040161113993929190612289565b602060405180830381600087803b15801561115357600080fd5b505af1158015611167573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118b9190611c26565b6111c1576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166342966c68866040518263ffffffff1660e01b81526004016111fa91906125f1565b602060405180830381600087803b15801561121457600080fd5b505af1158015611228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124c9190611c26565b611282576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b809250505092915050565b60006112bb7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61167d565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112ec61146c565b50565b61131b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611687565b60000160009054906101000a900460ff161561133f5761133a83611691565b611467565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561138557600080fd5b505afa9250505080156113b657506040513d601f19601f820116820180604052508101906113b39190611c53565b60015b6113f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ec906124fc565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b811461145a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611451906124bc565b60405180910390fd5b5061146683838361174a565b5b505050565b611474611776565b73ffffffffffffffffffffffffffffffffffffffff16611492610a0d565b73ffffffffffffffffffffffffffffffffffffffff16146114e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114df9061253c565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611622576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116199061257c565b60405180910390fd5b61162a61177e565b565b600060019054906101000a900460ff1661167b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116729061257c565b60405180910390fd5b565b6000819050919050565b6000819050919050565b61169a816115b0565b6116d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d09061251c565b60405180910390fd5b806117067f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61167d565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611753836117df565b6000825111806117605750805b156117715761176f838361182e565b505b505050565b600033905090565b600060019054906101000a900460ff166117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c49061257c565b60405180910390fd5b6117dd6117d8611776565b6114ea565b565b6117e881611691565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606118538383604051806060016040528060278152602001612c166027913961185b565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516118859190612257565b600060405180830381855af49150503d80600081146118c0576040519150601f19603f3d011682016040523d82523d6000602084013e6118c5565b606091505b50915091506118d6868383876118e1565b925050509392505050565b606083156119445760008351141561193c576118fc856115b0565b61193b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119329061255c565b60405180910390fd5b5b82905061194f565b61194e8383611957565b5b949350505050565b60008251111561196a5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199e919061241a565b60405180910390fd5b60006119ba6119b584612631565b61260c565b9050828152602081018484840111156119d6576119d5612878565b5b6119e18482856127b8565b509392505050565b6000813590506119f881612bb9565b92915050565b600081519050611a0d81612bb9565b92915050565b600081519050611a2281612bd0565b92915050565b600081519050611a3781612be7565b92915050565b60008083601f840112611a5357611a52612864565b5b8235905067ffffffffffffffff811115611a7057611a6f61285f565b5b602083019150836001820283011115611a8c57611a8b612873565b5b9250929050565b600082601f830112611aa857611aa7612864565b5b8135611ab88482602086016119a7565b91505092915050565b600060608284031215611ad757611ad6612869565b5b81905092915050565b600081359050611aef81612bfe565b92915050565b600081519050611b0481612bfe565b92915050565b600060208284031215611b2057611b1f612887565b5b6000611b2e848285016119e9565b91505092915050565b60008060408385031215611b4e57611b4d612887565b5b6000611b5c858286016119e9565b925050602083013567ffffffffffffffff811115611b7d57611b7c61287d565b5b611b8985828601611a93565b9150509250929050565b60008060408385031215611baa57611ba9612887565b5b6000611bb8858286016119fe565b9250506020611bc985828601611af5565b9150509250929050565b600080600060608486031215611bec57611beb612887565b5b6000611bfa868287016119e9565b9350506020611c0b86828701611ae0565b9250506040611c1c868287016119e9565b9150509250925092565b600060208284031215611c3c57611c3b612887565b5b6000611c4a84828501611a13565b91505092915050565b600060208284031215611c6957611c68612887565b5b6000611c7784828501611a28565b91505092915050565b600080600060408486031215611c9957611c98612887565b5b600084013567ffffffffffffffff811115611cb757611cb661287d565b5b611cc386828701611a93565b935050602084013567ffffffffffffffff811115611ce457611ce361287d565b5b611cf086828701611a3d565b92509250509250925092565b600080600060608486031215611d1557611d14612887565b5b600084013567ffffffffffffffff811115611d3357611d3261287d565b5b611d3f86828701611a93565b9350506020611d5086828701611ae0565b9250506040611d61868287016119e9565b9150509250925092565b600080600080600060808688031215611d8757611d86612887565b5b600086013567ffffffffffffffff811115611da557611da461287d565b5b611db188828901611a93565b9550506020611dc288828901611ae0565b9450506040611dd3888289016119e9565b935050606086013567ffffffffffffffff811115611df457611df361287d565b5b611e0088828901611a3d565b92509250509295509295909350565b60008060008060008060a08789031215611e2c57611e2b612887565b5b600087013567ffffffffffffffff811115611e4a57611e4961287d565b5b611e5689828a01611ac1565b9650506020611e6789828a016119e9565b9550506040611e7889828a01611ae0565b9450506060611e8989828a016119e9565b935050608087013567ffffffffffffffff811115611eaa57611ea961287d565b5b611eb689828a01611a3d565b92509250509295509295509295565b600060208284031215611edb57611eda612887565b5b6000611ee984828501611af5565b91505092915050565b611efb81612747565b82525050565b611f0a81612747565b82525050565b611f1981612765565b82525050565b6000611f2b8385612678565b9350611f388385846127b8565b611f418361288c565b840190509392505050565b6000611f588385612689565b9350611f658385846127b8565b611f6e8361288c565b840190509392505050565b6000611f8482612662565b611f8e8185612689565b9350611f9e8185602086016127c7565b611fa78161288c565b840191505092915050565b6000611fbd82612662565b611fc7818561269a565b9350611fd78185602086016127c7565b80840191505092915050565b611fec816127a6565b82525050565b6000611ffd8261266d565b61200781856126a5565b93506120178185602086016127c7565b6120208161288c565b840191505092915050565b60006120386026836126a5565b91506120438261289d565b604082019050919050565b600061205b602c836126a5565b9150612066826128ec565b604082019050919050565b600061207e602c836126a5565b91506120898261293b565b604082019050919050565b60006120a16038836126a5565b91506120ac8261298a565b604082019050919050565b60006120c46029836126a5565b91506120cf826129d9565b604082019050919050565b60006120e7602e836126a5565b91506120f282612a28565b604082019050919050565b600061210a602e836126a5565b915061211582612a77565b604082019050919050565b600061212d602d836126a5565b915061213882612ac6565b604082019050919050565b60006121506020836126a5565b915061215b82612b15565b602082019050919050565b6000612173600083612689565b915061217e82612b3e565b600082019050919050565b6000612196601d836126a5565b91506121a182612b41565b602082019050919050565b60006121b9602b836126a5565b91506121c482612b6a565b604082019050919050565b6000606083016121e260008401846126cd565b85830360008701526121f5838284611f1f565b9250505061220660208401846126b6565b6122136020860182611ef2565b506122216040840184612730565b61222e6040860182612239565b508091505092915050565b6122428161278f565b82525050565b6122518161278f565b82525050565b60006122638284611fb2565b915081905092915050565b60006020820190506122836000830184611f01565b92915050565b600060608201905061229e6000830186611f01565b6122ab6020830185611f01565b6122b86040830184612248565b949350505050565b60006040820190506122d56000830185611f01565b6122e26020830184612248565b9392505050565b60006020820190506122fe6000830184611f10565b92915050565b6000604082019050818103600083015261231e8186611f79565b90508181036020830152612333818486611f4c565b9050949350505050565b600060a08201905081810360008301526123578189611f79565b90506123666020830188612248565b6123736040830187612248565b6123806060830186612248565b8181036080830152612393818486611f4c565b9050979650505050505050565b600060a08201905081810360008301526123ba8187611f79565b90506123c96020830186612248565b6123d66040830185612248565b6123e36060830184612248565b81810360808301526123f481612166565b905095945050505050565b60006020820190506124146000830184611fe3565b92915050565b600060208201905081810360008301526124348184611ff2565b905092915050565b600060208201905081810360008301526124558161202b565b9050919050565b600060208201905081810360008301526124758161204e565b9050919050565b6000602082019050818103600083015261249581612071565b9050919050565b600060208201905081810360008301526124b581612094565b9050919050565b600060208201905081810360008301526124d5816120b7565b9050919050565b600060208201905081810360008301526124f5816120da565b9050919050565b60006020820190508181036000830152612515816120fd565b9050919050565b6000602082019050818103600083015261253581612120565b9050919050565b6000602082019050818103600083015261255581612143565b9050919050565b6000602082019050818103600083015261257581612189565b9050919050565b60006020820190508181036000830152612595816121ac565b9050919050565b600060808201905081810360008301526125b681886121cf565b90506125c56020830187611f01565b6125d26040830186612248565b81810360608301526125e5818486611f4c565b90509695505050505050565b60006020820190506126066000830184612248565b92915050565b6000612616612627565b905061262282826127fa565b919050565b6000604051905090565b600067ffffffffffffffff82111561264c5761264b61282b565b5b6126558261288c565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006126c560208401846119e9565b905092915050565b600080833560016020038436030381126126ea576126e9612882565b5b83810192508235915060208301925067ffffffffffffffff8211156127125761271161285a565b5b6001820236038413156127285761272761286e565b5b509250929050565b600061273f6020840184611ae0565b905092915050565b60006127528261276f565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006127b182612799565b9050919050565b82818337600083830152505050565b60005b838110156127e55780820151818401526020810190506127ca565b838111156127f4576000848401525b50505050565b6128038261288c565b810181811067ffffffffffffffff821117156128225761282161282b565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b612bc281612747565b8114612bcd57600080fd5b50565b612bd981612759565b8114612be457600080fd5b50565b612bf081612765565b8114612bfb57600080fd5b50565b612c078161278f565b8114612c1257600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220627eb039ecb52d09fd70ebde1f5eca61fe0f91321a96929ebe38dc8e38d999ab64736f6c63430008070033608060405234801561001057600080fd5b50604051610bcd380380610bcd8339818101604052810190610032919061008d565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610108565b600081519050610087816100f1565b92915050565b6000602082840312156100a3576100a26100ec565b5b60006100b184828501610078565b91505092915050565b60006100c5826100cc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6100fa816100ba565b811461010557600080fd5b50565b610ab6806101176000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b614610062578063a0a1730b14610080575b600080fd5b610060600480360381019061005b91906105fd565b61009c565b005b61006a6102af565b6040516100779190610761565b60405180910390f35b61009a6004803603810190610095919061055e565b6102d3565b005b60008383836040516024016100b39392919061082f565b6040516020818303038152906040527fe04d4f97000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090508473ffffffffffffffffffffffffffffffffffffffff1663095ea7b360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16886040518363ffffffff1660e01b815260040161018d92919061077c565b602060405180830381600087803b1580156101a757600080fd5b505af11580156101bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101df9190610531565b610215576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637993c1e0888888856040518563ffffffff1660e01b815260040161027494939291906107dc565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008383836040516024016102ea9392919061082f565b6040516020818303038152906040527fe04d4f97000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ac7c44c86836040518363ffffffff1660e01b81526004016103c49291906107a5565b600060405180830381600087803b1580156103de57600080fd5b505af11580156103f2573d6000803e3d6000fd5b505050505050505050565b600061041061040b84610892565b61086d565b90508281526020810184848401111561042c5761042b610a1b565b5b610437848285610974565b509392505050565b600061045261044d846108c3565b61086d565b90508281526020810184848401111561046e5761046d610a1b565b5b610479848285610974565b509392505050565b60008135905061049081610a3b565b92915050565b6000813590506104a581610a52565b92915050565b6000815190506104ba81610a52565b92915050565b600082601f8301126104d5576104d4610a16565b5b81356104e58482602086016103fd565b91505092915050565b600082601f83011261050357610502610a16565b5b813561051384826020860161043f565b91505092915050565b60008135905061052b81610a69565b92915050565b60006020828403121561054757610546610a25565b5b6000610555848285016104ab565b91505092915050565b6000806000806080858703121561057857610577610a25565b5b600085013567ffffffffffffffff81111561059657610595610a20565b5b6105a2878288016104c0565b945050602085013567ffffffffffffffff8111156105c3576105c2610a20565b5b6105cf878288016104ee565b93505060406105e08782880161051c565b92505060606105f187828801610496565b91505092959194509250565b60008060008060008060c0878903121561061a57610619610a25565b5b600087013567ffffffffffffffff81111561063857610637610a20565b5b61064489828a016104c0565b965050602061065589828a0161051c565b955050604061066689828a01610481565b945050606087013567ffffffffffffffff81111561068757610686610a20565b5b61069389828a016104ee565b93505060806106a489828a0161051c565b92505060a06106b589828a01610496565b9150509295509295509295565b6106cb8161092c565b82525050565b6106da8161093e565b82525050565b60006106eb826108f4565b6106f5818561090a565b9350610705818560208601610983565b61070e81610a2a565b840191505092915050565b6000610724826108ff565b61072e818561091b565b935061073e818560208601610983565b61074781610a2a565b840191505092915050565b61075b8161096a565b82525050565b600060208201905061077660008301846106c2565b92915050565b600060408201905061079160008301856106c2565b61079e6020830184610752565b9392505050565b600060408201905081810360008301526107bf81856106e0565b905081810360208301526107d381846106e0565b90509392505050565b600060808201905081810360008301526107f681876106e0565b90506108056020830186610752565b61081260408301856106c2565b818103606083015261082481846106e0565b905095945050505050565b600060608201905081810360008301526108498186610719565b90506108586020830185610752565b61086560408301846106d1565b949350505050565b6000610877610888565b905061088382826109b6565b919050565b6000604051905090565b600067ffffffffffffffff8211156108ad576108ac6109e7565b5b6108b682610a2a565b9050602081019050919050565b600067ffffffffffffffff8211156108de576108dd6109e7565b5b6108e782610a2a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006109378261094a565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156109a1578082015181840152602081019050610986565b838111156109b0576000848401525b50505050565b6109bf82610a2a565b810181811067ffffffffffffffff821117156109de576109dd6109e7565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b610a448161092c565b8114610a4f57600080fd5b50565b610a5b8161093e565b8114610a6657600080fd5b50565b610a728161096a565b8114610a7d57600080fd5b5056fea2646970667358221220192b4e23b9b6daaae9f30fb00f65433e56a5d8a6906223e4fbd169def800a8a264736f6c6343000807003360806040523480156200001157600080fd5b50604051620010d7380380620010d7833981810160405281019062000037919062000146565b82600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac560405160405180910390a1505050620001f5565b6000815190506200014081620001db565b92915050565b600080600060608486031215620001625762000161620001d6565b5b600062000172868287016200012f565b935050602062000185868287016200012f565b925050604062000198868287016200012f565b9150509250925092565b6000620001af82620001b6565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b620001e681620001a2565b8114620001f257600080fd5b50565b610ed280620002056000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806397770dff1161007157806397770dff14610166578063a7cb050714610182578063c63585cc1461019e578063d7fd7afb146101ce578063d936a012146101fe578063ee2815ba1461021c576100a9565b80630be15547146100ae5780633c669d55146100de578063513a9c05146100fa578063569541b91461012a578063842da36d14610148575b600080fd5b6100c860048036038101906100c3919061094d565b610238565b6040516100d59190610bce565b60405180910390f35b6100f860048036038101906100f39190610898565b61026b565b005b610114600480360381019061010f919061094d565b6103b8565b6040516101219190610bce565b60405180910390f35b6101326103eb565b60405161013f9190610bce565b60405180910390f35b610150610411565b60405161015d9190610bce565b60405180910390f35b610180600480360381019061017b9190610818565b610437565b005b61019c600480360381019061019791906109ba565b6104d4565b005b6101b860048036038101906101b39190610845565b610528565b6040516101c59190610bce565b60405180910390f35b6101e860048036038101906101e3919061094d565b61059a565b6040516101f59190610c67565b60405180910390f35b6102066105b2565b6040516102139190610bce565b60405180910390f35b6102366004803603810190610231919061097a565b6105d8565b005b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060405180606001604052806040518060200160405280600081525081526020013373ffffffffffffffffffffffffffffffffffffffff1681526020014681525090508473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb87866040518363ffffffff1660e01b81526004016102ea929190610be9565b602060405180830381600087803b15801561030457600080fd5b505af1158015610318573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033c9190610920565b508573ffffffffffffffffffffffffffffffffffffffff1663de43156e82878787876040518663ffffffff1660e01b815260040161037e959493929190610c12565b600060405180830381600087803b15801561039857600080fd5b505af11580156103ac573d6000803e3d6000fd5b50505050505050505050565b60026020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516104c99190610bce565b60405180910390a150565b80600080848152602001908152602001600020819055507f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d828260405161051c929190610cab565b60405180910390a15050565b60008060006105378585610667565b9150915085828260405160200161054f929190610b60565b60405160208183030381529060405280519060200120604051602001610576929190610b8c565b6040516020818303038152906040528051906020012060001c925050509392505050565b60006020528060005260406000206000915090505481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b806001600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d828260405161065b929190610c82565b60405180910390a15050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156106d0576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161061070a57828461070d565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561077c576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60008135905061079281610e57565b92915050565b6000815190506107a781610e6e565b92915050565b60008083601f8401126107c3576107c2610dd3565b5b8235905067ffffffffffffffff8111156107e0576107df610dce565b5b6020830191508360018202830111156107fc576107fb610dd8565b5b9250929050565b60008135905061081281610e85565b92915050565b60006020828403121561082e5761082d610de2565b5b600061083c84828501610783565b91505092915050565b60008060006060848603121561085e5761085d610de2565b5b600061086c86828701610783565b935050602061087d86828701610783565b925050604061088e86828701610783565b9150509250925092565b6000806000806000608086880312156108b4576108b3610de2565b5b60006108c288828901610783565b95505060206108d388828901610783565b94505060406108e488828901610803565b935050606086013567ffffffffffffffff81111561090557610904610ddd565b5b610911888289016107ad565b92509250509295509295909350565b60006020828403121561093657610935610de2565b5b600061094484828501610798565b91505092915050565b60006020828403121561096357610962610de2565b5b600061097184828501610803565b91505092915050565b6000806040838503121561099157610990610de2565b5b600061099f85828601610803565b92505060206109b085828601610783565b9150509250929050565b600080604083850312156109d1576109d0610de2565b5b60006109df85828601610803565b92505060206109f085828601610803565b9150509250929050565b610a0381610d0c565b82525050565b610a1281610d0c565b82525050565b610a29610a2482610d0c565b610da0565b82525050565b610a40610a3b82610d2a565b610db2565b82525050565b6000610a528385610cf0565b9350610a5f838584610d5e565b610a6883610de7565b840190509392505050565b6000610a7e82610cd4565b610a888185610cdf565b9350610a98818560208601610d6d565b610aa181610de7565b840191505092915050565b6000610ab9602083610d01565b9150610ac482610e05565b602082019050919050565b6000610adc600183610d01565b9150610ae782610e2e565b600182019050919050565b60006060830160008301518482036000860152610b0f8282610a73565b9150506020830151610b2460208601826109fa565b506040830151610b376040860182610b42565b508091505092915050565b610b4b81610d54565b82525050565b610b5a81610d54565b82525050565b6000610b6c8285610a18565b601482019150610b7c8284610a18565b6014820191508190509392505050565b6000610b9782610acf565b9150610ba38285610a18565b601482019150610bb38284610a2f565b602082019150610bc282610aac565b91508190509392505050565b6000602082019050610be36000830184610a09565b92915050565b6000604082019050610bfe6000830185610a09565b610c0b6020830184610b51565b9392505050565b60006080820190508181036000830152610c2c8188610af2565b9050610c3b6020830187610a09565b610c486040830186610b51565b8181036060830152610c5b818486610a46565b90509695505050505050565b6000602082019050610c7c6000830184610b51565b92915050565b6000604082019050610c976000830185610b51565b610ca46020830184610a09565b9392505050565b6000604082019050610cc06000830185610b51565b610ccd6020830184610b51565b9392505050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000610d1782610d34565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015610d8b578082015181840152602081019050610d70565b83811115610d9a576000848401525b50505050565b6000610dab82610dbc565b9050919050565b6000819050919050565b6000610dc782610df8565b9050919050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f600082015250565b7fff00000000000000000000000000000000000000000000000000000000000000600082015250565b610e6081610d0c565b8114610e6b57600080fd5b50565b610e7781610d1e565b8114610e8257600080fd5b50565b610e8e81610d54565b8114610e9957600080fd5b5056fea2646970667358221220fc7ae99de1eb543fc941c22b053bacc8edc14f929260909668ffd15cbad6fbfb64736f6c6343000807003360c06040523480156200001157600080fd5b506040516200282d3803806200282d83398181016040528101906200003791906200035b565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620000b1576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760079080519060200190620000c9929190620001d1565b508660089080519060200190620000e2929190620001d1565b5085600960006101000a81548160ff021916908360ff16021790555084608081815250508360028111156200011c576200011b620005ae565b5b60a0816002811115620001345762000133620005ae565b5b60f81b8152505082600281905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505050620006bf565b828054620001df9062000542565b90600052602060002090601f0160209004810192826200020357600085556200024f565b82601f106200021e57805160ff19168380011785556200024f565b828001600101855582156200024f579182015b828111156200024e57825182559160200191906001019062000231565b5b5090506200025e919062000262565b5090565b5b808211156200027d57600081600090555060010162000263565b5090565b60006200029862000292846200048b565b62000462565b905082815260208101848484011115620002b757620002b662000640565b5b620002c48482856200050c565b509392505050565b600081519050620002dd8162000660565b92915050565b600081519050620002f4816200067a565b92915050565b600082601f8301126200031257620003116200063b565b5b81516200032484826020860162000281565b91505092915050565b6000815190506200033e816200068b565b92915050565b6000815190506200035581620006a5565b92915050565b600080600080600080600080610100898b0312156200037f576200037e6200064a565b5b600089015167ffffffffffffffff811115620003a0576200039f62000645565b5b620003ae8b828c01620002fa565b985050602089015167ffffffffffffffff811115620003d257620003d162000645565b5b620003e08b828c01620002fa565b9750506040620003f38b828c0162000344565b9650506060620004068b828c016200032d565b9550506080620004198b828c01620002e3565b94505060a06200042c8b828c016200032d565b93505060c06200043f8b828c01620002cc565b92505060e0620004528b828c01620002cc565b9150509295985092959890939650565b60006200046e62000481565b90506200047c828262000578565b919050565b6000604051905090565b600067ffffffffffffffff821115620004a957620004a86200060c565b5b620004b4826200064f565b9050602081019050919050565b6000620004ce82620004d5565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156200052c5780820151818401526020810190506200050f565b838111156200053c576000848401525b50505050565b600060028204905060018216806200055b57607f821691505b60208210811415620005725762000571620005dd565b5b50919050565b62000583826200064f565b810181811067ffffffffffffffff82111715620005a557620005a46200060c565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200066b81620004c1565b81146200067757600080fd5b50565b600381106200068857600080fd5b50565b6200069681620004f5565b8114620006a257600080fd5b50565b620006b081620004ff565b8114620006bc57600080fd5b50565b60805160a05160f81c612137620006f660003960006109580152600081816108a201528181610c250152610d5a01526121376000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806385e1f4d0116100c3578063d9eeebed1161007c578063d9eeebed146103cc578063dd62ed3e146103eb578063e2f535b81461041b578063eddeb12314610439578063f2441b3214610455578063f687d12a146104735761014d565b806385e1f4d0146102f657806395d89b4114610314578063a3413d0314610332578063a9059cbb14610350578063c701262614610380578063c835d7cc146103b05761014d565b8063313ce56711610115578063313ce5671461020c5780633ce4a5bc1461022a57806342966c681461024857806347e7ef24146102785780634d8943bb146102a857806370a08231146102c65761014d565b806306fdde0314610152578063091d278814610170578063095ea7b31461018e57806318160ddd146101be57806323b872dd146101dc575b600080fd5b61015a61048f565b6040516101679190611cad565b60405180910390f35b610178610521565b6040516101859190611ccf565b60405180910390f35b6101a860048036038101906101a3919061196e565b610527565b6040516101b59190611bfb565b60405180910390f35b6101c6610545565b6040516101d39190611ccf565b60405180910390f35b6101f660048036038101906101f1919061191b565b61054f565b6040516102039190611bfb565b60405180910390f35b610214610647565b6040516102219190611cea565b60405180910390f35b61023261065e565b60405161023f9190611b80565b60405180910390f35b610262600480360381019061025d9190611a37565b610676565b60405161026f9190611bfb565b60405180910390f35b610292600480360381019061028d919061196e565b61068b565b60405161029f9190611bfb565b60405180910390f35b6102b0610851565b6040516102bd9190611ccf565b60405180910390f35b6102e060048036038101906102db9190611881565b610857565b6040516102ed9190611ccf565b60405180910390f35b6102fe6108a0565b60405161030b9190611ccf565b60405180910390f35b61031c6108c4565b6040516103299190611cad565b60405180910390f35b61033a610956565b6040516103479190611c92565b60405180910390f35b61036a6004803603810190610365919061196e565b61097a565b6040516103779190611bfb565b60405180910390f35b61039a600480360381019061039591906119db565b610998565b6040516103a79190611bfb565b60405180910390f35b6103ca60048036038101906103c59190611881565b610aee565b005b6103d4610be1565b6040516103e2929190611bd2565b60405180910390f35b610405600480360381019061040091906118db565b610e4e565b6040516104129190611ccf565b60405180910390f35b610423610ed5565b6040516104309190611b80565b60405180910390f35b610453600480360381019061044e9190611a37565b610efb565b005b61045d610fb5565b60405161046a9190611b80565b60405180910390f35b61048d60048036038101906104889190611a37565b610fd9565b005b60606007805461049e90611f33565b80601f01602080910402602001604051908101604052809291908181526020018280546104ca90611f33565b80156105175780601f106104ec57610100808354040283529160200191610517565b820191906000526020600020905b8154815290600101906020018083116104fa57829003601f168201915b5050505050905090565b60025481565b600061053b610534611093565b848461109b565b6001905092915050565b6000600654905090565b600061055c848484611254565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006105a7611093565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561061e576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61063b8561062a611093565b85846106369190611e43565b61109b565b60019150509392505050565b6000600960009054906101000a900460ff16905090565b73735b14bb79463307aacbed86daf3322b1e6226ab81565b600061068233836114b0565b60019050919050565b600073735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610729575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b80156107835750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156107ba576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107c48383611668565b8273ffffffffffffffffffffffffffffffffffffffff167f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab373735b14bb79463307aacbed86daf3322b1e6226ab6040516020016108219190611b65565b6040516020818303038152906040528460405161083f929190611c16565b60405180910390a26001905092915050565b60035481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060600880546108d390611f33565b80601f01602080910402602001604051908101604052809291908181526020018280546108ff90611f33565b801561094c5780601f106109215761010080835404028352916020019161094c565b820191906000526020600020905b81548152906001019060200180831161092f57829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061098e610987611093565b8484611254565b6001905092915050565b60008060006109a5610be1565b915091508173ffffffffffffffffffffffffffffffffffffffff166323b872dd3373735b14bb79463307aacbed86daf3322b1e6226ab846040518463ffffffff1660e01b81526004016109fa93929190611b9b565b602060405180830381600087803b158015610a1457600080fd5b505af1158015610a28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4c91906119ae565b610a82576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a8c33856114b0565b3373ffffffffffffffffffffffffffffffffffffffff167f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d955868684600354604051610ada9493929190611c46565b60405180910390a260019250505092915050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b67576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae81604051610bd69190611b80565b60405180910390a150565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630be155477f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401610c609190611ccf565b60206040518083038186803b158015610c7857600080fd5b505afa158015610c8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb091906118ae565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d19576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d7fd7afb7f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401610d959190611ccf565b60206040518083038186803b158015610dad57600080fd5b505afa158015610dc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de59190611a64565b90506000811415610e22576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060035460025483610e359190611de9565b610e3f9190611d93565b90508281945094505050509091565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f74576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806003819055507fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f81604051610faa9190611ccf565b60405180910390a150565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611052576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806002819055507fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a816040516110889190611ccf565b60405180910390a150565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611102576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611169576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112479190611ccf565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112bb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611322576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156113a0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81816113ac9190611e43565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461143e9190611d93565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114a29190611ccf565b60405180910390a350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611517576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611595576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81816115a19190611e43565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600660008282546115f69190611e43565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161165b9190611ccf565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116cf576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600660008282546116e19190611d93565b9250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117379190611d93565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161179c9190611ccf565b60405180910390a35050565b60006117bb6117b684611d2a565b611d05565b9050828152602081018484840111156117d7576117d661207b565b5b6117e2848285611ef1565b509392505050565b6000813590506117f9816120bc565b92915050565b60008151905061180e816120bc565b92915050565b600081519050611823816120d3565b92915050565b600082601f83011261183e5761183d612076565b5b813561184e8482602086016117a8565b91505092915050565b600081359050611866816120ea565b92915050565b60008151905061187b816120ea565b92915050565b60006020828403121561189757611896612085565b5b60006118a5848285016117ea565b91505092915050565b6000602082840312156118c4576118c3612085565b5b60006118d2848285016117ff565b91505092915050565b600080604083850312156118f2576118f1612085565b5b6000611900858286016117ea565b9250506020611911858286016117ea565b9150509250929050565b60008060006060848603121561193457611933612085565b5b6000611942868287016117ea565b9350506020611953868287016117ea565b925050604061196486828701611857565b9150509250925092565b6000806040838503121561198557611984612085565b5b6000611993858286016117ea565b92505060206119a485828601611857565b9150509250929050565b6000602082840312156119c4576119c3612085565b5b60006119d284828501611814565b91505092915050565b600080604083850312156119f2576119f1612085565b5b600083013567ffffffffffffffff811115611a1057611a0f612080565b5b611a1c85828601611829565b9250506020611a2d85828601611857565b9150509250929050565b600060208284031215611a4d57611a4c612085565b5b6000611a5b84828501611857565b91505092915050565b600060208284031215611a7a57611a79612085565b5b6000611a888482850161186c565b91505092915050565b611a9a81611e77565b82525050565b611ab1611aac82611e77565b611f96565b82525050565b611ac081611e89565b82525050565b6000611ad182611d5b565b611adb8185611d71565b9350611aeb818560208601611f00565b611af48161208a565b840191505092915050565b611b0881611edf565b82525050565b6000611b1982611d66565b611b238185611d82565b9350611b33818560208601611f00565b611b3c8161208a565b840191505092915050565b611b5081611ec8565b82525050565b611b5f81611ed2565b82525050565b6000611b718284611aa0565b60148201915081905092915050565b6000602082019050611b956000830184611a91565b92915050565b6000606082019050611bb06000830186611a91565b611bbd6020830185611a91565b611bca6040830184611b47565b949350505050565b6000604082019050611be76000830185611a91565b611bf46020830184611b47565b9392505050565b6000602082019050611c106000830184611ab7565b92915050565b60006040820190508181036000830152611c308185611ac6565b9050611c3f6020830184611b47565b9392505050565b60006080820190508181036000830152611c608187611ac6565b9050611c6f6020830186611b47565b611c7c6040830185611b47565b611c896060830184611b47565b95945050505050565b6000602082019050611ca76000830184611aff565b92915050565b60006020820190508181036000830152611cc78184611b0e565b905092915050565b6000602082019050611ce46000830184611b47565b92915050565b6000602082019050611cff6000830184611b56565b92915050565b6000611d0f611d20565b9050611d1b8282611f65565b919050565b6000604051905090565b600067ffffffffffffffff821115611d4557611d44612047565b5b611d4e8261208a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000611d9e82611ec8565b9150611da983611ec8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611dde57611ddd611fba565b5b828201905092915050565b6000611df482611ec8565b9150611dff83611ec8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611e3857611e37611fba565b5b828202905092915050565b6000611e4e82611ec8565b9150611e5983611ec8565b925082821015611e6c57611e6b611fba565b5b828203905092915050565b6000611e8282611ea8565b9050919050565b60008115159050919050565b6000819050611ea3826120a8565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000611eea82611e95565b9050919050565b82818337600083830152505050565b60005b83811015611f1e578082015181840152602081019050611f03565b83811115611f2d576000848401525b50505050565b60006002820490506001821680611f4b57607f821691505b60208210811415611f5f57611f5e612018565b5b50919050565b611f6e8261208a565b810181811067ffffffffffffffff82111715611f8d57611f8c612047565b5b80604052505050565b6000611fa182611fa8565b9050919050565b6000611fb38261209b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b600381106120b9576120b8611fe9565b5b50565b6120c581611e77565b81146120d057600080fd5b50565b6120dc81611e89565b81146120e757600080fd5b50565b6120f381611ec8565b81146120fe57600080fd5b5056fea26469706673582212206982505c1a546edfb86a1aaaca0ad6b7e5542f2d1f24ac30a032805fc80a650e64736f6c63430008070033a26469706673582212209e98ed7e2cd651eb28ee45ec064b8716a0654364831fa17adbe0b4545e6d061064736f6c63430008070033"; + "0x60806040526001600c60006101000a81548160ff0219169083151502179055506001601f60006101000a81548160ff02191690831515021790555034801561004657600080fd5b506201344580620000586000396000f3fe60806040523480156200001157600080fd5b5060043610620001005760003560e01c8063916a17c61162000099578063b5508aa9116200006f578063b5508aa9146200022d578063ba414fa6146200024f578063e20c9f711462000271578063fa7626d414620002935762000100565b8063916a17c614620001dd5780639683c69514620001ff578063b0464fdc146200020b5762000100565b80633e5e3c2311620000db5780633e5e3c2314620001555780633f7286f4146200017757806366d9a9a0146200019957806385226c8114620001bb5762000100565b80630a9254e414620001055780631ed7831c14620001115780632ade38801462000133575b600080fd5b6200010f620002b5565b005b6200011b6200135c565b6040516200012a919062002fcc565b60405180910390f35b6200013d620013ec565b6040516200014c919062003038565b60405180910390f35b6200015f62001586565b6040516200016e919062002fcc565b60405180910390f35b6200018162001616565b60405162000190919062002fcc565b60405180910390f35b620001a3620016a6565b604051620001b2919062003014565b60405180910390f35b620001c56200183d565b604051620001d4919062002ff0565b60405180910390f35b620001e762001920565b604051620001f691906200305c565b60405180910390f35b6200020962001a73565b005b6200021562002112565b6040516200022491906200305c565b60405180910390f35b6200023762002265565b60405162000246919062002ff0565b60405180910390f35b6200025962002348565b60405162000268919062003080565b60405180910390f35b6200027b6200247b565b6040516200028a919062002fcc565b60405180910390f35b6200029d6200250b565b604051620002ac919062003080565b60405180910390f35b30602560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550611234602660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550615678602760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550614321602c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051620003cd906200251e565b620003d890620032a2565b604051809103906000f080158015620003f5573d6000803e3d6000fd5b50602360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405162000444906200251e565b6200044f90620031d3565b604051809103906000f0801580156200046c573d6000803e3d6000fd5b50602160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550604051620004bb906200252c565b604051809103906000f080158015620004d8573d6000803e3d6000fd5b50601f60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516200054a906200253a565b62000556919062002e5d565b604051809103906000f08015801562000573573d6000803e3d6000fd5b50602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051620006089062002548565b6200061592919062002e7a565b604051809103906000f08015801562000632573d6000803e3d6000fd5b50602060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663485cc955602760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b81526004016200071692919062002e7a565b600060405180830381600087803b1580156200073157600080fd5b505af115801562000746573d6000803e3d6000fd5b50505050601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516200077b906200253a565b62000787919062002e5d565b604051809103906000f080158015620007a4573d6000803e3d6000fd5b50602260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ae7a3a6f602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040162000864919062002e5d565b600060405180830381600087803b1580156200087f57600080fd5b505af115801562000894573d6000803e3d6000fd5b50505050601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166310188aef602060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040162000917919062002e5d565b600060405180830381600087803b1580156200093257600080fd5b505af115801562000947573d6000803e3d6000fd5b50505050602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340c10f19602560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620f42406040518363ffffffff1660e01b8152600401620009cf92919062002f45565b600060405180830381600087803b158015620009ea57600080fd5b505af1158015620009ff573d6000803e3d6000fd5b50505050602360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a9059cbb602260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166207a1206040518363ffffffff1660e01b815260040162000a8792919062002f72565b602060405180830381600087803b15801562000aa257600080fd5b505af115801562000ab7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000add919062002648565b5060405162000aec9062002556565b604051809103906000f08015801562000b09573d6000803e3d6000fd5b50602460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060405162000b589062002564565b604051809103906000f08015801562000b75573d6000803e3d6000fd5b50602860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405162000be79062002572565b62000bf3919062002e5d565b604051809103906000f08015801562000c10573d6000803e3d6000fd5b50602960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550600073735b14bb79463307aacbed86daf3322b1e6226ab90507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff166306447d56826040518263ffffffff1660e01b815260040162000cc8919062002e5d565b600060405180830381600087803b15801562000ce357600080fd5b505af115801562000cf8573d6000803e3d6000fd5b50505050600080600060405162000d0f9062002580565b62000d1d9392919062002ea7565b604051809103906000f08015801562000d3a573d6000803e3d6000fd5b50602a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060126001600080602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405162000dd6906200258e565b62000de7969594939291906200320a565b604051809103906000f08015801562000e04573d6000803e3d6000fd5b50602b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663ee2815ba6001602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518363ffffffff1660e01b815260040162000ec792919062003135565b600060405180830381600087803b15801562000ee257600080fd5b505af115801562000ef7573d6000803e3d6000fd5b50505050602a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a7cb05076001806040518363ffffffff1660e01b815260040162000f5b92919062003162565b600060405180830381600087803b15801562000f7657600080fd5b505af115801562000f8b573d6000803e3d6000fd5b50505050602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166347e7ef24602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620f42406040518363ffffffff1660e01b81526004016200101392919062002f45565b602060405180830381600087803b1580156200102e57600080fd5b505af115801562001043573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001069919062002648565b50602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166347e7ef24602960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620f42406040518363ffffffff1660e01b8152600401620010ee92919062002f45565b602060405180830381600087803b1580156200110957600080fd5b505af11580156200111e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001144919062002648565b507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff166390c5013b6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620011b157600080fd5b505af1158015620011c6573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff1663ca669fa7602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b81526004016200124a919062002e5d565b600060405180830381600087803b1580156200126557600080fd5b505af11580156200127a573d6000803e3d6000fd5b50505050602b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663095ea7b3602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16620f42406040518363ffffffff1660e01b81526004016200130292919062002f45565b602060405180830381600087803b1580156200131d57600080fd5b505af115801562001332573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001358919062002648565b5050565b60606016805480602002602001604051908101604052809291908181526020018280548015620013e257602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831162001397575b5050505050905090565b6060601e805480602002602001604051908101604052809291908181526020016000905b828210156200157d57838290600052602060002090600202016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201805480602002602001604051908101604052809291908181526020016000905b8282101562001565578382906000526020600020018054620014d190620036a8565b80601f0160208091040260200160405190810160405280929190818152602001828054620014ff90620036a8565b8015620015505780601f10620015245761010080835404028352916020019162001550565b820191906000526020600020905b8154815290600101906020018083116200153257829003601f168201915b505050505081526020019060010190620014af565b50505050815250508152602001906001019062001410565b50505050905090565b606060188054806020026020016040519081016040528092919081815260200182805480156200160c57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311620015c1575b5050505050905090565b606060178054806020026020016040519081016040528092919081815260200182805480156200169c57602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001906001019080831162001651575b5050505050905090565b6060601b805480602002602001604051908101604052809291908181526020016000905b828210156200183457838290600052602060002090600202016040518060400160405290816000820180546200170090620036a8565b80601f01602080910402602001604051908101604052809291908181526020018280546200172e90620036a8565b80156200177f5780601f1062001753576101008083540402835291602001916200177f565b820191906000526020600020905b8154815290600101906020018083116200176157829003601f168201915b50505050508152602001600182018054806020026020016040519081016040528092919081815260200182805480156200181b57602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411620017c75790505b50505050508152505081526020019060010190620016ca565b50505050905090565b6060601a805480602002602001604051908101604052809291908181526020016000905b82821015620019175783829060005260206000200180546200188390620036a8565b80601f0160208091040260200160405190810160405280929190818152602001828054620018b190620036a8565b8015620019025780601f10620018d65761010080835404028352916020019162001902565b820191906000526020600020905b815481529060010190602001808311620018e457829003601f168201915b50505050508152602001906001019062001861565b50505050905090565b6060601d805480602002602001604051908101604052809291908181526020016000905b8282101562001a6a57838290600052602060002090600202016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820180548060200260200160405190810160405280929190818152602001828054801562001a5157602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411620019fd5790505b5050505050815250508152602001906001019062001944565b50505050905090565b60006040518060400160405280600f81526020017f48656c6c6f2c204861726468617421000000000000000000000000000000000081525090506000602a90506000600190506000670de0b6b3a76400009050600063e04d4f9760e01b85858560405160240162001ae7939291906200318f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff1663ca669fa7602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518263ffffffff1660e01b815260040162001bc6919062002e5d565b600060405180830381600087803b15801562001be157600080fd5b505af115801562001bf6573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff166381bad6f3600180600180602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518663ffffffff1660e01b815260040162001c849594939291906200309d565b600060405180830381600087803b15801562001c9f57600080fd5b505af115801562001cb4573d6000803e3d6000fd5b50505050602c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f2b5af078ce280d812dc2241658dc5435c93408020e5418eef55a2b536de51c0f602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405160200162001d47919062002e40565b6040516020818303038152906040528360405162001d67929190620030fa565b60405180910390a2602860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ac7c44c602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405160200162001de2919062002e40565b604051602081830303815290604052836040518363ffffffff1660e01b815260040162001e11929190620030fa565b600060405180830381600087803b15801562001e2c57600080fd5b505af115801562001e41573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff1663c88a5e6d601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518363ffffffff1660e01b815260040162001ec792919062002f9f565b600060405180830381600087803b15801562001ee257600080fd5b505af115801562001ef7573d6000803e3d6000fd5b505050507f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff166381bad6f3600180600180601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040518663ffffffff1660e01b815260040162001f859594939291906200309d565b600060405180830381600087803b15801562001fa057600080fd5b505af115801562001fb5573d6000803e3d6000fd5b50505050602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f838360405162002025929190620032d9565b60405180910390a2601f60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16631cff79cd83602460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846040518463ffffffff1660e01b8152600401620020af92919062002f11565b6000604051808303818588803b158015620020c957600080fd5b505af1158015620020de573d6000803e3d6000fd5b50505050506040513d6000823e3d601f19601f820116820180604052508101906200210a9190620026ac565b505050505050565b6060601c805480602002602001604051908101604052809291908181526020016000905b828210156200225c57838290600052602060002090600202016040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001600182018054806020026020016040519081016040528092919081815260200182805480156200224357602002820191906000526020600020906000905b82829054906101000a900460e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191681526020019060040190602082600301049283019260010382029150808411620021ef5790505b5050505050815250508152602001906001019062002136565b50505050905090565b60606019805480602002602001604051908101604052809291908181526020016000905b828210156200233f578382906000526020600020018054620022ab90620036a8565b80601f0160208091040260200160405190810160405280929190818152602001828054620022d990620036a8565b80156200232a5780601f10620022fe576101008083540402835291602001916200232a565b820191906000526020600020905b8154815290600101906020018083116200230c57829003601f168201915b50505050508152602001906001019062002289565b50505050905090565b6000600860009054906101000a900460ff16156200237857600860009054906101000a900460ff16905062002478565b6000801b7f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c73ffffffffffffffffffffffffffffffffffffffff1663667f9d707f885cb69240a935d632d79c317109709ecfa91a80626ff3989d68f67f5b1dd12d60001c7f6661696c656400000000000000000000000000000000000000000000000000006040518363ffffffff1660e01b81526004016200241f92919062002ee4565b60206040518083038186803b1580156200243857600080fd5b505afa1580156200244d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200247391906200267a565b141590505b90565b606060158054806020026020016040519081016040528092919081815260200182805480156200250157602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311620024b6575b5050505050905090565b601f60009054906101000a900460ff1681565b611813806200393d83390190565b613564806200515083390190565b61109080620086b483390190565b6111b9806200974483390190565b6110aa806200a8fd83390190565b613598806200b9a783390190565b610bcd806200ef3f83390190565b6110d7806200fb0c83390190565b61282d8062010be383390190565b6000620025b3620025ad8462003336565b6200330d565b905082815260208101848484011115620025d257620025d1620037ce565b5b620025df84828562003672565b509392505050565b600081519050620025f88162003908565b92915050565b6000815190506200260f8162003922565b92915050565b600082601f8301126200262d576200262c620037c9565b5b81516200263f8482602086016200259c565b91505092915050565b600060208284031215620026615762002660620037d8565b5b60006200267184828501620025e7565b91505092915050565b600060208284031215620026935762002692620037d8565b5b6000620026a384828501620025fe565b91505092915050565b600060208284031215620026c557620026c4620037d8565b5b600082015167ffffffffffffffff811115620026e657620026e5620037d3565b5b620026f48482850162002615565b91505092915050565b60006200270b838362002789565b60208301905092915050565b600062002725838362002b26565b60208301905092915050565b60006200273f838362002bf9565b905092915050565b600062002755838362002d65565b905092915050565b60006200276b838362002dad565b905092915050565b600062002781838362002dee565b905092915050565b62002794816200351c565b82525050565b620027a5816200351c565b82525050565b6000620027b882620033cc565b620027c4818562003472565b9350620027d1836200336c565b8060005b8381101562002808578151620027ec8882620026fd565b9750620027f98362003424565b925050600181019050620027d5565b5085935050505092915050565b60006200282282620033d7565b6200282e818562003483565b93506200283b836200337c565b8060005b838110156200287257815162002856888262002717565b9750620028638362003431565b9250506001810190506200283f565b5085935050505092915050565b60006200288c82620033e2565b62002898818562003494565b935083602082028501620028ac856200338c565b8060005b85811015620028ee5784840389528151620028cc858262002731565b9450620028d9836200343e565b925060208a01995050600181019050620028b0565b50829750879550505050505092915050565b60006200290d82620033e2565b620029198185620034a5565b9350836020820285016200292d856200338c565b8060005b858110156200296f57848403895281516200294d858262002731565b94506200295a836200343e565b925060208a0199505060018101905062002931565b50829750879550505050505092915050565b60006200298e82620033ed565b6200299a8185620034b6565b935083602082028501620029ae856200339c565b8060005b85811015620029f05784840389528151620029ce858262002747565b9450620029db836200344b565b925060208a01995050600181019050620029b2565b50829750879550505050505092915050565b600062002a0f82620033f8565b62002a1b8185620034c7565b93508360208202850162002a2f85620033ac565b8060005b8581101562002a71578484038952815162002a4f85826200275d565b945062002a5c8362003458565b925060208a0199505060018101905062002a33565b50829750879550505050505092915050565b600062002a908262003403565b62002a9c8185620034d8565b93508360208202850162002ab085620033bc565b8060005b8581101562002af2578484038952815162002ad0858262002773565b945062002add8362003465565b925060208a0199505060018101905062002ab4565b50829750879550505050505092915050565b62002b0f8162003530565b82525050565b62002b20816200353c565b82525050565b62002b318162003546565b82525050565b600062002b44826200340e565b62002b508185620034e9565b935062002b6281856020860162003672565b62002b6d81620037dd565b840191505092915050565b62002b8d62002b8782620035be565b62003714565b82525050565b62002b9e81620035d2565b82525050565b62002baf81620035e6565b82525050565b62002bc081620035fa565b82525050565b62002bd1816200360e565b82525050565b62002be28162003622565b82525050565b62002bf38162003636565b82525050565b600062002c068262003419565b62002c128185620034fa565b935062002c2481856020860162003672565b62002c2f81620037dd565b840191505092915050565b600062002c478262003419565b62002c5381856200350b565b935062002c6581856020860162003672565b62002c7081620037dd565b840191505092915050565b600062002c8a6003836200350b565b915062002c9782620037fb565b602082019050919050565b600062002cb16004836200350b565b915062002cbe8262003824565b602082019050919050565b600062002cd86004836200350b565b915062002ce5826200384d565b602082019050919050565b600062002cff6005836200350b565b915062002d0c8262003876565b602082019050919050565b600062002d266004836200350b565b915062002d33826200389f565b602082019050919050565b600062002d4d6003836200350b565b915062002d5a82620038c8565b602082019050919050565b6000604083016000830151848203600086015262002d84828262002bf9565b9150506020830151848203602086015262002da0828262002815565b9150508091505092915050565b600060408301600083015162002dc7600086018262002789565b506020830151848203602086015262002de182826200287f565b9150508091505092915050565b600060408301600083015162002e08600086018262002789565b506020830151848203602086015262002e22828262002815565b9150508091505092915050565b62002e3a81620035a7565b82525050565b600062002e4e828462002b78565b60148201915081905092915050565b600060208201905062002e7460008301846200279a565b92915050565b600060408201905062002e9160008301856200279a565b62002ea060208301846200279a565b9392505050565b600060608201905062002ebe60008301866200279a565b62002ecd60208301856200279a565b62002edc60408301846200279a565b949350505050565b600060408201905062002efb60008301856200279a565b62002f0a602083018462002b15565b9392505050565b600060408201905062002f2860008301856200279a565b818103602083015262002f3c818462002b37565b90509392505050565b600060408201905062002f5c60008301856200279a565b62002f6b602083018462002bb5565b9392505050565b600060408201905062002f8960008301856200279a565b62002f98602083018462002be8565b9392505050565b600060408201905062002fb660008301856200279a565b62002fc5602083018462002e2f565b9392505050565b6000602082019050818103600083015262002fe88184620027ab565b905092915050565b600060208201905081810360008301526200300c818462002900565b905092915050565b6000602082019050818103600083015262003030818462002981565b905092915050565b6000602082019050818103600083015262003054818462002a02565b905092915050565b6000602082019050818103600083015262003078818462002a83565b905092915050565b600060208201905062003097600083018462002b04565b92915050565b600060a082019050620030b4600083018862002b04565b620030c3602083018762002b04565b620030d2604083018662002b04565b620030e1606083018562002b04565b620030f060808301846200279a565b9695505050505050565b6000604082019050818103600083015262003116818562002b37565b905081810360208301526200312c818462002b37565b90509392505050565b60006040820190506200314c600083018562002bd7565b6200315b60208301846200279a565b9392505050565b600060408201905062003179600083018562002bd7565b62003188602083018462002bd7565b9392505050565b60006060820190508181036000830152620031ab818662002c3a565b9050620031bc602083018562002e2f565b620031cb604083018462002b04565b949350505050565b60006040820190508181036000830152620031ee8162002ca2565b90508181036020830152620032038162002cc9565b9050919050565b6000610100820190508181036000830152620032268162002cf0565b905081810360208301526200323b8162002d3e565b90506200324c604083018962002bc6565b6200325b606083018862002bd7565b6200326a608083018762002b93565b6200327960a083018662002ba4565b6200328860c08301856200279a565b6200329760e08301846200279a565b979650505050505050565b60006040820190508181036000830152620032bd8162002d17565b90508181036020830152620032d28162002c7b565b9050919050565b6000604082019050620032f0600083018562002e2f565b818103602083015262003304818462002b37565b90509392505050565b6000620033196200332c565b9050620033278282620036de565b919050565b6000604051905090565b600067ffffffffffffffff8211156200335457620033536200379a565b5b6200335f82620037dd565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000620035298262003587565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60008190506200358282620038f1565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000620035cb826200364a565b9050919050565b6000620035df8262003572565b9050919050565b6000620035f382620035a7565b9050919050565b60006200360782620035a7565b9050919050565b60006200361b82620035b1565b9050919050565b60006200362f82620035a7565b9050919050565b60006200364382620035a7565b9050919050565b600062003657826200365e565b9050919050565b60006200366b8262003587565b9050919050565b60005b838110156200369257808201518184015260208101905062003675565b83811115620036a2576000848401525b50505050565b60006002820490506001821680620036c157607f821691505b60208210811415620036d857620036d76200376b565b5b50919050565b620036e982620037dd565b810181811067ffffffffffffffff821117156200370b576200370a6200379a565b5b80604052505050565b6000620037218262003728565b9050919050565b60006200373582620037ee565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f54544b0000000000000000000000000000000000000000000000000000000000600082015250565b7f7a65746100000000000000000000000000000000000000000000000000000000600082015250565b7f5a45544100000000000000000000000000000000000000000000000000000000600082015250565b7f544f4b454e000000000000000000000000000000000000000000000000000000600082015250565b7f7465737400000000000000000000000000000000000000000000000000000000600082015250565b7f544b4e0000000000000000000000000000000000000000000000000000000000600082015250565b600381106200390557620039046200373c565b5b50565b620039138162003530565b81146200391f57600080fd5b50565b6200392d816200353c565b81146200393957600080fd5b5056fe60806040523480156200001157600080fd5b5060405162001813380380620018138339818101604052810190620000379190620001a3565b818181600390805190602001906200005192919062000075565b5080600490805190602001906200006a92919062000075565b5050505050620003ac565b8280546200008390620002bd565b90600052602060002090601f016020900481019282620000a75760008555620000f3565b82601f10620000c257805160ff1916838001178555620000f3565b82800160010185558215620000f3579182015b82811115620000f2578251825591602001919060010190620000d5565b5b50905062000102919062000106565b5090565b5b808211156200012157600081600090555060010162000107565b5090565b60006200013c620001368462000251565b62000228565b9050828152602081018484840111156200015b576200015a6200038c565b5b6200016884828562000287565b509392505050565b600082601f83011262000188576200018762000387565b5b81516200019a84826020860162000125565b91505092915050565b60008060408385031215620001bd57620001bc62000396565b5b600083015167ffffffffffffffff811115620001de57620001dd62000391565b5b620001ec8582860162000170565b925050602083015167ffffffffffffffff81111562000210576200020f62000391565b5b6200021e8582860162000170565b9150509250929050565b60006200023462000247565b9050620002428282620002f3565b919050565b6000604051905090565b600067ffffffffffffffff8211156200026f576200026e62000358565b5b6200027a826200039b565b9050602081019050919050565b60005b83811015620002a75780820151818401526020810190506200028a565b83811115620002b7576000848401525b50505050565b60006002820490506001821680620002d657607f821691505b60208210811415620002ed57620002ec62000329565b5b50919050565b620002fe826200039b565b810181811067ffffffffffffffff8211171562000320576200031f62000358565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b61145780620003bc6000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c806340c10f191161007157806340c10f19146101a357806370a08231146101bf57806395d89b41146101ef578063a457c2d71461020d578063a9059cbb1461023d578063dd62ed3e1461026d576100b4565b806306fdde03146100b9578063095ea7b3146100d757806318160ddd1461010757806323b872dd14610125578063313ce567146101555780633950935114610173575b600080fd5b6100c161029d565b6040516100ce9190610ecf565b60405180910390f35b6100f160048036038101906100ec9190610cf6565b61032f565b6040516100fe9190610eb4565b60405180910390f35b61010f610352565b60405161011c9190610ff1565b60405180910390f35b61013f600480360381019061013a9190610ca3565b61035c565b60405161014c9190610eb4565b60405180910390f35b61015d61038b565b60405161016a919061100c565b60405180910390f35b61018d60048036038101906101889190610cf6565b610394565b60405161019a9190610eb4565b60405180910390f35b6101bd60048036038101906101b89190610cf6565b6103cb565b005b6101d960048036038101906101d49190610c36565b6103d9565b6040516101e69190610ff1565b60405180910390f35b6101f7610421565b6040516102049190610ecf565b60405180910390f35b61022760048036038101906102229190610cf6565b6104b3565b6040516102349190610eb4565b60405180910390f35b61025760048036038101906102529190610cf6565b61052a565b6040516102649190610eb4565b60405180910390f35b61028760048036038101906102829190610c63565b61054d565b6040516102949190610ff1565b60405180910390f35b6060600380546102ac90611121565b80601f01602080910402602001604051908101604052809291908181526020018280546102d890611121565b80156103255780601f106102fa57610100808354040283529160200191610325565b820191906000526020600020905b81548152906001019060200180831161030857829003601f168201915b5050505050905090565b60008061033a6105d4565b90506103478185856105dc565b600191505092915050565b6000600254905090565b6000806103676105d4565b90506103748582856107a7565b61037f858585610833565b60019150509392505050565b60006012905090565b60008061039f6105d4565b90506103c08185856103b1858961054d565b6103bb9190611043565b6105dc565b600191505092915050565b6103d58282610aab565b5050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60606004805461043090611121565b80601f016020809104026020016040519081016040528092919081815260200182805461045c90611121565b80156104a95780601f1061047e576101008083540402835291602001916104a9565b820191906000526020600020905b81548152906001019060200180831161048c57829003601f168201915b5050505050905090565b6000806104be6105d4565b905060006104cc828661054d565b905083811015610511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050890610fb1565b60405180910390fd5b61051e82868684036105dc565b60019250505092915050565b6000806105356105d4565b9050610542818585610833565b600191505092915050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561064c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161064390610f91565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156106bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106b390610f11565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258360405161079a9190610ff1565b60405180910390a3505050565b60006107b3848461054d565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff811461082d578181101561081f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161081690610f31565b60405180910390fd5b61082c84848484036105dc565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089a90610f71565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610913576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161090a90610ef1565b60405180910390fd5b61091e838383610c02565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156109a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099b90610f51565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610a929190610ff1565b60405180910390a3610aa5848484610c07565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1290610fd1565b60405180910390fd5b610b2760008383610c02565b8060026000828254610b399190611043565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825401925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610bea9190610ff1565b60405180910390a3610bfe60008383610c07565b5050565b505050565b505050565b600081359050610c1b816113f3565b92915050565b600081359050610c308161140a565b92915050565b600060208284031215610c4c57610c4b6111b1565b5b6000610c5a84828501610c0c565b91505092915050565b60008060408385031215610c7a57610c796111b1565b5b6000610c8885828601610c0c565b9250506020610c9985828601610c0c565b9150509250929050565b600080600060608486031215610cbc57610cbb6111b1565b5b6000610cca86828701610c0c565b9350506020610cdb86828701610c0c565b9250506040610cec86828701610c21565b9150509250925092565b60008060408385031215610d0d57610d0c6111b1565b5b6000610d1b85828601610c0c565b9250506020610d2c85828601610c21565b9150509250929050565b610d3f816110ab565b82525050565b6000610d5082611027565b610d5a8185611032565b9350610d6a8185602086016110ee565b610d73816111b6565b840191505092915050565b6000610d8b602383611032565b9150610d96826111c7565b604082019050919050565b6000610dae602283611032565b9150610db982611216565b604082019050919050565b6000610dd1601d83611032565b9150610ddc82611265565b602082019050919050565b6000610df4602683611032565b9150610dff8261128e565b604082019050919050565b6000610e17602583611032565b9150610e22826112dd565b604082019050919050565b6000610e3a602483611032565b9150610e458261132c565b604082019050919050565b6000610e5d602583611032565b9150610e688261137b565b604082019050919050565b6000610e80601f83611032565b9150610e8b826113ca565b602082019050919050565b610e9f816110d7565b82525050565b610eae816110e1565b82525050565b6000602082019050610ec96000830184610d36565b92915050565b60006020820190508181036000830152610ee98184610d45565b905092915050565b60006020820190508181036000830152610f0a81610d7e565b9050919050565b60006020820190508181036000830152610f2a81610da1565b9050919050565b60006020820190508181036000830152610f4a81610dc4565b9050919050565b60006020820190508181036000830152610f6a81610de7565b9050919050565b60006020820190508181036000830152610f8a81610e0a565b9050919050565b60006020820190508181036000830152610faa81610e2d565b9050919050565b60006020820190508181036000830152610fca81610e50565b9050919050565b60006020820190508181036000830152610fea81610e73565b9050919050565b60006020820190506110066000830184610e96565b92915050565b60006020820190506110216000830184610ea5565b92915050565b600081519050919050565b600082825260208201905092915050565b600061104e826110d7565b9150611059836110d7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561108e5761108d611153565b5b828201905092915050565b60006110a4826110b7565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561110c5780820151818401526020810190506110f1565b8381111561111b576000848401525b50505050565b6000600282049050600182168061113957607f821691505b6020821081141561114d5761114c611182565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b6113fc81611099565b811461140757600080fd5b50565b611413816110d7565b811461141e57600080fd5b5056fea2646970667358221220d4c96329400732e284f624232c8d7228fc90c00ee7b1a48a85080262107815d864736f6c6343000807003360a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b81525034801561004657600080fd5b5060805160601c6134e361008160003960008181610768015281816107f701528181610b2201528181610bb10152610fcd01526134e36000f3fe60806040526004361061011f5760003560e01c80635b112591116100a0578063dda79b7511610064578063dda79b7514610382578063f2fde38b146103ad578063f31e62bf146103d6578063f340fa0114610401578063f45346dc1461041d5761011f565b80635b112591146102c3578063715018a6146102ee5780638c6f037f146103055780638da5cb5b1461032e578063ae7a3a6f146103595761011f565b8063485cc955116100e7578063485cc955146101eb5780634f1ef286146102145780635131ab591461023057806352d1902d1461026d57806357bec62f146102985761011f565b806310188aef146101245780631b8b921d1461014d5780631cff79cd1461017657806329c59b5d146101a65780633659cfe6146101c2575b600080fd5b34801561013057600080fd5b5061014b6004803603810190610146919061244e565b610446565b005b34801561015957600080fd5b50610174600480360381019061016f9190612543565b610512565b005b610190600480360381019061018b9190612543565b61057e565b60405161019d9190612bd6565b60405180910390f35b6101c060048036038101906101bb9190612543565b6105ec565b005b3480156101ce57600080fd5b506101e960048036038101906101e4919061244e565b610766565b005b3480156101f757600080fd5b50610212600480360381019061020d919061247b565b6108ef565b005b61022e600480360381019061022991906125a3565b610b20565b005b34801561023c57600080fd5b50610257600480360381019061025291906124bb565b610c5d565b6040516102649190612bd6565b60405180910390f35b34801561027957600080fd5b50610282610fc9565b60405161028f9190612b97565b60405180910390f35b3480156102a457600080fd5b506102ad611082565b6040516102ba9190612af3565b60405180910390f35b3480156102cf57600080fd5b506102d86110a8565b6040516102e59190612af3565b60405180910390f35b3480156102fa57600080fd5b506103036110ce565b005b34801561031157600080fd5b5061032c60048036038101906103279190612652565b6110e2565b005b34801561033a57600080fd5b50610343611260565b6040516103509190612af3565b60405180910390f35b34801561036557600080fd5b50610380600480360381019061037b919061244e565b61128a565b005b34801561038e57600080fd5b50610397611356565b6040516103a49190612af3565b60405180910390f35b3480156103b957600080fd5b506103d460048036038101906103cf919061244e565b61137c565b005b3480156103e257600080fd5b506103eb611400565b6040516103f89190612af3565b60405180910390f35b61041b6004803603810190610416919061244e565b611426565b005b34801561042957600080fd5b50610444600480360381019061043f91906125ff565b61159a565b005b600073ffffffffffffffffffffffffffffffffffffffff1660cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146104ce576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060cb60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2a21062ee9199c2e205622999eeb7c3da73153674f36a0acd3f74fa6af67bde38484604051610571929190612bb2565b60405180910390a3505050565b6060600061058d858585611712565b90508473ffffffffffffffffffffffffffffffffffffffff167fcaf938de11c367272220bfd1d2baa99ca46665e7bc4d85f00adb51b90fe1fa9f3486866040516105d993929190612e51565b60405180910390a2809150509392505050565b6000341415610627576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163460405161066f90612ade565b60006040518083038185875af1925050503d80600081146106ac576040519150601f19603f3d011682016040523d82523d6000602084013e6106b1565b606091505b505090506000151581151514156106f4576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a434600087876040516107589493929190612dd5565b60405180910390a350505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614156107f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ec90612c55565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108346117c9565b73ffffffffffffffffffffffffffffffffffffffff161461088a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088190612c75565b60405180910390fd5b61089381611820565b6108ec81600067ffffffffffffffff8111156108b2576108b1613012565b5b6040519080825280601f01601f1916602001820160405280156108e45781602001600182028036833780820191505090505b50600061182b565b50565b60008060019054906101000a900460ff161590508080156109205750600160008054906101000a900460ff1660ff16105b8061094d575061092f306119a8565b15801561094c5750600160008054906101000a900460ff1660ff16145b5b61098c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161098390612cf5565b60405180910390fd5b60016000806101000a81548160ff021916908360ff16021790555080156109c9576001600060016101000a81548160ff0219169083151502179055505b6109d16119cb565b6109d9611a24565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610a40576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8260ca60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508160cc60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015610b1b5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610b129190612bf8565b60405180910390a15b505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610baf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ba690612c55565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16610bee6117c9565b73ffffffffffffffffffffffffffffffffffffffff1614610c44576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3b90612c75565b60405180910390fd5b610c4d82611820565b610c598282600161182b565b5050565b60606000841415610c9a576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610ca48686611a75565b610cda576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8573ffffffffffffffffffffffffffffffffffffffff1663095ea7b386866040518363ffffffff1660e01b8152600401610d15929190612b6e565b602060405180830381600087803b158015610d2f57600080fd5b505af1158015610d43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6791906126da565b610d9d576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000610daa868585611712565b9050610db68787611a75565b610dec576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008773ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610e279190612af3565b60206040518083038186803b158015610e3f57600080fd5b505afa158015610e53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e779190612734565b90506000811115610f5257600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060cc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161415610f255760cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b610f5081838b73ffffffffffffffffffffffffffffffffffffffff16611b0d9092919063ffffffff16565b505b8673ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff167f29c40793bffd84cb810179f15d1ceec72bc7f0785514c668ba36645cf99b7382888888604051610fb393929190612e51565b60405180910390a3819250505095945050505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614611059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105090612cb5565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b60cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6110d6611b93565b6110e06000611c11565b565b600084141561111d576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060cc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156111c05760cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b6111ed3382878773ffffffffffffffffffffffffffffffffffffffff16611cd7909392919063ffffffff16565b8573ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a4878787876040516112509493929190612dd5565b60405180910390a3505050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff1660c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611312576040517fb337f37800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8060c960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611384611b93565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113eb90612c35565b60405180910390fd5b6113fd81611c11565b50565b60cc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000341415611461576040517f7671265e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060ca60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16346040516114a990612ade565b60006040518083038185875af1925050503d80600081146114e6576040519150601f19603f3d011682016040523d82523d6000602084013e6114eb565b606091505b5050905060001515811515141561152e576040517f79cacff100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a434600060405161158e929190612e15565b60405180910390a35050565b60008214156115d5576040517f951e19ed00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060cc60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116785760cb60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b6116a53382858573ffffffffffffffffffffffffffffffffffffffff16611cd7909392919063ffffffff16565b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2103daedac6c1eee9e5bfbd02064d751c9ec3c03fb9bc3e4f94ca41afa38c1a48585604051611704929190612e15565b60405180910390a350505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1634868660405161173f929190612aae565b60006040518083038185875af1925050503d806000811461177c576040519150601f19603f3d011682016040523d82523d6000602084013e611781565b606091505b5091509150816117bd576040517facfdb44400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80925050509392505050565b60006117f77f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611d60565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b611828611b93565b50565b6118577f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611d6a565b60000160009054906101000a900460ff161561187b5761187683611d74565b6119a3565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b1580156118c157600080fd5b505afa9250505080156118f257506040513d601f19601f820116820180604052508101906118ef9190612707565b60015b611931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192890612d15565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b8114611996576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198d90612cd5565b60405180910390fd5b506119a2838383611e2d565b5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611a1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a1190612d95565b60405180910390fd5b611a22611e59565b565b600060019054906101000a900460ff16611a73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a6a90612d95565b60405180910390fd5b565b60008273ffffffffffffffffffffffffffffffffffffffff1663095ea7b38360006040518363ffffffff1660e01b8152600401611ab3929190612b45565b602060405180830381600087803b158015611acd57600080fd5b505af1158015611ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0591906126da565b905092915050565b611b8e8363a9059cbb60e01b8484604051602401611b2c929190612b6e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611eba565b505050565b611b9b611f81565b73ffffffffffffffffffffffffffffffffffffffff16611bb9611260565b73ffffffffffffffffffffffffffffffffffffffff1614611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0690612d55565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611d5a846323b872dd60e01b858585604051602401611cf893929190612b0e565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050611eba565b50505050565b6000819050919050565b6000819050919050565b611d7d816119a8565b611dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611db390612d35565b60405180910390fd5b80611de97f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611d60565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611e3683611f89565b600082511180611e435750805b15611e5457611e528383611fd8565b505b505050565b600060019054906101000a900460ff16611ea8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e9f90612d95565b60405180910390fd5b611eb8611eb3611f81565b611c11565b565b6000611f1c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166120059092919063ffffffff16565b9050600081511115611f7c5780806020019051810190611f3c91906126da565b611f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7290612db5565b60405180910390fd5b5b505050565b600033905090565b611f9281611d74565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611ffd83836040518060600160405280602781526020016134876027913961201d565b905092915050565b606061201484846000856120a3565b90509392505050565b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516120479190612ac7565b600060405180830381855af49150503d8060008114612082576040519150601f19603f3d011682016040523d82523d6000602084013e612087565b606091505b509150915061209886838387612170565b925050509392505050565b6060824710156120e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120df90612c95565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516121119190612ac7565b60006040518083038185875af1925050503d806000811461214e576040519150601f19603f3d011682016040523d82523d6000602084013e612153565b606091505b5091509150612164878383876121e6565b92505050949350505050565b606083156121d3576000835114156121cb5761218b856119a8565b6121ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c190612d75565b60405180910390fd5b5b8290506121de565b6121dd838361225c565b5b949350505050565b606083156122495760008351141561224157612201856122ac565b612240576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223790612d75565b60405180910390fd5b5b829050612254565b61225383836122cf565b5b949350505050565b60008251111561226f5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a39190612c13565b60405180910390fd5b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156122e25781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123169190612c13565b60405180910390fd5b600061233261232d84612ea8565b612e83565b90508281526020810184848401111561234e5761234d613050565b5b612359848285612f9f565b509392505050565b6000813590506123708161342a565b92915050565b60008151905061238581613441565b92915050565b60008151905061239a81613458565b92915050565b60008083601f8401126123b6576123b5613046565b5b8235905067ffffffffffffffff8111156123d3576123d2613041565b5b6020830191508360018202830111156123ef576123ee61304b565b5b9250929050565b600082601f83011261240b5761240a613046565b5b813561241b84826020860161231f565b91505092915050565b6000813590506124338161346f565b92915050565b6000815190506124488161346f565b92915050565b6000602082840312156124645761246361305a565b5b600061247284828501612361565b91505092915050565b600080604083850312156124925761249161305a565b5b60006124a085828601612361565b92505060206124b185828601612361565b9150509250929050565b6000806000806000608086880312156124d7576124d661305a565b5b60006124e588828901612361565b95505060206124f688828901612361565b945050604061250788828901612424565b935050606086013567ffffffffffffffff81111561252857612527613055565b5b612534888289016123a0565b92509250509295509295909350565b60008060006040848603121561255c5761255b61305a565b5b600061256a86828701612361565b935050602084013567ffffffffffffffff81111561258b5761258a613055565b5b612597868287016123a0565b92509250509250925092565b600080604083850312156125ba576125b961305a565b5b60006125c885828601612361565b925050602083013567ffffffffffffffff8111156125e9576125e8613055565b5b6125f5858286016123f6565b9150509250929050565b6000806000606084860312156126185761261761305a565b5b600061262686828701612361565b935050602061263786828701612424565b925050604061264886828701612361565b9150509250925092565b60008060008060006080868803121561266e5761266d61305a565b5b600061267c88828901612361565b955050602061268d88828901612424565b945050604061269e88828901612361565b935050606086013567ffffffffffffffff8111156126bf576126be613055565b5b6126cb888289016123a0565b92509250509295509295909350565b6000602082840312156126f0576126ef61305a565b5b60006126fe84828501612376565b91505092915050565b60006020828403121561271d5761271c61305a565b5b600061272b8482850161238b565b91505092915050565b60006020828403121561274a5761274961305a565b5b600061275884828501612439565b91505092915050565b61276a81612f1c565b82525050565b61277981612f3a565b82525050565b600061278b8385612eef565b9350612798838584612f9f565b6127a18361305f565b840190509392505050565b60006127b88385612f00565b93506127c5838584612f9f565b82840190509392505050565b60006127dc82612ed9565b6127e68185612eef565b93506127f6818560208601612fae565b6127ff8161305f565b840191505092915050565b600061281582612ed9565b61281f8185612f00565b935061282f818560208601612fae565b80840191505092915050565b61284481612f7b565b82525050565b61285381612f8d565b82525050565b600061286482612ee4565b61286e8185612f0b565b935061287e818560208601612fae565b6128878161305f565b840191505092915050565b600061289f602683612f0b565b91506128aa82613070565b604082019050919050565b60006128c2602c83612f0b565b91506128cd826130bf565b604082019050919050565b60006128e5602c83612f0b565b91506128f08261310e565b604082019050919050565b6000612908602683612f0b565b91506129138261315d565b604082019050919050565b600061292b603883612f0b565b9150612936826131ac565b604082019050919050565b600061294e602983612f0b565b9150612959826131fb565b604082019050919050565b6000612971602e83612f0b565b915061297c8261324a565b604082019050919050565b6000612994602e83612f0b565b915061299f82613299565b604082019050919050565b60006129b7602d83612f0b565b91506129c2826132e8565b604082019050919050565b60006129da602083612f0b565b91506129e582613337565b602082019050919050565b60006129fd600083612eef565b9150612a0882613360565b600082019050919050565b6000612a20600083612f00565b9150612a2b82613360565b600082019050919050565b6000612a43601d83612f0b565b9150612a4e82613363565b602082019050919050565b6000612a66602b83612f0b565b9150612a718261338c565b604082019050919050565b6000612a89602a83612f0b565b9150612a94826133db565b604082019050919050565b612aa881612f64565b82525050565b6000612abb8284866127ac565b91508190509392505050565b6000612ad3828461280a565b915081905092915050565b6000612ae982612a13565b9150819050919050565b6000602082019050612b086000830184612761565b92915050565b6000606082019050612b236000830186612761565b612b306020830185612761565b612b3d6040830184612a9f565b949350505050565b6000604082019050612b5a6000830185612761565b612b67602083018461283b565b9392505050565b6000604082019050612b836000830185612761565b612b906020830184612a9f565b9392505050565b6000602082019050612bac6000830184612770565b92915050565b60006020820190508181036000830152612bcd81848661277f565b90509392505050565b60006020820190508181036000830152612bf081846127d1565b905092915050565b6000602082019050612c0d600083018461284a565b92915050565b60006020820190508181036000830152612c2d8184612859565b905092915050565b60006020820190508181036000830152612c4e81612892565b9050919050565b60006020820190508181036000830152612c6e816128b5565b9050919050565b60006020820190508181036000830152612c8e816128d8565b9050919050565b60006020820190508181036000830152612cae816128fb565b9050919050565b60006020820190508181036000830152612cce8161291e565b9050919050565b60006020820190508181036000830152612cee81612941565b9050919050565b60006020820190508181036000830152612d0e81612964565b9050919050565b60006020820190508181036000830152612d2e81612987565b9050919050565b60006020820190508181036000830152612d4e816129aa565b9050919050565b60006020820190508181036000830152612d6e816129cd565b9050919050565b60006020820190508181036000830152612d8e81612a36565b9050919050565b60006020820190508181036000830152612dae81612a59565b9050919050565b60006020820190508181036000830152612dce81612a7c565b9050919050565b6000606082019050612dea6000830187612a9f565b612df76020830186612761565b8181036040830152612e0a81848661277f565b905095945050505050565b6000606082019050612e2a6000830185612a9f565b612e376020830184612761565b8181036040830152612e48816129f0565b90509392505050565b6000604082019050612e666000830186612a9f565b8181036020830152612e7981848661277f565b9050949350505050565b6000612e8d612e9e565b9050612e998282612fe1565b919050565b6000604051905090565b600067ffffffffffffffff821115612ec357612ec2613012565b5b612ecc8261305f565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000612f2782612f44565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612f8682612f64565b9050919050565b6000612f9882612f6e565b9050919050565b82818337600083830152505050565b60005b83811015612fcc578082015181840152602081019050612fb1565b83811115612fdb576000848401525b50505050565b612fea8261305f565b810181811067ffffffffffffffff8211171561300957613008613012565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b61343381612f1c565b811461343e57600080fd5b50565b61344a81612f2e565b811461345557600080fd5b50565b61346181612f3a565b811461346c57600080fd5b50565b61347881612f64565b811461348357600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220a92291d9031c32880ffc1e5010a2c6663dffc6271b359692f77d40a3df8488cc64736f6c6343000807003360806040523480156200001157600080fd5b506040516200109038038062001090833981810160405281019062000037919062000106565b6001600081905550600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620000a7576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550506200018b565b600081519050620001008162000171565b92915050565b6000602082840312156200011f576200011e6200016c565b5b60006200012f84828501620000ef565b91505092915050565b600062000145826200014c565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6200017c8162000138565b81146200018857600080fd5b50565b610ef5806200019b6000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c8063116191b61461004657806321fc65f214610064578063d9caed1214610080575b600080fd5b61004e61009c565b60405161005b9190610a98565b60405180910390f35b61007e600480360381019061007991906107bc565b6100c2565b005b61009a60048036038101906100959190610769565b61024a565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6100ca6102ef565b610117600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16848773ffffffffffffffffffffffffffffffffffffffff1661033f9092919063ffffffff16565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635131ab5986868686866040518663ffffffff1660e01b815260040161017a959493929190610a21565b600060405180830381600087803b15801561019457600080fd5b505af11580156101a8573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906101d19190610871565b508373ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f85b5be9cf454e05e0bddf49315178102227c312078eefa3c00294fb4d912ae4e85858560405161023393929190610b70565b60405180910390a36102436103c5565b5050505050565b6102526102ef565b61027d82828573ffffffffffffffffffffffffffffffffffffffff1661033f9092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f9b1bfa7fa9ee420a16e124f794c35ac9f90472acc99140eb2f6447c714cad8eb836040516102da9190610b55565b60405180910390a36102ea6103c5565b505050565b60026000541415610335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161032c90610b35565b60405180910390fd5b6002600081905550565b6103c08363a9059cbb60e01b848460405160240161035e929190610a6f565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506103cf565b505050565b6001600081905550565b6000610431826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166104969092919063ffffffff16565b905060008151111561049157808060200190518101906104519190610844565b610490576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161048790610b15565b60405180910390fd5b5b505050565b60606104a584846000856104ae565b90509392505050565b6060824710156104f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104ea90610ad5565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff16858760405161051c9190610a0a565b60006040518083038185875af1925050503d8060008114610559576040519150601f19603f3d011682016040523d82523d6000602084013e61055e565b606091505b509150915061056f8783838761057b565b92505050949350505050565b606083156105de576000835114156105d657610596856105f1565b6105d5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105cc90610af5565b60405180910390fd5b5b8290506105e9565b6105e88383610614565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156106275781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065b9190610ab3565b60405180910390fd5b600061067761067284610bc7565b610ba2565b90508281526020810184848401111561069357610692610d6a565b5b61069e848285610cc8565b509392505050565b6000813590506106b581610e7a565b92915050565b6000815190506106ca81610e91565b92915050565b60008083601f8401126106e6576106e5610d60565b5b8235905067ffffffffffffffff81111561070357610702610d5b565b5b60208301915083600182028301111561071f5761071e610d65565b5b9250929050565b600082601f83011261073b5761073a610d60565b5b815161074b848260208601610664565b91505092915050565b60008135905061076381610ea8565b92915050565b60008060006060848603121561078257610781610d74565b5b6000610790868287016106a6565b93505060206107a1868287016106a6565b92505060406107b286828701610754565b9150509250925092565b6000806000806000608086880312156107d8576107d7610d74565b5b60006107e6888289016106a6565b95505060206107f7888289016106a6565b945050604061080888828901610754565b935050606086013567ffffffffffffffff81111561082957610828610d6f565b5b610835888289016106d0565b92509250509295509295909350565b60006020828403121561085a57610859610d74565b5b6000610868848285016106bb565b91505092915050565b60006020828403121561088757610886610d74565b5b600082015167ffffffffffffffff8111156108a5576108a4610d6f565b5b6108b184828501610726565b91505092915050565b6108c381610c3b565b82525050565b60006108d58385610c0e565b93506108e2838584610cb9565b6108eb83610d79565b840190509392505050565b600061090182610bf8565b61090b8185610c1f565b935061091b818560208601610cc8565b80840191505092915050565b61093081610c83565b82525050565b600061094182610c03565b61094b8185610c2a565b935061095b818560208601610cc8565b61096481610d79565b840191505092915050565b600061097c602683610c2a565b915061098782610d8a565b604082019050919050565b600061099f601d83610c2a565b91506109aa82610dd9565b602082019050919050565b60006109c2602a83610c2a565b91506109cd82610e02565b604082019050919050565b60006109e5601f83610c2a565b91506109f082610e51565b602082019050919050565b610a0481610c79565b82525050565b6000610a1682846108f6565b915081905092915050565b6000608082019050610a3660008301886108ba565b610a4360208301876108ba565b610a5060408301866109fb565b8181036060830152610a638184866108c9565b90509695505050505050565b6000604082019050610a8460008301856108ba565b610a9160208301846109fb565b9392505050565b6000602082019050610aad6000830184610927565b92915050565b60006020820190508181036000830152610acd8184610936565b905092915050565b60006020820190508181036000830152610aee8161096f565b9050919050565b60006020820190508181036000830152610b0e81610992565b9050919050565b60006020820190508181036000830152610b2e816109b5565b9050919050565b60006020820190508181036000830152610b4e816109d8565b9050919050565b6000602082019050610b6a60008301846109fb565b92915050565b6000604082019050610b8560008301866109fb565b8181036020830152610b988184866108c9565b9050949350505050565b6000610bac610bbd565b9050610bb88282610cfb565b919050565b6000604051905090565b600067ffffffffffffffff821115610be257610be1610d2c565b5b610beb82610d79565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000610c4682610c59565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610c8e82610c95565b9050919050565b6000610ca082610ca7565b9050919050565b6000610cb282610c59565b9050919050565b82818337600083830152505050565b60005b83811015610ce6578082015181840152602081019050610ccb565b83811115610cf5576000848401525b50505050565b610d0482610d79565b810181811067ffffffffffffffff82111715610d2357610d22610d2c565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b610e8381610c3b565b8114610e8e57600080fd5b50565b610e9a81610c4d565b8114610ea557600080fd5b50565b610eb181610c79565b8114610ebc57600080fd5b5056fea2646970667358221220c6f7c0f9935341aaaabcabf7504d01bbd38a0606132004742a97e6a200eb432564736f6c6343000807003360806040523480156200001157600080fd5b50604051620011b9380380620011b9833981810160405281019062000037919062000180565b6001600081905550600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161480620000a75750600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15620000df576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050506200021a565b6000815190506200017a8162000200565b92915050565b600080604083850312156200019a5762000199620001fb565b5b6000620001aa8582860162000169565b9250506020620001bd8582860162000169565b9150509250929050565b6000620001d482620001db565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6200020b81620001c7565b81146200021757600080fd5b50565b610f8f806200022a6000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806302a04c0d14610051578063116191b61461006d578063e8f9cb3a1461008b578063f3fef3a3146100a9575b600080fd5b61006b6004803603810190610066919061082e565b6100c5565b005b610075610279565b6040516100829190610b20565b60405180910390f35b61009361029f565b6040516100a09190610b05565b60405180910390f35b6100c360048036038101906100be91906107ee565b6102c5565b005b6100cd610374565b61013c600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1684600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166103c49092919063ffffffff16565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635131ab59600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16868686866040518663ffffffff1660e01b81526004016101c1959493929190610a8e565b600060405180830381600087803b1580156101db57600080fd5b505af11580156101ef573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f8201168201806040525081019061021891906108cf565b508373ffffffffffffffffffffffffffffffffffffffff167f7772f56296d3a5202974a45c61c9188d844ab4d6eeb18c851e4b8d5384ca6ced84848460405161026393929190610bf8565b60405180910390a261027361044a565b50505050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6102cd610374565b61031a8282600260009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166103c49092919063ffffffff16565b8173ffffffffffffffffffffffffffffffffffffffff167f884edad9ce6fa2440d8a54cc123490eb96d2768479d49ff9c7366125a9424364826040516103609190610bdd565b60405180910390a261037061044a565b5050565b600260005414156103ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103b190610bbd565b60405180910390fd5b6002600081905550565b6104458363a9059cbb60e01b84846040516024016103e3929190610adc565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610454565b505050565b6001600081905550565b60006104b6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff1661051b9092919063ffffffff16565b905060008151111561051657808060200190518101906104d691906108a2565b610515576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050c90610b9d565b60405180910390fd5b5b505050565b606061052a8484600085610533565b90509392505050565b606082471015610578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161056f90610b5d565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516105a19190610a77565b60006040518083038185875af1925050503d80600081146105de576040519150601f19603f3d011682016040523d82523d6000602084013e6105e3565b606091505b50915091506105f487838387610600565b92505050949350505050565b606083156106635760008351141561065b5761061b85610676565b61065a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065190610b7d565b60405180910390fd5b5b82905061066e565b61066d8383610699565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156106ac5781518083602001fd5b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106e09190610b3b565b60405180910390fd5b60006106fc6106f784610c4f565b610c2a565b90508281526020810184848401111561071857610717610e04565b5b610723848285610d62565b509392505050565b60008135905061073a81610f14565b92915050565b60008151905061074f81610f2b565b92915050565b60008083601f84011261076b5761076a610dfa565b5b8235905067ffffffffffffffff81111561078857610787610df5565b5b6020830191508360018202830111156107a4576107a3610dff565b5b9250929050565b600082601f8301126107c0576107bf610dfa565b5b81516107d08482602086016106e9565b91505092915050565b6000813590506107e881610f42565b92915050565b6000806040838503121561080557610804610e0e565b5b60006108138582860161072b565b9250506020610824858286016107d9565b9150509250929050565b6000806000806060858703121561084857610847610e0e565b5b60006108568782880161072b565b9450506020610867878288016107d9565b935050604085013567ffffffffffffffff81111561088857610887610e09565b5b61089487828801610755565b925092505092959194509250565b6000602082840312156108b8576108b7610e0e565b5b60006108c684828501610740565b91505092915050565b6000602082840312156108e5576108e4610e0e565b5b600082015167ffffffffffffffff81111561090357610902610e09565b5b61090f848285016107ab565b91505092915050565b61092181610cc3565b82525050565b60006109338385610c96565b9350610940838584610d53565b61094983610e13565b840190509392505050565b600061095f82610c80565b6109698185610ca7565b9350610979818560208601610d62565b80840191505092915050565b61098e81610d0b565b82525050565b61099d81610d1d565b82525050565b60006109ae82610c8b565b6109b88185610cb2565b93506109c8818560208601610d62565b6109d181610e13565b840191505092915050565b60006109e9602683610cb2565b91506109f482610e24565b604082019050919050565b6000610a0c601d83610cb2565b9150610a1782610e73565b602082019050919050565b6000610a2f602a83610cb2565b9150610a3a82610e9c565b604082019050919050565b6000610a52601f83610cb2565b9150610a5d82610eeb565b602082019050919050565b610a7181610d01565b82525050565b6000610a838284610954565b915081905092915050565b6000608082019050610aa36000830188610918565b610ab06020830187610918565b610abd6040830186610a68565b8181036060830152610ad0818486610927565b90509695505050505050565b6000604082019050610af16000830185610918565b610afe6020830184610a68565b9392505050565b6000602082019050610b1a6000830184610985565b92915050565b6000602082019050610b356000830184610994565b92915050565b60006020820190508181036000830152610b5581846109a3565b905092915050565b60006020820190508181036000830152610b76816109dc565b9050919050565b60006020820190508181036000830152610b96816109ff565b9050919050565b60006020820190508181036000830152610bb681610a22565b9050919050565b60006020820190508181036000830152610bd681610a45565b9050919050565b6000602082019050610bf26000830184610a68565b92915050565b6000604082019050610c0d6000830186610a68565b8181036020830152610c20818486610927565b9050949350505050565b6000610c34610c45565b9050610c408282610d95565b919050565b6000604051905090565b600067ffffffffffffffff821115610c6a57610c69610dc6565b5b610c7382610e13565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000610cce82610ce1565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000610d1682610d2f565b9050919050565b6000610d2882610d2f565b9050919050565b6000610d3a82610d41565b9050919050565b6000610d4c82610ce1565b9050919050565b82818337600083830152505050565b60005b83811015610d80578082015181840152602081019050610d65565b83811115610d8f576000848401525b50505050565b610d9e82610e13565b810181811067ffffffffffffffff82111715610dbd57610dbc610dc6565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b610f1d81610cc3565b8114610f2857600080fd5b50565b610f3481610cd5565b8114610f3f57600080fd5b50565b610f4b81610d01565b8114610f5657600080fd5b5056fea2646970667358221220bdea1bc357822401542c5c1b57f5c8696f7fa6c99ecfef1bfd392504260c0f1164736f6c63430008070033608060405234801561001057600080fd5b5061108a806100206000396000f3fe60806040526004361061003f5760003560e01c8063357fc5a2146100445780636ed701691461006d578063e04d4f9714610084578063f05b6abf146100a0575b600080fd5b34801561005057600080fd5b5061006b6004803603810190610066919061085a565b6100c9565b005b34801561007957600080fd5b50610082610138565b005b61009e600480360381019061009991906107eb565b610171565b005b3480156100ac57600080fd5b506100c760048036038101906100c29190610733565b6101b5565b005b6100f63382858573ffffffffffffffffffffffffffffffffffffffff166101f7909392919063ffffffff16565b7f2b58128f24a9f59127cc5b5430d70542b22220f2d9adaa86e442b816ab98af603384848460405161012b9493929190610bb0565b60405180910390a1505050565b7fbcaadb46b82a48af60b608f58959ae6b8310d1b0a0d094c2e9ec3208ed39f2a0336040516101679190610b0b565b60405180910390a1565b7f1f1ff1f5fb41346850b2f5c04e6c767e2f1c8a525c5c0c5cdb60cdf3ca5f62fa33348585856040516101a8959493929190610bf5565b60405180910390a1505050565b7f74a53cd528a921fca7dbdee62f86819051d3cc98f214951f4238e8843f20b146338484846040516101ea9493929190610b5d565b60405180910390a1505050565b61027a846323b872dd60e01b85858560405160240161021893929190610b26565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050610280565b50505050565b60006102e2826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff166103479092919063ffffffff16565b9050600081511115610342578080602001905181019061030291906107be565b610341576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161033890610cb1565b60405180910390fd5b5b505050565b6060610356848460008561035f565b90509392505050565b6060824710156103a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161039b90610c71565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516103cd9190610af4565b60006040518083038185875af1925050503d806000811461040a576040519150601f19603f3d011682016040523d82523d6000602084013e61040f565b606091505b50915091506104208783838761042c565b92505050949350505050565b6060831561048f5760008351141561048757610447856104a2565b610486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161047d90610c91565b60405180910390fd5b5b82905061049a565b61049983836104c5565b5b949350505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000825111156104d85781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161050c9190610c4f565b60405180910390fd5b600061052861052384610cf6565b610cd1565b9050808382526020820190508285602086028201111561054b5761054a610f23565b5b60005b8581101561059957813567ffffffffffffffff81111561057157610570610f1e565b5b80860161057e89826106f0565b8552602085019450602084019350505060018101905061054e565b5050509392505050565b60006105b66105b184610d22565b610cd1565b905080838252602082019050828560208602820111156105d9576105d8610f23565b5b60005b8581101561060957816105ef888261071e565b8452602084019350602083019250506001810190506105dc565b5050509392505050565b600061062661062184610d4e565b610cd1565b90508281526020810184848401111561064257610641610f28565b5b61064d848285610e7c565b509392505050565b6000813590506106648161100f565b92915050565b600082601f83011261067f5761067e610f1e565b5b813561068f848260208601610515565b91505092915050565b600082601f8301126106ad576106ac610f1e565b5b81356106bd8482602086016105a3565b91505092915050565b6000813590506106d581611026565b92915050565b6000815190506106ea81611026565b92915050565b600082601f83011261070557610704610f1e565b5b8135610715848260208601610613565b91505092915050565b60008135905061072d8161103d565b92915050565b60008060006060848603121561074c5761074b610f32565b5b600084013567ffffffffffffffff81111561076a57610769610f2d565b5b6107768682870161066a565b935050602084013567ffffffffffffffff81111561079757610796610f2d565b5b6107a386828701610698565b92505060406107b4868287016106c6565b9150509250925092565b6000602082840312156107d4576107d3610f32565b5b60006107e2848285016106db565b91505092915050565b60008060006060848603121561080457610803610f32565b5b600084013567ffffffffffffffff81111561082257610821610f2d565b5b61082e868287016106f0565b935050602061083f8682870161071e565b9250506040610850868287016106c6565b9150509250925092565b60008060006060848603121561087357610872610f32565b5b60006108818682870161071e565b935050602061089286828701610655565b92505060406108a386828701610655565b9150509250925092565b60006108b983836109fb565b905092915050565b60006108cd8383610ad6565b60208301905092915050565b6108e281610e34565b82525050565b60006108f382610d9f565b6108fd8185610de5565b93508360208202850161090f85610d7f565b8060005b8581101561094b578484038952815161092c85826108ad565b945061093783610dcb565b925060208a01995050600181019050610913565b50829750879550505050505092915050565b600061096882610daa565b6109728185610df6565b935061097d83610d8f565b8060005b838110156109ae57815161099588826108c1565b97506109a083610dd8565b925050600181019050610981565b5085935050505092915050565b6109c481610e46565b82525050565b60006109d582610db5565b6109df8185610e07565b93506109ef818560208601610e8b565b80840191505092915050565b6000610a0682610dc0565b610a108185610e12565b9350610a20818560208601610e8b565b610a2981610f37565b840191505092915050565b6000610a3f82610dc0565b610a498185610e23565b9350610a59818560208601610e8b565b610a6281610f37565b840191505092915050565b6000610a7a602683610e23565b9150610a8582610f48565b604082019050919050565b6000610a9d601d83610e23565b9150610aa882610f97565b602082019050919050565b6000610ac0602a83610e23565b9150610acb82610fc0565b604082019050919050565b610adf81610e72565b82525050565b610aee81610e72565b82525050565b6000610b0082846109ca565b915081905092915050565b6000602082019050610b2060008301846108d9565b92915050565b6000606082019050610b3b60008301866108d9565b610b4860208301856108d9565b610b556040830184610ae5565b949350505050565b6000608082019050610b7260008301876108d9565b8181036020830152610b8481866108e8565b90508181036040830152610b98818561095d565b9050610ba760608301846109bb565b95945050505050565b6000608082019050610bc560008301876108d9565b610bd26020830186610ae5565b610bdf60408301856108d9565b610bec60608301846108d9565b95945050505050565b600060a082019050610c0a60008301886108d9565b610c176020830187610ae5565b8181036040830152610c298186610a34565b9050610c386060830185610ae5565b610c4560808301846109bb565b9695505050505050565b60006020820190508181036000830152610c698184610a34565b905092915050565b60006020820190508181036000830152610c8a81610a6d565b9050919050565b60006020820190508181036000830152610caa81610a90565b9050919050565b60006020820190508181036000830152610cca81610ab3565b9050919050565b6000610cdb610cec565b9050610ce78282610ebe565b919050565b6000604051905090565b600067ffffffffffffffff821115610d1157610d10610eef565b5b602082029050602081019050919050565b600067ffffffffffffffff821115610d3d57610d3c610eef565b5b602082029050602081019050919050565b600067ffffffffffffffff821115610d6957610d68610eef565b5b610d7282610f37565b9050602081019050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b6000610e3f82610e52565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015610ea9578082015181840152602081019050610e8e565b83811115610eb8576000848401525b50505050565b610ec782610f37565b810181811067ffffffffffffffff82111715610ee657610ee5610eef565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b61101881610e34565b811461102357600080fd5b50565b61102f81610e46565b811461103a57600080fd5b50565b61104681610e72565b811461105157600080fd5b5056fea2646970667358221220086a1c9f56ed96506c7198d50cf431a5b03003c16cd4168d2395cdedfc1ac06164736f6c6343000807003360a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152503480156200004757600080fd5b50620000586200005e60201b60201c565b62000208565b600060019054906101000a900460ff1615620000b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a8906200015c565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff1614620001225760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff6040516200011991906200017e565b60405180910390a15b565b6000620001336027836200019b565b91506200014082620001b9565b604082019050919050565b6200015681620001ac565b82525050565b60006020820190508181036000830152620001778162000124565b9050919050565b60006020820190506200019560008301846200014b565b92915050565b600082825260208201905092915050565b600060ff82169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60805160601c613355620002436000396000818161063e015281816106cd015281816107df0152818161086e015261091e01526133556000f3fe6080604052600436106100fd5760003560e01c806352d1902d11610095578063bcf7f32b11610064578063bcf7f32b146102d7578063c39aca3714610300578063c4d66de814610329578063f2fde38b14610352578063f45346dc1461037b576100fd565b806352d1902d14610241578063715018a61461026c5780637993c1e0146102835780638da5cb5b146102ac576100fd565b80632e1a7d4d116100d15780632e1a7d4d146101a85780633659cfe6146101d15780633ce4a5bc146101fa5780634f1ef28614610225576100fd565b8062173d46146101025780630ac7c44c1461012d578063135390f914610156578063267e75a01461017f575b600080fd5b34801561010e57600080fd5b506101176103a4565b6040516101249190612814565b60405180910390f35b34801561013957600080fd5b50610154600480360381019061014f9190612120565b6103ca565b005b34801561016257600080fd5b5061017d6004803603810190610178919061219c565b610421565b005b34801561018b57600080fd5b506101a660048036038101906101a191906123bf565b610508565b005b3480156101b457600080fd5b506101cf60048036038101906101ca9190612365565b6105a5565b005b3480156101dd57600080fd5b506101f860048036038101906101f39190611faa565b61063c565b005b34801561020657600080fd5b5061020f6107c5565b60405161021c9190612814565b60405180910390f35b61023f600480360381019061023a9190611fd7565b6107dd565b005b34801561024d57600080fd5b5061025661091a565b6040516102639190612a4b565b60405180910390f35b34801561027857600080fd5b506102816109d3565b005b34801561028f57600080fd5b506102aa60048036038101906102a5919061220b565b6109e7565b005b3480156102b857600080fd5b506102c1610ad4565b6040516102ce9190612814565b60405180910390f35b3480156102e357600080fd5b506102fe60048036038101906102f991906122af565b610afe565b005b34801561030c57600080fd5b50610327600480360381019061032291906122af565b610bf2565b005b34801561033557600080fd5b50610350600480360381019061034b9190611faa565b610e24565b005b34801561035e57600080fd5b5061037960048036038101906103749190611faa565b610fce565b005b34801561038757600080fd5b506103a2600480360381019061039d9190612073565b611052565b005b60c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff167f2b5af078ce280d812dc2241658dc5435c93408020e5418eef55a2b536de51c0f84848460405161041493929190612a66565b60405180910390a2505050565b600061042d838361120e565b90503373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716838686858773ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104b157600080fd5b505afa1580156104c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e99190612392565b6040516104fa9594939291906129b5565b60405180910390a250505050565b610511836114fe565b3373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716600073735b14bb79463307aacbed86daf3322b1e6226ab60405160200161057091906127cd565b6040516020818303038152906040528660008088886040516105989796959493929190612866565b60405180910390a2505050565b6105ae816114fe565b3373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716600073735b14bb79463307aacbed86daf3322b1e6226ab60405160200161060d91906127cd565b604051602081830303815290604052846000806040516106319594939291906128d7565b60405180910390a250565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614156106cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c290612afc565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661070a61172d565b73ffffffffffffffffffffffffffffffffffffffff1614610760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075790612b1c565b60405180910390fd5b61076981611784565b6107c281600067ffffffffffffffff81111561078857610787612f01565b5b6040519080825280601f01601f1916602001820160405280156107ba5781602001600182028036833780820191505090505b50600061178f565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab81565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16141561086c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086390612afc565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108ab61172d565b73ffffffffffffffffffffffffffffffffffffffff1614610901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f890612b1c565b60405180910390fd5b61090a82611784565b6109168282600161178f565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16146109aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a190612b3c565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b6109db61190c565b6109e5600061198a565b565b60006109f3858561120e565b90503373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716858888858973ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a7757600080fd5b505afa158015610a8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aaf9190612392565b8989604051610ac49796959493929190612944565b60405180910390a2505050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b77576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b8152600401610bb8959493929190612c3c565b600060405180830381600087803b158015610bd257600080fd5b505af1158015610be6573d6000803e3d6000fd5b50505050505050505050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c6b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610ce457503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610d1b576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166347e7ef2484866040518363ffffffff1660e01b8152600401610d56929190612a22565b602060405180830381600087803b158015610d7057600080fd5b505af1158015610d84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da891906120c6565b508273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b8152600401610dea959493929190612c3c565b600060405180830381600087803b158015610e0457600080fd5b505af1158015610e18573d6000803e3d6000fd5b50505050505050505050565b60008060019054906101000a900460ff16159050808015610e555750600160008054906101000a900460ff1660ff16105b80610e825750610e6430611a50565b158015610e815750600160008054906101000a900460ff1660ff16145b5b610ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb890612b7c565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610efe576001600060016101000a81548160ff0219169083151502179055505b610f06611a73565b610f0e611acc565b60c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660c960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015610fca5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610fc19190612a9f565b60405180910390a15b5050565b610fd661190c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103d90612adc565b60405180910390fd5b61104f8161198a565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110cb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061114457503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561117b576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166347e7ef2482846040518363ffffffff1660e01b81526004016111b6929190612a22565b602060405180830381600087803b1580156111d057600080fd5b505af11580156111e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120891906120c6565b50505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1663d9eeebed6040518163ffffffff1660e01b8152600401604080518083038186803b15801561125857600080fd5b505afa15801561126c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112909190612033565b915091508173ffffffffffffffffffffffffffffffffffffffff166323b872dd3373735b14bb79463307aacbed86daf3322b1e6226ab846040518463ffffffff1660e01b81526004016112e59392919061282f565b602060405180830381600087803b1580156112ff57600080fd5b505af1158015611313573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133791906120c6565b61136d576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff1660e01b81526004016113aa9392919061282f565b602060405180830381600087803b1580156113c457600080fd5b505af11580156113d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fc91906120c6565b611432576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166342966c68866040518263ffffffff1660e01b815260040161146b9190612c91565b602060405180830381600087803b15801561148557600080fd5b505af1158015611499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bd91906120c6565b6114f3576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b809250505092915050565b60c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b815260040161155d9392919061282f565b602060405180830381600087803b15801561157757600080fd5b505af115801561158b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115af91906120c6565b6115e5576040517fa8c6fd4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b81526004016116409190612c91565b600060405180830381600087803b15801561165a57600080fd5b505af115801561166e573d6000803e3d6000fd5b50505050600073735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff16826040516116ac906127ff565b60006040518083038185875af1925050503d80600081146116e9576040519150601f19603f3d011682016040523d82523d6000602084013e6116ee565b606091505b5050905080611729576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b600061175b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611b1d565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61178c61190c565b50565b6117bb7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611b27565b60000160009054906101000a900460ff16156117df576117da83611b31565b611907565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561182557600080fd5b505afa92505050801561185657506040513d601f19601f8201168201806040525081019061185391906120f3565b60015b611895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188c90612b9c565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146118fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f190612b5c565b60405180910390fd5b50611906838383611bea565b5b505050565b611914611c16565b73ffffffffffffffffffffffffffffffffffffffff16611932610ad4565b73ffffffffffffffffffffffffffffffffffffffff1614611988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197f90612bdc565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab990612c1c565b60405180910390fd5b611aca611c1e565b565b600060019054906101000a900460ff16611b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1290612c1c565b60405180910390fd5b565b6000819050919050565b6000819050919050565b611b3a81611a50565b611b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7090612bbc565b60405180910390fd5b80611ba67f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611b1d565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611bf383611c7f565b600082511180611c005750805b15611c1157611c0f8383611cce565b505b505050565b600033905090565b600060019054906101000a900460ff16611c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6490612c1c565b60405180910390fd5b611c7d611c78611c16565b61198a565b565b611c8881611b31565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611cf383836040518060600160405280602781526020016132f960279139611cfb565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051611d2591906127e8565b600060405180830381855af49150503d8060008114611d60576040519150601f19603f3d011682016040523d82523d6000602084013e611d65565b606091505b5091509150611d7686838387611d81565b925050509392505050565b60608315611de457600083511415611ddc57611d9c85611a50565b611ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd290612bfc565b60405180910390fd5b5b829050611def565b611dee8383611df7565b5b949350505050565b600082511115611e0a5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3e9190612aba565b60405180910390fd5b6000611e5a611e5584612cd1565b612cac565b905082815260208101848484011115611e7657611e75612f4e565b5b611e81848285612e6a565b509392505050565b600081359050611e988161329c565b92915050565b600081519050611ead8161329c565b92915050565b600081519050611ec2816132b3565b92915050565b600081519050611ed7816132ca565b92915050565b60008083601f840112611ef357611ef2612f3a565b5b8235905067ffffffffffffffff811115611f1057611f0f612f35565b5b602083019150836001820283011115611f2c57611f2b612f49565b5b9250929050565b600082601f830112611f4857611f47612f3a565b5b8135611f58848260208601611e47565b91505092915050565b600060608284031215611f7757611f76612f3f565b5b81905092915050565b600081359050611f8f816132e1565b92915050565b600081519050611fa4816132e1565b92915050565b600060208284031215611fc057611fbf612f5d565b5b6000611fce84828501611e89565b91505092915050565b60008060408385031215611fee57611fed612f5d565b5b6000611ffc85828601611e89565b925050602083013567ffffffffffffffff81111561201d5761201c612f53565b5b61202985828601611f33565b9150509250929050565b6000806040838503121561204a57612049612f5d565b5b600061205885828601611e9e565b925050602061206985828601611f95565b9150509250929050565b60008060006060848603121561208c5761208b612f5d565b5b600061209a86828701611e89565b93505060206120ab86828701611f80565b92505060406120bc86828701611e89565b9150509250925092565b6000602082840312156120dc576120db612f5d565b5b60006120ea84828501611eb3565b91505092915050565b60006020828403121561210957612108612f5d565b5b600061211784828501611ec8565b91505092915050565b60008060006040848603121561213957612138612f5d565b5b600084013567ffffffffffffffff81111561215757612156612f53565b5b61216386828701611f33565b935050602084013567ffffffffffffffff81111561218457612183612f53565b5b61219086828701611edd565b92509250509250925092565b6000806000606084860312156121b5576121b4612f5d565b5b600084013567ffffffffffffffff8111156121d3576121d2612f53565b5b6121df86828701611f33565b93505060206121f086828701611f80565b925050604061220186828701611e89565b9150509250925092565b60008060008060006080868803121561222757612226612f5d565b5b600086013567ffffffffffffffff81111561224557612244612f53565b5b61225188828901611f33565b955050602061226288828901611f80565b945050604061227388828901611e89565b935050606086013567ffffffffffffffff81111561229457612293612f53565b5b6122a088828901611edd565b92509250509295509295909350565b60008060008060008060a087890312156122cc576122cb612f5d565b5b600087013567ffffffffffffffff8111156122ea576122e9612f53565b5b6122f689828a01611f61565b965050602061230789828a01611e89565b955050604061231889828a01611f80565b945050606061232989828a01611e89565b935050608087013567ffffffffffffffff81111561234a57612349612f53565b5b61235689828a01611edd565b92509250509295509295509295565b60006020828403121561237b5761237a612f5d565b5b600061238984828501611f80565b91505092915050565b6000602082840312156123a8576123a7612f5d565b5b60006123b684828501611f95565b91505092915050565b6000806000604084860312156123d8576123d7612f5d565b5b60006123e686828701611f80565b935050602084013567ffffffffffffffff81111561240757612406612f53565b5b61241386828701611edd565b92509250509250925092565b61242881612de7565b82525050565b61243781612de7565b82525050565b61244e61244982612de7565b612edd565b82525050565b61245d81612e05565b82525050565b600061246f8385612d18565b935061247c838584612e6a565b61248583612f62565b840190509392505050565b600061249c8385612d29565b93506124a9838584612e6a565b6124b283612f62565b840190509392505050565b60006124c882612d02565b6124d28185612d29565b93506124e2818560208601612e79565b6124eb81612f62565b840191505092915050565b600061250182612d02565b61250b8185612d3a565b935061251b818560208601612e79565b80840191505092915050565b61253081612e46565b82525050565b61253f81612e58565b82525050565b600061255082612d0d565b61255a8185612d45565b935061256a818560208601612e79565b61257381612f62565b840191505092915050565b600061258b602683612d45565b915061259682612f80565b604082019050919050565b60006125ae602c83612d45565b91506125b982612fcf565b604082019050919050565b60006125d1602c83612d45565b91506125dc8261301e565b604082019050919050565b60006125f4603883612d45565b91506125ff8261306d565b604082019050919050565b6000612617602983612d45565b9150612622826130bc565b604082019050919050565b600061263a602e83612d45565b91506126458261310b565b604082019050919050565b600061265d602e83612d45565b91506126688261315a565b604082019050919050565b6000612680602d83612d45565b915061268b826131a9565b604082019050919050565b60006126a3602083612d45565b91506126ae826131f8565b602082019050919050565b60006126c6600083612d29565b91506126d182613221565b600082019050919050565b60006126e9600083612d3a565b91506126f482613221565b600082019050919050565b600061270c601d83612d45565b915061271782613224565b602082019050919050565b600061272f602b83612d45565b915061273a8261324d565b604082019050919050565b6000606083016127586000840184612d6d565b858303600087015261276b838284612463565b9250505061277c6020840184612d56565b612789602086018261241f565b506127976040840184612dd0565b6127a460408601826127af565b508091505092915050565b6127b881612e2f565b82525050565b6127c781612e2f565b82525050565b60006127d9828461243d565b60148201915081905092915050565b60006127f482846124f6565b915081905092915050565b600061280a826126dc565b9150819050919050565b6000602082019050612829600083018461242e565b92915050565b6000606082019050612844600083018661242e565b612851602083018561242e565b61285e60408301846127be565b949350505050565b600060c08201905061287b600083018a61242e565b818103602083015261288d81896124bd565b905061289c60408301886127be565b6128a96060830187612527565b6128b66080830186612527565b81810360a08301526128c9818486612490565b905098975050505050505050565b600060c0820190506128ec600083018861242e565b81810360208301526128fe81876124bd565b905061290d60408301866127be565b61291a6060830185612527565b6129276080830184612527565b81810360a0830152612938816126b9565b90509695505050505050565b600060c082019050612959600083018a61242e565b818103602083015261296b81896124bd565b905061297a60408301886127be565b61298760608301876127be565b61299460808301866127be565b81810360a08301526129a7818486612490565b905098975050505050505050565b600060c0820190506129ca600083018861242e565b81810360208301526129dc81876124bd565b90506129eb60408301866127be565b6129f860608301856127be565b612a0560808301846127be565b81810360a0830152612a16816126b9565b90509695505050505050565b6000604082019050612a37600083018561242e565b612a4460208301846127be565b9392505050565b6000602082019050612a606000830184612454565b92915050565b60006040820190508181036000830152612a8081866124bd565b90508181036020830152612a95818486612490565b9050949350505050565b6000602082019050612ab46000830184612536565b92915050565b60006020820190508181036000830152612ad48184612545565b905092915050565b60006020820190508181036000830152612af58161257e565b9050919050565b60006020820190508181036000830152612b15816125a1565b9050919050565b60006020820190508181036000830152612b35816125c4565b9050919050565b60006020820190508181036000830152612b55816125e7565b9050919050565b60006020820190508181036000830152612b758161260a565b9050919050565b60006020820190508181036000830152612b958161262d565b9050919050565b60006020820190508181036000830152612bb581612650565b9050919050565b60006020820190508181036000830152612bd581612673565b9050919050565b60006020820190508181036000830152612bf581612696565b9050919050565b60006020820190508181036000830152612c15816126ff565b9050919050565b60006020820190508181036000830152612c3581612722565b9050919050565b60006080820190508181036000830152612c568188612745565b9050612c65602083018761242e565b612c7260408301866127be565b8181036060830152612c85818486612490565b90509695505050505050565b6000602082019050612ca660008301846127be565b92915050565b6000612cb6612cc7565b9050612cc28282612eac565b919050565b6000604051905090565b600067ffffffffffffffff821115612cec57612ceb612f01565b5b612cf582612f62565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000612d656020840184611e89565b905092915050565b60008083356001602003843603038112612d8a57612d89612f58565b5b83810192508235915060208301925067ffffffffffffffff821115612db257612db1612f30565b5b600182023603841315612dc857612dc7612f44565b5b509250929050565b6000612ddf6020840184611f80565b905092915050565b6000612df282612e0f565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612e5182612e2f565b9050919050565b6000612e6382612e39565b9050919050565b82818337600083830152505050565b60005b83811015612e97578082015181840152602081019050612e7c565b83811115612ea6576000848401525b50505050565b612eb582612f62565b810181811067ffffffffffffffff82111715612ed457612ed3612f01565b5b80604052505050565b6000612ee882612eef565b9050919050565b6000612efa82612f73565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b6132a581612de7565b81146132b057600080fd5b50565b6132bc81612df9565b81146132c757600080fd5b50565b6132d381612e05565b81146132de57600080fd5b50565b6132ea81612e2f565b81146132f557600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212208b0e2cd34ca959e4ebb747e668d6b87cf200880d34b89fac5e6539183d9177cf64736f6c63430008070033608060405234801561001057600080fd5b50604051610bcd380380610bcd8339818101604052810190610032919061008d565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610108565b600081519050610087816100f1565b92915050565b6000602082840312156100a3576100a26100ec565b5b60006100b184828501610078565b91505092915050565b60006100c5826100cc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6100fa816100ba565b811461010557600080fd5b50565b610ab6806101176000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b614610062578063a0a1730b14610080575b600080fd5b610060600480360381019061005b91906105fd565b61009c565b005b61006a6102af565b6040516100779190610761565b60405180910390f35b61009a6004803603810190610095919061055e565b6102d3565b005b60008383836040516024016100b39392919061082f565b6040516020818303038152906040527fe04d4f97000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090508473ffffffffffffffffffffffffffffffffffffffff1663095ea7b360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16886040518363ffffffff1660e01b815260040161018d92919061077c565b602060405180830381600087803b1580156101a757600080fd5b505af11580156101bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101df9190610531565b610215576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637993c1e0888888856040518563ffffffff1660e01b815260040161027494939291906107dc565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008383836040516024016102ea9392919061082f565b6040516020818303038152906040527fe04d4f97000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ac7c44c86836040518363ffffffff1660e01b81526004016103c49291906107a5565b600060405180830381600087803b1580156103de57600080fd5b505af11580156103f2573d6000803e3d6000fd5b505050505050505050565b600061041061040b84610892565b61086d565b90508281526020810184848401111561042c5761042b610a1b565b5b610437848285610974565b509392505050565b600061045261044d846108c3565b61086d565b90508281526020810184848401111561046e5761046d610a1b565b5b610479848285610974565b509392505050565b60008135905061049081610a3b565b92915050565b6000813590506104a581610a52565b92915050565b6000815190506104ba81610a52565b92915050565b600082601f8301126104d5576104d4610a16565b5b81356104e58482602086016103fd565b91505092915050565b600082601f83011261050357610502610a16565b5b813561051384826020860161043f565b91505092915050565b60008135905061052b81610a69565b92915050565b60006020828403121561054757610546610a25565b5b6000610555848285016104ab565b91505092915050565b6000806000806080858703121561057857610577610a25565b5b600085013567ffffffffffffffff81111561059657610595610a20565b5b6105a2878288016104c0565b945050602085013567ffffffffffffffff8111156105c3576105c2610a20565b5b6105cf878288016104ee565b93505060406105e08782880161051c565b92505060606105f187828801610496565b91505092959194509250565b60008060008060008060c0878903121561061a57610619610a25565b5b600087013567ffffffffffffffff81111561063857610637610a20565b5b61064489828a016104c0565b965050602061065589828a0161051c565b955050604061066689828a01610481565b945050606087013567ffffffffffffffff81111561068757610686610a20565b5b61069389828a016104ee565b93505060806106a489828a0161051c565b92505060a06106b589828a01610496565b9150509295509295509295565b6106cb8161092c565b82525050565b6106da8161093e565b82525050565b60006106eb826108f4565b6106f5818561090a565b9350610705818560208601610983565b61070e81610a2a565b840191505092915050565b6000610724826108ff565b61072e818561091b565b935061073e818560208601610983565b61074781610a2a565b840191505092915050565b61075b8161096a565b82525050565b600060208201905061077660008301846106c2565b92915050565b600060408201905061079160008301856106c2565b61079e6020830184610752565b9392505050565b600060408201905081810360008301526107bf81856106e0565b905081810360208301526107d381846106e0565b90509392505050565b600060808201905081810360008301526107f681876106e0565b90506108056020830186610752565b61081260408301856106c2565b818103606083015261082481846106e0565b905095945050505050565b600060608201905081810360008301526108498186610719565b90506108586020830185610752565b61086560408301846106d1565b949350505050565b6000610877610888565b905061088382826109b6565b919050565b6000604051905090565b600067ffffffffffffffff8211156108ad576108ac6109e7565b5b6108b682610a2a565b9050602081019050919050565b600067ffffffffffffffff8211156108de576108dd6109e7565b5b6108e782610a2a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006109378261094a565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156109a1578082015181840152602081019050610986565b838111156109b0576000848401525b50505050565b6109bf82610a2a565b810181811067ffffffffffffffff821117156109de576109dd6109e7565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b610a448161092c565b8114610a4f57600080fd5b50565b610a5b8161093e565b8114610a6657600080fd5b50565b610a728161096a565b8114610a7d57600080fd5b5056fea264697066735822122047394ff599eddfa076b2235d0fd5a7dbfc57b711a64fc8cf9215f4568c2a7f7b64736f6c6343000807003360806040523480156200001157600080fd5b50604051620010d7380380620010d7833981810160405281019062000037919062000146565b82600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f80699e81136d69cb8367ad52a994e25c722a86da654b561d0c14b61a777e7ac560405160405180910390a1505050620001f5565b6000815190506200014081620001db565b92915050565b600080600060608486031215620001625762000161620001d6565b5b600062000172868287016200012f565b935050602062000185868287016200012f565b925050604062000198868287016200012f565b9150509250925092565b6000620001af82620001b6565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b620001e681620001a2565b8114620001f257600080fd5b50565b610ed280620002056000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c806397770dff1161007157806397770dff14610166578063a7cb050714610182578063c63585cc1461019e578063d7fd7afb146101ce578063d936a012146101fe578063ee2815ba1461021c576100a9565b80630be15547146100ae5780633c669d55146100de578063513a9c05146100fa578063569541b91461012a578063842da36d14610148575b600080fd5b6100c860048036038101906100c3919061094d565b610238565b6040516100d59190610bce565b60405180910390f35b6100f860048036038101906100f39190610898565b61026b565b005b610114600480360381019061010f919061094d565b6103b8565b6040516101219190610bce565b60405180910390f35b6101326103eb565b60405161013f9190610bce565b60405180910390f35b610150610411565b60405161015d9190610bce565b60405180910390f35b610180600480360381019061017b9190610818565b610437565b005b61019c600480360381019061019791906109ba565b6104d4565b005b6101b860048036038101906101b39190610845565b610528565b6040516101c59190610bce565b60405180910390f35b6101e860048036038101906101e3919061094d565b61059a565b6040516101f59190610c67565b60405180910390f35b6102066105b2565b6040516102139190610bce565b60405180910390f35b6102366004803603810190610231919061097a565b6105d8565b005b60016020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060405180606001604052806040518060200160405280600081525081526020013373ffffffffffffffffffffffffffffffffffffffff1681526020014681525090508473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb87866040518363ffffffff1660e01b81526004016102ea929190610be9565b602060405180830381600087803b15801561030457600080fd5b505af1158015610318573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061033c9190610920565b508573ffffffffffffffffffffffffffffffffffffffff1663de43156e82878787876040518663ffffffff1660e01b815260040161037e959493929190610c12565b600060405180830381600087803b15801561039857600080fd5b505af11580156103ac573d6000803e3d6000fd5b50505050505050505050565b60026020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b80600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fdba79d534382d1a8ae108e4c8ecb27c6ae42ab8b91d44eedf88bd329f3868d5e600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166040516104c99190610bce565b60405180910390a150565b80600080848152602001908152602001600020819055507f49f492222906ac486c3c1401fa545626df1f0c0e5a77a05597ea2ed66af9850d828260405161051c929190610cab565b60405180910390a15050565b60008060006105378585610667565b9150915085828260405160200161054f929190610b60565b60405160208183030381529060405280519060200120604051602001610576929190610b8c565b6040516020818303038152906040528051906020012060001c925050509392505050565b60006020528060005260406000206000915090505481565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b806001600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd1b36d30f6248e97c473b4d1348ca164a4ef6759022f54a58ec200326c39c45d828260405161065b929190610c82565b60405180910390a15050565b6000808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156106d0576040517fcb1e7cfe00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161061070a57828461070d565b83835b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561077c576040517f78b507da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9250929050565b60008135905061079281610e57565b92915050565b6000815190506107a781610e6e565b92915050565b60008083601f8401126107c3576107c2610dd3565b5b8235905067ffffffffffffffff8111156107e0576107df610dce565b5b6020830191508360018202830111156107fc576107fb610dd8565b5b9250929050565b60008135905061081281610e85565b92915050565b60006020828403121561082e5761082d610de2565b5b600061083c84828501610783565b91505092915050565b60008060006060848603121561085e5761085d610de2565b5b600061086c86828701610783565b935050602061087d86828701610783565b925050604061088e86828701610783565b9150509250925092565b6000806000806000608086880312156108b4576108b3610de2565b5b60006108c288828901610783565b95505060206108d388828901610783565b94505060406108e488828901610803565b935050606086013567ffffffffffffffff81111561090557610904610ddd565b5b610911888289016107ad565b92509250509295509295909350565b60006020828403121561093657610935610de2565b5b600061094484828501610798565b91505092915050565b60006020828403121561096357610962610de2565b5b600061097184828501610803565b91505092915050565b6000806040838503121561099157610990610de2565b5b600061099f85828601610803565b92505060206109b085828601610783565b9150509250929050565b600080604083850312156109d1576109d0610de2565b5b60006109df85828601610803565b92505060206109f085828601610803565b9150509250929050565b610a0381610d0c565b82525050565b610a1281610d0c565b82525050565b610a29610a2482610d0c565b610da0565b82525050565b610a40610a3b82610d2a565b610db2565b82525050565b6000610a528385610cf0565b9350610a5f838584610d5e565b610a6883610de7565b840190509392505050565b6000610a7e82610cd4565b610a888185610cdf565b9350610a98818560208601610d6d565b610aa181610de7565b840191505092915050565b6000610ab9602083610d01565b9150610ac482610e05565b602082019050919050565b6000610adc600183610d01565b9150610ae782610e2e565b600182019050919050565b60006060830160008301518482036000860152610b0f8282610a73565b9150506020830151610b2460208601826109fa565b506040830151610b376040860182610b42565b508091505092915050565b610b4b81610d54565b82525050565b610b5a81610d54565b82525050565b6000610b6c8285610a18565b601482019150610b7c8284610a18565b6014820191508190509392505050565b6000610b9782610acf565b9150610ba38285610a18565b601482019150610bb38284610a2f565b602082019150610bc282610aac565b91508190509392505050565b6000602082019050610be36000830184610a09565b92915050565b6000604082019050610bfe6000830185610a09565b610c0b6020830184610b51565b9392505050565b60006080820190508181036000830152610c2c8188610af2565b9050610c3b6020830187610a09565b610c486040830186610b51565b8181036060830152610c5b818486610a46565b90509695505050505050565b6000602082019050610c7c6000830184610b51565b92915050565b6000604082019050610c976000830185610b51565b610ca46020830184610a09565b9392505050565b6000604082019050610cc06000830185610b51565b610ccd6020830184610b51565b9392505050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b6000610d1782610d34565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015610d8b578082015181840152602081019050610d70565b83811115610d9a576000848401525b50505050565b6000610dab82610dbc565b9050919050565b6000819050919050565b6000610dc782610df8565b9050919050565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f600082015250565b7fff00000000000000000000000000000000000000000000000000000000000000600082015250565b610e6081610d0c565b8114610e6b57600080fd5b50565b610e7781610d1e565b8114610e8257600080fd5b50565b610e8e81610d54565b8114610e9957600080fd5b5056fea2646970667358221220fc7ae99de1eb543fc941c22b053bacc8edc14f929260909668ffd15cbad6fbfb64736f6c6343000807003360c06040523480156200001157600080fd5b506040516200282d3803806200282d83398181016040528101906200003791906200035b565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614620000b1576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8760079080519060200190620000c9929190620001d1565b508660089080519060200190620000e2929190620001d1565b5085600960006101000a81548160ff021916908360ff16021790555084608081815250508360028111156200011c576200011b620005ae565b5b60a0816002811115620001345762000133620005ae565b5b60f81b8152505082600281905550816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050505050505050620006bf565b828054620001df9062000542565b90600052602060002090601f0160209004810192826200020357600085556200024f565b82601f106200021e57805160ff19168380011785556200024f565b828001600101855582156200024f579182015b828111156200024e57825182559160200191906001019062000231565b5b5090506200025e919062000262565b5090565b5b808211156200027d57600081600090555060010162000263565b5090565b60006200029862000292846200048b565b62000462565b905082815260208101848484011115620002b757620002b662000640565b5b620002c48482856200050c565b509392505050565b600081519050620002dd8162000660565b92915050565b600081519050620002f4816200067a565b92915050565b600082601f8301126200031257620003116200063b565b5b81516200032484826020860162000281565b91505092915050565b6000815190506200033e816200068b565b92915050565b6000815190506200035581620006a5565b92915050565b600080600080600080600080610100898b0312156200037f576200037e6200064a565b5b600089015167ffffffffffffffff811115620003a0576200039f62000645565b5b620003ae8b828c01620002fa565b985050602089015167ffffffffffffffff811115620003d257620003d162000645565b5b620003e08b828c01620002fa565b9750506040620003f38b828c0162000344565b9650506060620004068b828c016200032d565b9550506080620004198b828c01620002e3565b94505060a06200042c8b828c016200032d565b93505060c06200043f8b828c01620002cc565b92505060e0620004528b828c01620002cc565b9150509295985092959890939650565b60006200046e62000481565b90506200047c828262000578565b919050565b6000604051905090565b600067ffffffffffffffff821115620004a957620004a86200060c565b5b620004b4826200064f565b9050602081019050919050565b6000620004ce82620004d5565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b838110156200052c5780820151818401526020810190506200050f565b838111156200053c576000848401525b50505050565b600060028204905060018216806200055b57607f821691505b60208210811415620005725762000571620005dd565b5b50919050565b62000583826200064f565b810181811067ffffffffffffffff82111715620005a557620005a46200060c565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b6200066b81620004c1565b81146200067757600080fd5b50565b600381106200068857600080fd5b50565b6200069681620004f5565b8114620006a257600080fd5b50565b620006b081620004ff565b8114620006bc57600080fd5b50565b60805160a05160f81c612137620006f660003960006109580152600081816108a201528181610c250152610d5a01526121376000f3fe608060405234801561001057600080fd5b506004361061014d5760003560e01c806385e1f4d0116100c3578063d9eeebed1161007c578063d9eeebed146103cc578063dd62ed3e146103eb578063e2f535b81461041b578063eddeb12314610439578063f2441b3214610455578063f687d12a146104735761014d565b806385e1f4d0146102f657806395d89b4114610314578063a3413d0314610332578063a9059cbb14610350578063c701262614610380578063c835d7cc146103b05761014d565b8063313ce56711610115578063313ce5671461020c5780633ce4a5bc1461022a57806342966c681461024857806347e7ef24146102785780634d8943bb146102a857806370a08231146102c65761014d565b806306fdde0314610152578063091d278814610170578063095ea7b31461018e57806318160ddd146101be57806323b872dd146101dc575b600080fd5b61015a61048f565b6040516101679190611cad565b60405180910390f35b610178610521565b6040516101859190611ccf565b60405180910390f35b6101a860048036038101906101a3919061196e565b610527565b6040516101b59190611bfb565b60405180910390f35b6101c6610545565b6040516101d39190611ccf565b60405180910390f35b6101f660048036038101906101f1919061191b565b61054f565b6040516102039190611bfb565b60405180910390f35b610214610647565b6040516102219190611cea565b60405180910390f35b61023261065e565b60405161023f9190611b80565b60405180910390f35b610262600480360381019061025d9190611a37565b610676565b60405161026f9190611bfb565b60405180910390f35b610292600480360381019061028d919061196e565b61068b565b60405161029f9190611bfb565b60405180910390f35b6102b0610851565b6040516102bd9190611ccf565b60405180910390f35b6102e060048036038101906102db9190611881565b610857565b6040516102ed9190611ccf565b60405180910390f35b6102fe6108a0565b60405161030b9190611ccf565b60405180910390f35b61031c6108c4565b6040516103299190611cad565b60405180910390f35b61033a610956565b6040516103479190611c92565b60405180910390f35b61036a6004803603810190610365919061196e565b61097a565b6040516103779190611bfb565b60405180910390f35b61039a600480360381019061039591906119db565b610998565b6040516103a79190611bfb565b60405180910390f35b6103ca60048036038101906103c59190611881565b610aee565b005b6103d4610be1565b6040516103e2929190611bd2565b60405180910390f35b610405600480360381019061040091906118db565b610e4e565b6040516104129190611ccf565b60405180910390f35b610423610ed5565b6040516104309190611b80565b60405180910390f35b610453600480360381019061044e9190611a37565b610efb565b005b61045d610fb5565b60405161046a9190611b80565b60405180910390f35b61048d60048036038101906104889190611a37565b610fd9565b005b60606007805461049e90611f33565b80601f01602080910402602001604051908101604052809291908181526020018280546104ca90611f33565b80156105175780601f106104ec57610100808354040283529160200191610517565b820191906000526020600020905b8154815290600101906020018083116104fa57829003601f168201915b5050505050905090565b60025481565b600061053b610534611093565b848461109b565b6001905092915050565b6000600654905090565b600061055c848484611254565b6000600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006105a7611093565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561061e576040517f10bad14700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61063b8561062a611093565b85846106369190611e43565b61109b565b60019150509392505050565b6000600960009054906101000a900460ff16905090565b73735b14bb79463307aacbed86daf3322b1e6226ab81565b600061068233836114b0565b60019050919050565b600073735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614158015610729575060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b80156107835750600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614155b156107ba576040517fddb5de5e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6107c48383611668565b8273ffffffffffffffffffffffffffffffffffffffff167f67fc7bdaed5b0ec550d8706b87d60568ab70c6b781263c70101d54cd1564aab373735b14bb79463307aacbed86daf3322b1e6226ab6040516020016108219190611b65565b6040516020818303038152906040528460405161083f929190611c16565b60405180910390a26001905092915050565b60035481565b6000600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b7f000000000000000000000000000000000000000000000000000000000000000081565b6060600880546108d390611f33565b80601f01602080910402602001604051908101604052809291908181526020018280546108ff90611f33565b801561094c5780601f106109215761010080835404028352916020019161094c565b820191906000526020600020905b81548152906001019060200180831161092f57829003601f168201915b5050505050905090565b7f000000000000000000000000000000000000000000000000000000000000000081565b600061098e610987611093565b8484611254565b6001905092915050565b60008060006109a5610be1565b915091508173ffffffffffffffffffffffffffffffffffffffff166323b872dd3373735b14bb79463307aacbed86daf3322b1e6226ab846040518463ffffffff1660e01b81526004016109fa93929190611b9b565b602060405180830381600087803b158015610a1457600080fd5b505af1158015610a28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4c91906119ae565b610a82576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a8c33856114b0565b3373ffffffffffffffffffffffffffffffffffffffff167f9ffbffc04a397460ee1dbe8c9503e098090567d6b7f4b3c02a8617d800b6d955868684600354604051610ada9493929190611c46565b60405180910390a260019250505092915050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b67576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fd55614e962c5fd6ece71614f6348d702468a997a394dd5e5c1677950226d97ae81604051610bd69190611b80565b60405180910390a150565b60008060008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630be155477f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401610c609190611ccf565b60206040518083038186803b158015610c7857600080fd5b505afa158015610c8c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb091906118ae565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610d19576040517f78fff39600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d7fd7afb7f00000000000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401610d959190611ccf565b60206040518083038186803b158015610dad57600080fd5b505afa158015610dc1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610de59190611a64565b90506000811415610e22576040517fe661aed000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060035460025483610e359190611de9565b610e3f9190611d93565b90508281945094505050509091565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610f74576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806003819055507fef13af88e424b5d15f49c77758542c1938b08b8b95b91ed0751f98ba99000d8f81604051610faa9190611ccf565b60405180910390a150565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611052576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b806002819055507fff5788270f43bfc1ca41c503606d2594aa3023a1a7547de403a3e2f146a4a80a816040516110889190611ccf565b60405180910390a150565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611102576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611169576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516112479190611ccf565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112bb576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611322576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156113a0576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81816113ac9190611e43565b600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461143e9190611d93565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114a29190611ccf565b60405180910390a350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611517576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611595576040517ffe382aa700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b81816115a19190611e43565b600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600660008282546115f69190611e43565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161165b9190611ccf565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116cf576040517fd92e233d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600660008282546116e19190611d93565b9250508190555080600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117379190611d93565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161179c9190611ccf565b60405180910390a35050565b60006117bb6117b684611d2a565b611d05565b9050828152602081018484840111156117d7576117d661207b565b5b6117e2848285611ef1565b509392505050565b6000813590506117f9816120bc565b92915050565b60008151905061180e816120bc565b92915050565b600081519050611823816120d3565b92915050565b600082601f83011261183e5761183d612076565b5b813561184e8482602086016117a8565b91505092915050565b600081359050611866816120ea565b92915050565b60008151905061187b816120ea565b92915050565b60006020828403121561189757611896612085565b5b60006118a5848285016117ea565b91505092915050565b6000602082840312156118c4576118c3612085565b5b60006118d2848285016117ff565b91505092915050565b600080604083850312156118f2576118f1612085565b5b6000611900858286016117ea565b9250506020611911858286016117ea565b9150509250929050565b60008060006060848603121561193457611933612085565b5b6000611942868287016117ea565b9350506020611953868287016117ea565b925050604061196486828701611857565b9150509250925092565b6000806040838503121561198557611984612085565b5b6000611993858286016117ea565b92505060206119a485828601611857565b9150509250929050565b6000602082840312156119c4576119c3612085565b5b60006119d284828501611814565b91505092915050565b600080604083850312156119f2576119f1612085565b5b600083013567ffffffffffffffff811115611a1057611a0f612080565b5b611a1c85828601611829565b9250506020611a2d85828601611857565b9150509250929050565b600060208284031215611a4d57611a4c612085565b5b6000611a5b84828501611857565b91505092915050565b600060208284031215611a7a57611a79612085565b5b6000611a888482850161186c565b91505092915050565b611a9a81611e77565b82525050565b611ab1611aac82611e77565b611f96565b82525050565b611ac081611e89565b82525050565b6000611ad182611d5b565b611adb8185611d71565b9350611aeb818560208601611f00565b611af48161208a565b840191505092915050565b611b0881611edf565b82525050565b6000611b1982611d66565b611b238185611d82565b9350611b33818560208601611f00565b611b3c8161208a565b840191505092915050565b611b5081611ec8565b82525050565b611b5f81611ed2565b82525050565b6000611b718284611aa0565b60148201915081905092915050565b6000602082019050611b956000830184611a91565b92915050565b6000606082019050611bb06000830186611a91565b611bbd6020830185611a91565b611bca6040830184611b47565b949350505050565b6000604082019050611be76000830185611a91565b611bf46020830184611b47565b9392505050565b6000602082019050611c106000830184611ab7565b92915050565b60006040820190508181036000830152611c308185611ac6565b9050611c3f6020830184611b47565b9392505050565b60006080820190508181036000830152611c608187611ac6565b9050611c6f6020830186611b47565b611c7c6040830185611b47565b611c896060830184611b47565b95945050505050565b6000602082019050611ca76000830184611aff565b92915050565b60006020820190508181036000830152611cc78184611b0e565b905092915050565b6000602082019050611ce46000830184611b47565b92915050565b6000602082019050611cff6000830184611b56565b92915050565b6000611d0f611d20565b9050611d1b8282611f65565b919050565b6000604051905090565b600067ffffffffffffffff821115611d4557611d44612047565b5b611d4e8261208a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000611d9e82611ec8565b9150611da983611ec8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611dde57611ddd611fba565b5b828201905092915050565b6000611df482611ec8565b9150611dff83611ec8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615611e3857611e37611fba565b5b828202905092915050565b6000611e4e82611ec8565b9150611e5983611ec8565b925082821015611e6c57611e6b611fba565b5b828203905092915050565b6000611e8282611ea8565b9050919050565b60008115159050919050565b6000819050611ea3826120a8565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000611eea82611e95565b9050919050565b82818337600083830152505050565b60005b83811015611f1e578082015181840152602081019050611f03565b83811115611f2d576000848401525b50505050565b60006002820490506001821680611f4b57607f821691505b60208210811415611f5f57611f5e612018565b5b50919050565b611f6e8261208a565b810181811067ffffffffffffffff82111715611f8d57611f8c612047565b5b80604052505050565b6000611fa182611fa8565b9050919050565b6000611fb38261209b565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b600381106120b9576120b8611fe9565b5b50565b6120c581611e77565b81146120d057600080fd5b50565b6120dc81611e89565b81146120e757600080fd5b50565b6120f381611ec8565b81146120fe57600080fd5b5056fea26469706673582212206982505c1a546edfb86a1aaaca0ad6b7e5542f2d1f24ac30a032805fc80a650e64736f6c63430008070033a2646970667358221220dcca5c678ec92955f311699a854d5639dccde9c1aa0ebf30189c176992cac83264736f6c63430008070033"; type GatewayEVMZEVMTestConstructorParams = | [signer?: Signer] diff --git a/typechain-types/factories/contracts/prototypes/zevm/GatewayZEVM__factory.ts b/typechain-types/factories/contracts/prototypes/zevm/GatewayZEVM__factory.ts index 2e4bc8ac..b862dc50 100644 --- a/typechain-types/factories/contracts/prototypes/zevm/GatewayZEVM__factory.ts +++ b/typechain-types/factories/contracts/prototypes/zevm/GatewayZEVM__factory.ts @@ -20,6 +20,11 @@ const _abi = [ name: "CallerIsNotFungibleModule", type: "error", }, + { + inputs: [], + name: "FailedZetaSent", + type: "error", + }, { inputs: [], name: "GasFeeTransferFailed", @@ -35,6 +40,11 @@ const _abi = [ name: "InvalidTarget", type: "error", }, + { + inputs: [], + name: "WZETATransferFailed", + type: "error", + }, { inputs: [], name: "WithdrawalFailed", @@ -161,6 +171,12 @@ const _abi = [ name: "from", type: "address", }, + { + indexed: false, + internalType: "address", + name: "zrc20", + type: "address", + }, { indexed: false, internalType: "bytes", @@ -350,7 +366,13 @@ const _abi = [ type: "function", }, { - inputs: [], + inputs: [ + { + internalType: "address", + name: "_wzeta", + type: "address", + }, + ], name: "initialize", outputs: [], stateMutability: "nonpayable", @@ -456,6 +478,37 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + ], + name: "withdraw", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, + { + inputs: [ + { + internalType: "uint256", + name: "amount", + type: "uint256", + }, + { + internalType: "bytes", + name: "message", + type: "bytes", + }, + ], + name: "withdrawAndCall", + outputs: [], + stateMutability: "nonpayable", + type: "function", + }, { inputs: [ { @@ -484,10 +537,23 @@ const _abi = [ stateMutability: "nonpayable", type: "function", }, + { + inputs: [], + name: "wzeta", + outputs: [ + { + internalType: "address", + name: "", + type: "address", + }, + ], + stateMutability: "view", + type: "function", + }, ] as const; const _bytecode = - "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152503480156200004757600080fd5b50620000586200005e60201b60201c565b62000208565b600060019054906101000a900460ff1615620000b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a8906200015c565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff1614620001225760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff6040516200011991906200017e565b60405180910390a15b565b6000620001336027836200019b565b91506200014082620001b9565b604082019050919050565b6200015681620001ac565b82525050565b60006020820190508181036000830152620001778162000124565b9050919050565b60006020820190506200019560008301846200014b565b92915050565b600082825260208201905092915050565b600060ff82169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60805160601c612c726200024360003960008181610433015281816104c2015281816105d40152818161066301526107130152612c726000f3fe6080604052600436106100dd5760003560e01c80637993c1e01161007f578063bcf7f32b11610059578063bcf7f32b14610251578063c39aca371461027a578063f2fde38b146102a3578063f45346dc146102cc576100dd565b80637993c1e0146101e65780638129fc1c1461020f5780638da5cb5b14610226576100dd565b80633ce4a5bc116100bb5780633ce4a5bc1461015d5780634f1ef2861461018857806352d1902d146101a4578063715018a6146101cf576100dd565b80630ac7c44c146100e2578063135390f91461010b5780633659cfe614610134575b600080fd5b3480156100ee57600080fd5b5061010960048036038101906101049190611c80565b6102f5565b005b34801561011757600080fd5b50610132600480360381019061012d9190611cfc565b61034c565b005b34801561014057600080fd5b5061015b60048036038101906101569190611b0a565b610431565b005b34801561016957600080fd5b506101726105ba565b60405161017f919061226e565b60405180910390f35b6101a2600480360381019061019d9190611b37565b6105d2565b005b3480156101b057600080fd5b506101b961070f565b6040516101c691906122e9565b60405180910390f35b3480156101db57600080fd5b506101e46107c8565b005b3480156101f257600080fd5b5061020d60048036038101906102089190611d6b565b6107dc565b005b34801561021b57600080fd5b506102246108c7565b005b34801561023257600080fd5b5061023b610a0d565b604051610248919061226e565b60405180910390f35b34801561025d57600080fd5b5061027860048036038101906102739190611e0f565b610a37565b005b34801561028657600080fd5b506102a1600480360381019061029c9190611e0f565b610b2b565b005b3480156102af57600080fd5b506102ca60048036038101906102c59190611b0a565b610d5d565b005b3480156102d857600080fd5b506102f360048036038101906102ee9190611bd3565b610de1565b005b3373ffffffffffffffffffffffffffffffffffffffff167f2b5af078ce280d812dc2241658dc5435c93408020e5418eef55a2b536de51c0f84848460405161033f93929190612304565b60405180910390a2505050565b60006103588383610f9d565b90503373ffffffffffffffffffffffffffffffffffffffff167f1866ad2994816c79f4103e1eddacc7b085eb7c635205243a28940be69b01536d8585848673ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156103db57600080fd5b505afa1580156103ef573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104139190611ec5565b60405161042394939291906123a0565b60405180910390a250505050565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614156104c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b79061245c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166104ff61128d565b73ffffffffffffffffffffffffffffffffffffffff1614610555576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161054c9061247c565b60405180910390fd5b61055e816112e4565b6105b781600067ffffffffffffffff81111561057d5761057c61282b565b5b6040519080825280601f01601f1916602001820160405280156105af5781602001600182028036833780820191505090505b5060006112ef565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab81565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161415610661576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106589061245c565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166106a061128d565b73ffffffffffffffffffffffffffffffffffffffff16146106f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106ed9061247c565b60405180910390fd5b6106ff826112e4565b61070b828260016112ef565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161461079f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107969061249c565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b6107d061146c565b6107da60006114ea565b565b60006107e88585610f9d565b90503373ffffffffffffffffffffffffffffffffffffffff167f1866ad2994816c79f4103e1eddacc7b085eb7c635205243a28940be69b01536d8787848873ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b15801561086b57600080fd5b505afa15801561087f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108a39190611ec5565b88886040516108b79695949392919061233d565b60405180910390a2505050505050565b60008060019054906101000a900460ff161590508080156108f85750600160008054906101000a900460ff1660ff16105b806109255750610907306115b0565b1580156109245750600160008054906101000a900460ff1660ff16145b5b610964576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095b906124dc565b60405180910390fd5b60016000806101000a81548160ff021916908360ff16021790555080156109a1576001600060016101000a81548160ff0219169083151502179055505b6109a96115d3565b6109b161162c565b8015610a0a5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610a0191906123ff565b60405180910390a15b50565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ab0576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b8152600401610af195949392919061259c565b600060405180830381600087803b158015610b0b57600080fd5b505af1158015610b1f573d6000803e3d6000fd5b50505050505050505050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ba4576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610c1d57503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610c54576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166347e7ef2484866040518363ffffffff1660e01b8152600401610c8f9291906122c0565b602060405180830381600087803b158015610ca957600080fd5b505af1158015610cbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce19190611c26565b508273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b8152600401610d2395949392919061259c565b600060405180830381600087803b158015610d3d57600080fd5b505af1158015610d51573d6000803e3d6000fd5b50505050505050505050565b610d6561146c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcc9061243c565b60405180910390fd5b610dde816114ea565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e5a576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161480610ed357503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b15610f0a576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166347e7ef2482846040518363ffffffff1660e01b8152600401610f459291906122c0565b602060405180830381600087803b158015610f5f57600080fd5b505af1158015610f73573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f979190611c26565b50505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1663d9eeebed6040518163ffffffff1660e01b8152600401604080518083038186803b158015610fe757600080fd5b505afa158015610ffb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061101f9190611b93565b915091508173ffffffffffffffffffffffffffffffffffffffff166323b872dd3373735b14bb79463307aacbed86daf3322b1e6226ab846040518463ffffffff1660e01b815260040161107493929190612289565b602060405180830381600087803b15801561108e57600080fd5b505af11580156110a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110c69190611c26565b6110fc576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff1660e01b815260040161113993929190612289565b602060405180830381600087803b15801561115357600080fd5b505af1158015611167573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118b9190611c26565b6111c1576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166342966c68866040518263ffffffff1660e01b81526004016111fa91906125f1565b602060405180830381600087803b15801561121457600080fd5b505af1158015611228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061124c9190611c26565b611282576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b809250505092915050565b60006112bb7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61167d565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6112ec61146c565b50565b61131b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611687565b60000160009054906101000a900460ff161561133f5761133a83611691565b611467565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561138557600080fd5b505afa9250505080156113b657506040513d601f19601f820116820180604052508101906113b39190611c53565b60015b6113f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ec906124fc565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b811461145a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611451906124bc565b60405180910390fd5b5061146683838361174a565b5b505050565b611474611776565b73ffffffffffffffffffffffffffffffffffffffff16611492610a0d565b73ffffffffffffffffffffffffffffffffffffffff16146114e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114df9061253c565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611622576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116199061257c565b60405180910390fd5b61162a61177e565b565b600060019054906101000a900460ff1661167b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116729061257c565b60405180910390fd5b565b6000819050919050565b6000819050919050565b61169a816115b0565b6116d9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116d09061251c565b60405180910390fd5b806117067f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b61167d565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611753836117df565b6000825111806117605750805b156117715761176f838361182e565b505b505050565b600033905090565b600060019054906101000a900460ff166117cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117c49061257c565b60405180910390fd5b6117dd6117d8611776565b6114ea565b565b6117e881611691565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b60606118538383604051806060016040528060278152602001612c166027913961185b565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff16856040516118859190612257565b600060405180830381855af49150503d80600081146118c0576040519150601f19603f3d011682016040523d82523d6000602084013e6118c5565b606091505b50915091506118d6868383876118e1565b925050509392505050565b606083156119445760008351141561193c576118fc856115b0565b61193b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119329061255c565b60405180910390fd5b5b82905061194f565b61194e8383611957565b5b949350505050565b60008251111561196a5781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199e919061241a565b60405180910390fd5b60006119ba6119b584612631565b61260c565b9050828152602081018484840111156119d6576119d5612878565b5b6119e18482856127b8565b509392505050565b6000813590506119f881612bb9565b92915050565b600081519050611a0d81612bb9565b92915050565b600081519050611a2281612bd0565b92915050565b600081519050611a3781612be7565b92915050565b60008083601f840112611a5357611a52612864565b5b8235905067ffffffffffffffff811115611a7057611a6f61285f565b5b602083019150836001820283011115611a8c57611a8b612873565b5b9250929050565b600082601f830112611aa857611aa7612864565b5b8135611ab88482602086016119a7565b91505092915050565b600060608284031215611ad757611ad6612869565b5b81905092915050565b600081359050611aef81612bfe565b92915050565b600081519050611b0481612bfe565b92915050565b600060208284031215611b2057611b1f612887565b5b6000611b2e848285016119e9565b91505092915050565b60008060408385031215611b4e57611b4d612887565b5b6000611b5c858286016119e9565b925050602083013567ffffffffffffffff811115611b7d57611b7c61287d565b5b611b8985828601611a93565b9150509250929050565b60008060408385031215611baa57611ba9612887565b5b6000611bb8858286016119fe565b9250506020611bc985828601611af5565b9150509250929050565b600080600060608486031215611bec57611beb612887565b5b6000611bfa868287016119e9565b9350506020611c0b86828701611ae0565b9250506040611c1c868287016119e9565b9150509250925092565b600060208284031215611c3c57611c3b612887565b5b6000611c4a84828501611a13565b91505092915050565b600060208284031215611c6957611c68612887565b5b6000611c7784828501611a28565b91505092915050565b600080600060408486031215611c9957611c98612887565b5b600084013567ffffffffffffffff811115611cb757611cb661287d565b5b611cc386828701611a93565b935050602084013567ffffffffffffffff811115611ce457611ce361287d565b5b611cf086828701611a3d565b92509250509250925092565b600080600060608486031215611d1557611d14612887565b5b600084013567ffffffffffffffff811115611d3357611d3261287d565b5b611d3f86828701611a93565b9350506020611d5086828701611ae0565b9250506040611d61868287016119e9565b9150509250925092565b600080600080600060808688031215611d8757611d86612887565b5b600086013567ffffffffffffffff811115611da557611da461287d565b5b611db188828901611a93565b9550506020611dc288828901611ae0565b9450506040611dd3888289016119e9565b935050606086013567ffffffffffffffff811115611df457611df361287d565b5b611e0088828901611a3d565b92509250509295509295909350565b60008060008060008060a08789031215611e2c57611e2b612887565b5b600087013567ffffffffffffffff811115611e4a57611e4961287d565b5b611e5689828a01611ac1565b9650506020611e6789828a016119e9565b9550506040611e7889828a01611ae0565b9450506060611e8989828a016119e9565b935050608087013567ffffffffffffffff811115611eaa57611ea961287d565b5b611eb689828a01611a3d565b92509250509295509295509295565b600060208284031215611edb57611eda612887565b5b6000611ee984828501611af5565b91505092915050565b611efb81612747565b82525050565b611f0a81612747565b82525050565b611f1981612765565b82525050565b6000611f2b8385612678565b9350611f388385846127b8565b611f418361288c565b840190509392505050565b6000611f588385612689565b9350611f658385846127b8565b611f6e8361288c565b840190509392505050565b6000611f8482612662565b611f8e8185612689565b9350611f9e8185602086016127c7565b611fa78161288c565b840191505092915050565b6000611fbd82612662565b611fc7818561269a565b9350611fd78185602086016127c7565b80840191505092915050565b611fec816127a6565b82525050565b6000611ffd8261266d565b61200781856126a5565b93506120178185602086016127c7565b6120208161288c565b840191505092915050565b60006120386026836126a5565b91506120438261289d565b604082019050919050565b600061205b602c836126a5565b9150612066826128ec565b604082019050919050565b600061207e602c836126a5565b91506120898261293b565b604082019050919050565b60006120a16038836126a5565b91506120ac8261298a565b604082019050919050565b60006120c46029836126a5565b91506120cf826129d9565b604082019050919050565b60006120e7602e836126a5565b91506120f282612a28565b604082019050919050565b600061210a602e836126a5565b915061211582612a77565b604082019050919050565b600061212d602d836126a5565b915061213882612ac6565b604082019050919050565b60006121506020836126a5565b915061215b82612b15565b602082019050919050565b6000612173600083612689565b915061217e82612b3e565b600082019050919050565b6000612196601d836126a5565b91506121a182612b41565b602082019050919050565b60006121b9602b836126a5565b91506121c482612b6a565b604082019050919050565b6000606083016121e260008401846126cd565b85830360008701526121f5838284611f1f565b9250505061220660208401846126b6565b6122136020860182611ef2565b506122216040840184612730565b61222e6040860182612239565b508091505092915050565b6122428161278f565b82525050565b6122518161278f565b82525050565b60006122638284611fb2565b915081905092915050565b60006020820190506122836000830184611f01565b92915050565b600060608201905061229e6000830186611f01565b6122ab6020830185611f01565b6122b86040830184612248565b949350505050565b60006040820190506122d56000830185611f01565b6122e26020830184612248565b9392505050565b60006020820190506122fe6000830184611f10565b92915050565b6000604082019050818103600083015261231e8186611f79565b90508181036020830152612333818486611f4c565b9050949350505050565b600060a08201905081810360008301526123578189611f79565b90506123666020830188612248565b6123736040830187612248565b6123806060830186612248565b8181036080830152612393818486611f4c565b9050979650505050505050565b600060a08201905081810360008301526123ba8187611f79565b90506123c96020830186612248565b6123d66040830185612248565b6123e36060830184612248565b81810360808301526123f481612166565b905095945050505050565b60006020820190506124146000830184611fe3565b92915050565b600060208201905081810360008301526124348184611ff2565b905092915050565b600060208201905081810360008301526124558161202b565b9050919050565b600060208201905081810360008301526124758161204e565b9050919050565b6000602082019050818103600083015261249581612071565b9050919050565b600060208201905081810360008301526124b581612094565b9050919050565b600060208201905081810360008301526124d5816120b7565b9050919050565b600060208201905081810360008301526124f5816120da565b9050919050565b60006020820190508181036000830152612515816120fd565b9050919050565b6000602082019050818103600083015261253581612120565b9050919050565b6000602082019050818103600083015261255581612143565b9050919050565b6000602082019050818103600083015261257581612189565b9050919050565b60006020820190508181036000830152612595816121ac565b9050919050565b600060808201905081810360008301526125b681886121cf565b90506125c56020830187611f01565b6125d26040830186612248565b81810360608301526125e5818486611f4c565b90509695505050505050565b60006020820190506126066000830184612248565b92915050565b6000612616612627565b905061262282826127fa565b919050565b6000604051905090565b600067ffffffffffffffff82111561264c5761264b61282b565b5b6126558261288c565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b60006126c560208401846119e9565b905092915050565b600080833560016020038436030381126126ea576126e9612882565b5b83810192508235915060208301925067ffffffffffffffff8211156127125761271161285a565b5b6001820236038413156127285761272761286e565b5b509250929050565b600061273f6020840184611ae0565b905092915050565b60006127528261276f565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006127b182612799565b9050919050565b82818337600083830152505050565b60005b838110156127e55780820151818401526020810190506127ca565b838111156127f4576000848401525b50505050565b6128038261288c565b810181811067ffffffffffffffff821117156128225761282161282b565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b612bc281612747565b8114612bcd57600080fd5b50565b612bd981612759565b8114612be457600080fd5b50565b612bf081612765565b8114612bfb57600080fd5b50565b612c078161278f565b8114612c1257600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220627eb039ecb52d09fd70ebde1f5eca61fe0f91321a96929ebe38dc8e38d999ab64736f6c63430008070033"; + "0x60a06040523073ffffffffffffffffffffffffffffffffffffffff1660809073ffffffffffffffffffffffffffffffffffffffff1660601b8152503480156200004757600080fd5b50620000586200005e60201b60201c565b62000208565b600060019054906101000a900460ff1615620000b1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620000a8906200015c565b60405180910390fd5b60ff801660008054906101000a900460ff1660ff1614620001225760ff6000806101000a81548160ff021916908360ff1602179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860ff6040516200011991906200017e565b60405180910390a15b565b6000620001336027836200019b565b91506200014082620001b9565b604082019050919050565b6200015681620001ac565b82525050565b60006020820190508181036000830152620001778162000124565b9050919050565b60006020820190506200019560008301846200014b565b92915050565b600082825260208201905092915050565b600060ff82169050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320696e69746960008201527f616c697a696e6700000000000000000000000000000000000000000000000000602082015250565b60805160601c613355620002436000396000818161063e015281816106cd015281816107df0152818161086e015261091e01526133556000f3fe6080604052600436106100fd5760003560e01c806352d1902d11610095578063bcf7f32b11610064578063bcf7f32b146102d7578063c39aca3714610300578063c4d66de814610329578063f2fde38b14610352578063f45346dc1461037b576100fd565b806352d1902d14610241578063715018a61461026c5780637993c1e0146102835780638da5cb5b146102ac576100fd565b80632e1a7d4d116100d15780632e1a7d4d146101a85780633659cfe6146101d15780633ce4a5bc146101fa5780634f1ef28614610225576100fd565b8062173d46146101025780630ac7c44c1461012d578063135390f914610156578063267e75a01461017f575b600080fd5b34801561010e57600080fd5b506101176103a4565b6040516101249190612814565b60405180910390f35b34801561013957600080fd5b50610154600480360381019061014f9190612120565b6103ca565b005b34801561016257600080fd5b5061017d6004803603810190610178919061219c565b610421565b005b34801561018b57600080fd5b506101a660048036038101906101a191906123bf565b610508565b005b3480156101b457600080fd5b506101cf60048036038101906101ca9190612365565b6105a5565b005b3480156101dd57600080fd5b506101f860048036038101906101f39190611faa565b61063c565b005b34801561020657600080fd5b5061020f6107c5565b60405161021c9190612814565b60405180910390f35b61023f600480360381019061023a9190611fd7565b6107dd565b005b34801561024d57600080fd5b5061025661091a565b6040516102639190612a4b565b60405180910390f35b34801561027857600080fd5b506102816109d3565b005b34801561028f57600080fd5b506102aa60048036038101906102a5919061220b565b6109e7565b005b3480156102b857600080fd5b506102c1610ad4565b6040516102ce9190612814565b60405180910390f35b3480156102e357600080fd5b506102fe60048036038101906102f991906122af565b610afe565b005b34801561030c57600080fd5b50610327600480360381019061032291906122af565b610bf2565b005b34801561033557600080fd5b50610350600480360381019061034b9190611faa565b610e24565b005b34801561035e57600080fd5b5061037960048036038101906103749190611faa565b610fce565b005b34801561038757600080fd5b506103a2600480360381019061039d9190612073565b611052565b005b60c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff167f2b5af078ce280d812dc2241658dc5435c93408020e5418eef55a2b536de51c0f84848460405161041493929190612a66565b60405180910390a2505050565b600061042d838361120e565b90503373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716838686858773ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104b157600080fd5b505afa1580156104c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104e99190612392565b6040516104fa9594939291906129b5565b60405180910390a250505050565b610511836114fe565b3373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716600073735b14bb79463307aacbed86daf3322b1e6226ab60405160200161057091906127cd565b6040516020818303038152906040528660008088886040516105989796959493929190612866565b60405180910390a2505050565b6105ae816114fe565b3373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716600073735b14bb79463307aacbed86daf3322b1e6226ab60405160200161060d91906127cd565b604051602081830303815290604052846000806040516106319594939291906128d7565b60405180910390a250565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff1614156106cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106c290612afc565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff1661070a61172d565b73ffffffffffffffffffffffffffffffffffffffff1614610760576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075790612b1c565b60405180910390fd5b61076981611784565b6107c281600067ffffffffffffffff81111561078857610787612f01565b5b6040519080825280601f01601f1916602001820160405280156107ba5781602001600182028036833780820191505090505b50600061178f565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab81565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16141561086c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086390612afc565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff166108ab61172d565b73ffffffffffffffffffffffffffffffffffffffff1614610901576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f890612b1c565b60405180910390fd5b61090a82611784565b6109168282600161178f565b5050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff16146109aa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109a190612b3c565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b905090565b6109db61190c565b6109e5600061198a565b565b60006109f3858561120e565b90503373ffffffffffffffffffffffffffffffffffffffff167f2265ce9ec38ea098a1143406678482665a6e1ccd82ab22d37eea3a78abc57716858888858973ffffffffffffffffffffffffffffffffffffffff16634d8943bb6040518163ffffffff1660e01b815260040160206040518083038186803b158015610a7757600080fd5b505afa158015610a8b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aaf9190612392565b8989604051610ac49796959493929190612944565b60405180910390a2505050505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610b77576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b8152600401610bb8959493929190612c3c565b600060405180830381600087803b158015610bd257600080fd5b505af1158015610be6573d6000803e3d6000fd5b50505050505050505050565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c6b576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161480610ce457503073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16145b15610d1b576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff166347e7ef2484866040518363ffffffff1660e01b8152600401610d56929190612a22565b602060405180830381600087803b158015610d7057600080fd5b505af1158015610d84573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610da891906120c6565b508273ffffffffffffffffffffffffffffffffffffffff1663de43156e87878786866040518663ffffffff1660e01b8152600401610dea959493929190612c3c565b600060405180830381600087803b158015610e0457600080fd5b505af1158015610e18573d6000803e3d6000fd5b50505050505050505050565b60008060019054906101000a900460ff16159050808015610e555750600160008054906101000a900460ff1660ff16105b80610e825750610e6430611a50565b158015610e815750600160008054906101000a900460ff1660ff16145b5b610ec1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb890612b7c565b60405180910390fd5b60016000806101000a81548160ff021916908360ff1602179055508015610efe576001600060016101000a81548160ff0219169083151502179055505b610f06611a73565b610f0e611acc565b60c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660c960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508015610fca5760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024986001604051610fc19190612a9f565b60405180910390a15b5050565b610fd661190c565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103d90612adc565b60405180910390fd5b61104f8161198a565b50565b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146110cb576040517f2b2add3d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b73735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16148061114457503073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16145b1561117b576040517f82d5d76a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff166347e7ef2482846040518363ffffffff1660e01b81526004016111b6929190612a22565b602060405180830381600087803b1580156111d057600080fd5b505af11580156111e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061120891906120c6565b50505050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1663d9eeebed6040518163ffffffff1660e01b8152600401604080518083038186803b15801561125857600080fd5b505afa15801561126c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112909190612033565b915091508173ffffffffffffffffffffffffffffffffffffffff166323b872dd3373735b14bb79463307aacbed86daf3322b1e6226ab846040518463ffffffff1660e01b81526004016112e59392919061282f565b602060405180830381600087803b1580156112ff57600080fd5b505af1158015611313573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061133791906120c6565b61136d576040517f0a7cd6d600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166323b872dd3330886040518463ffffffff1660e01b81526004016113aa9392919061282f565b602060405180830381600087803b1580156113c457600080fd5b505af11580156113d8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fc91906120c6565b611432576040517f4dd9ee8d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff166342966c68866040518263ffffffff1660e01b815260040161146b9190612c91565b602060405180830381600087803b15801561148557600080fd5b505af1158015611499573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114bd91906120c6565b6114f3576040517f2c77e05c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b809250505092915050565b60c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166323b872dd3330846040518463ffffffff1660e01b815260040161155d9392919061282f565b602060405180830381600087803b15801561157757600080fd5b505af115801561158b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115af91906120c6565b6115e5576040517fa8c6fd4a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60c960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b81526004016116409190612c91565b600060405180830381600087803b15801561165a57600080fd5b505af115801561166e573d6000803e3d6000fd5b50505050600073735b14bb79463307aacbed86daf3322b1e6226ab73ffffffffffffffffffffffffffffffffffffffff16826040516116ac906127ff565b60006040518083038185875af1925050503d80600081146116e9576040519150601f19603f3d011682016040523d82523d6000602084013e6116ee565b606091505b5050905080611729576040517fc7ffc47b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5050565b600061175b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611b1d565b60000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61178c61190c565b50565b6117bb7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd914360001b611b27565b60000160009054906101000a900460ff16156117df576117da83611b31565b611907565b8273ffffffffffffffffffffffffffffffffffffffff166352d1902d6040518163ffffffff1660e01b815260040160206040518083038186803b15801561182557600080fd5b505afa92505050801561185657506040513d601f19601f8201168201806040525081019061185391906120f3565b60015b611895576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188c90612b9c565b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b81146118fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f190612b5c565b60405180910390fd5b50611906838383611bea565b5b505050565b611914611c16565b73ffffffffffffffffffffffffffffffffffffffff16611932610ad4565b73ffffffffffffffffffffffffffffffffffffffff1614611988576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161197f90612bdc565b60405180910390fd5b565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff16611ac2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab990612c1c565b60405180910390fd5b611aca611c1e565b565b600060019054906101000a900460ff16611b1b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b1290612c1c565b60405180910390fd5b565b6000819050919050565b6000819050919050565b611b3a81611a50565b611b79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7090612bbc565b60405180910390fd5b80611ba67f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b611b1d565b60000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b611bf383611c7f565b600082511180611c005750805b15611c1157611c0f8383611cce565b505b505050565b600033905090565b600060019054906101000a900460ff16611c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6490612c1c565b60405180910390fd5b611c7d611c78611c16565b61198a565b565b611c8881611b31565b8073ffffffffffffffffffffffffffffffffffffffff167fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b60405160405180910390a250565b6060611cf383836040518060600160405280602781526020016132f960279139611cfb565b905092915050565b60606000808573ffffffffffffffffffffffffffffffffffffffff1685604051611d2591906127e8565b600060405180830381855af49150503d8060008114611d60576040519150601f19603f3d011682016040523d82523d6000602084013e611d65565b606091505b5091509150611d7686838387611d81565b925050509392505050565b60608315611de457600083511415611ddc57611d9c85611a50565b611ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd290612bfc565b60405180910390fd5b5b829050611def565b611dee8383611df7565b5b949350505050565b600082511115611e0a5781518083602001fd5b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e3e9190612aba565b60405180910390fd5b6000611e5a611e5584612cd1565b612cac565b905082815260208101848484011115611e7657611e75612f4e565b5b611e81848285612e6a565b509392505050565b600081359050611e988161329c565b92915050565b600081519050611ead8161329c565b92915050565b600081519050611ec2816132b3565b92915050565b600081519050611ed7816132ca565b92915050565b60008083601f840112611ef357611ef2612f3a565b5b8235905067ffffffffffffffff811115611f1057611f0f612f35565b5b602083019150836001820283011115611f2c57611f2b612f49565b5b9250929050565b600082601f830112611f4857611f47612f3a565b5b8135611f58848260208601611e47565b91505092915050565b600060608284031215611f7757611f76612f3f565b5b81905092915050565b600081359050611f8f816132e1565b92915050565b600081519050611fa4816132e1565b92915050565b600060208284031215611fc057611fbf612f5d565b5b6000611fce84828501611e89565b91505092915050565b60008060408385031215611fee57611fed612f5d565b5b6000611ffc85828601611e89565b925050602083013567ffffffffffffffff81111561201d5761201c612f53565b5b61202985828601611f33565b9150509250929050565b6000806040838503121561204a57612049612f5d565b5b600061205885828601611e9e565b925050602061206985828601611f95565b9150509250929050565b60008060006060848603121561208c5761208b612f5d565b5b600061209a86828701611e89565b93505060206120ab86828701611f80565b92505060406120bc86828701611e89565b9150509250925092565b6000602082840312156120dc576120db612f5d565b5b60006120ea84828501611eb3565b91505092915050565b60006020828403121561210957612108612f5d565b5b600061211784828501611ec8565b91505092915050565b60008060006040848603121561213957612138612f5d565b5b600084013567ffffffffffffffff81111561215757612156612f53565b5b61216386828701611f33565b935050602084013567ffffffffffffffff81111561218457612183612f53565b5b61219086828701611edd565b92509250509250925092565b6000806000606084860312156121b5576121b4612f5d565b5b600084013567ffffffffffffffff8111156121d3576121d2612f53565b5b6121df86828701611f33565b93505060206121f086828701611f80565b925050604061220186828701611e89565b9150509250925092565b60008060008060006080868803121561222757612226612f5d565b5b600086013567ffffffffffffffff81111561224557612244612f53565b5b61225188828901611f33565b955050602061226288828901611f80565b945050604061227388828901611e89565b935050606086013567ffffffffffffffff81111561229457612293612f53565b5b6122a088828901611edd565b92509250509295509295909350565b60008060008060008060a087890312156122cc576122cb612f5d565b5b600087013567ffffffffffffffff8111156122ea576122e9612f53565b5b6122f689828a01611f61565b965050602061230789828a01611e89565b955050604061231889828a01611f80565b945050606061232989828a01611e89565b935050608087013567ffffffffffffffff81111561234a57612349612f53565b5b61235689828a01611edd565b92509250509295509295509295565b60006020828403121561237b5761237a612f5d565b5b600061238984828501611f80565b91505092915050565b6000602082840312156123a8576123a7612f5d565b5b60006123b684828501611f95565b91505092915050565b6000806000604084860312156123d8576123d7612f5d565b5b60006123e686828701611f80565b935050602084013567ffffffffffffffff81111561240757612406612f53565b5b61241386828701611edd565b92509250509250925092565b61242881612de7565b82525050565b61243781612de7565b82525050565b61244e61244982612de7565b612edd565b82525050565b61245d81612e05565b82525050565b600061246f8385612d18565b935061247c838584612e6a565b61248583612f62565b840190509392505050565b600061249c8385612d29565b93506124a9838584612e6a565b6124b283612f62565b840190509392505050565b60006124c882612d02565b6124d28185612d29565b93506124e2818560208601612e79565b6124eb81612f62565b840191505092915050565b600061250182612d02565b61250b8185612d3a565b935061251b818560208601612e79565b80840191505092915050565b61253081612e46565b82525050565b61253f81612e58565b82525050565b600061255082612d0d565b61255a8185612d45565b935061256a818560208601612e79565b61257381612f62565b840191505092915050565b600061258b602683612d45565b915061259682612f80565b604082019050919050565b60006125ae602c83612d45565b91506125b982612fcf565b604082019050919050565b60006125d1602c83612d45565b91506125dc8261301e565b604082019050919050565b60006125f4603883612d45565b91506125ff8261306d565b604082019050919050565b6000612617602983612d45565b9150612622826130bc565b604082019050919050565b600061263a602e83612d45565b91506126458261310b565b604082019050919050565b600061265d602e83612d45565b91506126688261315a565b604082019050919050565b6000612680602d83612d45565b915061268b826131a9565b604082019050919050565b60006126a3602083612d45565b91506126ae826131f8565b602082019050919050565b60006126c6600083612d29565b91506126d182613221565b600082019050919050565b60006126e9600083612d3a565b91506126f482613221565b600082019050919050565b600061270c601d83612d45565b915061271782613224565b602082019050919050565b600061272f602b83612d45565b915061273a8261324d565b604082019050919050565b6000606083016127586000840184612d6d565b858303600087015261276b838284612463565b9250505061277c6020840184612d56565b612789602086018261241f565b506127976040840184612dd0565b6127a460408601826127af565b508091505092915050565b6127b881612e2f565b82525050565b6127c781612e2f565b82525050565b60006127d9828461243d565b60148201915081905092915050565b60006127f482846124f6565b915081905092915050565b600061280a826126dc565b9150819050919050565b6000602082019050612829600083018461242e565b92915050565b6000606082019050612844600083018661242e565b612851602083018561242e565b61285e60408301846127be565b949350505050565b600060c08201905061287b600083018a61242e565b818103602083015261288d81896124bd565b905061289c60408301886127be565b6128a96060830187612527565b6128b66080830186612527565b81810360a08301526128c9818486612490565b905098975050505050505050565b600060c0820190506128ec600083018861242e565b81810360208301526128fe81876124bd565b905061290d60408301866127be565b61291a6060830185612527565b6129276080830184612527565b81810360a0830152612938816126b9565b90509695505050505050565b600060c082019050612959600083018a61242e565b818103602083015261296b81896124bd565b905061297a60408301886127be565b61298760608301876127be565b61299460808301866127be565b81810360a08301526129a7818486612490565b905098975050505050505050565b600060c0820190506129ca600083018861242e565b81810360208301526129dc81876124bd565b90506129eb60408301866127be565b6129f860608301856127be565b612a0560808301846127be565b81810360a0830152612a16816126b9565b90509695505050505050565b6000604082019050612a37600083018561242e565b612a4460208301846127be565b9392505050565b6000602082019050612a606000830184612454565b92915050565b60006040820190508181036000830152612a8081866124bd565b90508181036020830152612a95818486612490565b9050949350505050565b6000602082019050612ab46000830184612536565b92915050565b60006020820190508181036000830152612ad48184612545565b905092915050565b60006020820190508181036000830152612af58161257e565b9050919050565b60006020820190508181036000830152612b15816125a1565b9050919050565b60006020820190508181036000830152612b35816125c4565b9050919050565b60006020820190508181036000830152612b55816125e7565b9050919050565b60006020820190508181036000830152612b758161260a565b9050919050565b60006020820190508181036000830152612b958161262d565b9050919050565b60006020820190508181036000830152612bb581612650565b9050919050565b60006020820190508181036000830152612bd581612673565b9050919050565b60006020820190508181036000830152612bf581612696565b9050919050565b60006020820190508181036000830152612c15816126ff565b9050919050565b60006020820190508181036000830152612c3581612722565b9050919050565b60006080820190508181036000830152612c568188612745565b9050612c65602083018761242e565b612c7260408301866127be565b8181036060830152612c85818486612490565b90509695505050505050565b6000602082019050612ca660008301846127be565b92915050565b6000612cb6612cc7565b9050612cc28282612eac565b919050565b6000604051905090565b600067ffffffffffffffff821115612cec57612ceb612f01565b5b612cf582612f62565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000612d656020840184611e89565b905092915050565b60008083356001602003843603038112612d8a57612d89612f58565b5b83810192508235915060208301925067ffffffffffffffff821115612db257612db1612f30565b5b600182023603841315612dc857612dc7612f44565b5b509250929050565b6000612ddf6020840184611f80565b905092915050565b6000612df282612e0f565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000612e5182612e2f565b9050919050565b6000612e6382612e39565b9050919050565b82818337600083830152505050565b60005b83811015612e97578082015181840152602081019050612e7c565b83811115612ea6576000848401525b50505050565b612eb582612f62565b810181811067ffffffffffffffff82111715612ed457612ed3612f01565b5b80604052505050565b6000612ee882612eef565b9050919050565b6000612efa82612f73565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f64656c656761746563616c6c0000000000000000000000000000000000000000602082015250565b7f46756e6374696f6e206d7573742062652063616c6c6564207468726f7567682060008201527f6163746976652070726f78790000000000000000000000000000000000000000602082015250565b7f555550535570677261646561626c653a206d757374206e6f742062652063616c60008201527f6c6564207468726f7567682064656c656761746563616c6c0000000000000000602082015250565b7f45524331393637557067726164653a20756e737570706f727465642070726f7860008201527f6961626c65555549440000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f45524331393637557067726164653a206e657720696d706c656d656e7461746960008201527f6f6e206973206e6f742055555053000000000000000000000000000000000000602082015250565b7f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60008201527f6f74206120636f6e747261637400000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b50565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b6132a581612de7565b81146132b057600080fd5b50565b6132bc81612df9565b81146132c757600080fd5b50565b6132d381612e05565b81146132de57600080fd5b50565b6132ea81612e2f565b81146132f557600080fd5b5056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a26469706673582212208b0e2cd34ca959e4ebb747e668d6b87cf200880d34b89fac5e6539183d9177cf64736f6c63430008070033"; type GatewayZEVMConstructorParams = | [signer?: Signer] diff --git a/typechain-types/factories/contracts/prototypes/zevm/SenderZEVM__factory.ts b/typechain-types/factories/contracts/prototypes/zevm/SenderZEVM__factory.ts index 3742ffc2..577b6ab6 100644 --- a/typechain-types/factories/contracts/prototypes/zevm/SenderZEVM__factory.ts +++ b/typechain-types/factories/contracts/prototypes/zevm/SenderZEVM__factory.ts @@ -108,7 +108,7 @@ const _abi = [ ] as const; const _bytecode = - "0x608060405234801561001057600080fd5b50604051610bcd380380610bcd8339818101604052810190610032919061008d565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610108565b600081519050610087816100f1565b92915050565b6000602082840312156100a3576100a26100ec565b5b60006100b184828501610078565b91505092915050565b60006100c5826100cc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6100fa816100ba565b811461010557600080fd5b50565b610ab6806101176000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b614610062578063a0a1730b14610080575b600080fd5b610060600480360381019061005b91906105fd565b61009c565b005b61006a6102af565b6040516100779190610761565b60405180910390f35b61009a6004803603810190610095919061055e565b6102d3565b005b60008383836040516024016100b39392919061082f565b6040516020818303038152906040527fe04d4f97000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090508473ffffffffffffffffffffffffffffffffffffffff1663095ea7b360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16886040518363ffffffff1660e01b815260040161018d92919061077c565b602060405180830381600087803b1580156101a757600080fd5b505af11580156101bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101df9190610531565b610215576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637993c1e0888888856040518563ffffffff1660e01b815260040161027494939291906107dc565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008383836040516024016102ea9392919061082f565b6040516020818303038152906040527fe04d4f97000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ac7c44c86836040518363ffffffff1660e01b81526004016103c49291906107a5565b600060405180830381600087803b1580156103de57600080fd5b505af11580156103f2573d6000803e3d6000fd5b505050505050505050565b600061041061040b84610892565b61086d565b90508281526020810184848401111561042c5761042b610a1b565b5b610437848285610974565b509392505050565b600061045261044d846108c3565b61086d565b90508281526020810184848401111561046e5761046d610a1b565b5b610479848285610974565b509392505050565b60008135905061049081610a3b565b92915050565b6000813590506104a581610a52565b92915050565b6000815190506104ba81610a52565b92915050565b600082601f8301126104d5576104d4610a16565b5b81356104e58482602086016103fd565b91505092915050565b600082601f83011261050357610502610a16565b5b813561051384826020860161043f565b91505092915050565b60008135905061052b81610a69565b92915050565b60006020828403121561054757610546610a25565b5b6000610555848285016104ab565b91505092915050565b6000806000806080858703121561057857610577610a25565b5b600085013567ffffffffffffffff81111561059657610595610a20565b5b6105a2878288016104c0565b945050602085013567ffffffffffffffff8111156105c3576105c2610a20565b5b6105cf878288016104ee565b93505060406105e08782880161051c565b92505060606105f187828801610496565b91505092959194509250565b60008060008060008060c0878903121561061a57610619610a25565b5b600087013567ffffffffffffffff81111561063857610637610a20565b5b61064489828a016104c0565b965050602061065589828a0161051c565b955050604061066689828a01610481565b945050606087013567ffffffffffffffff81111561068757610686610a20565b5b61069389828a016104ee565b93505060806106a489828a0161051c565b92505060a06106b589828a01610496565b9150509295509295509295565b6106cb8161092c565b82525050565b6106da8161093e565b82525050565b60006106eb826108f4565b6106f5818561090a565b9350610705818560208601610983565b61070e81610a2a565b840191505092915050565b6000610724826108ff565b61072e818561091b565b935061073e818560208601610983565b61074781610a2a565b840191505092915050565b61075b8161096a565b82525050565b600060208201905061077660008301846106c2565b92915050565b600060408201905061079160008301856106c2565b61079e6020830184610752565b9392505050565b600060408201905081810360008301526107bf81856106e0565b905081810360208301526107d381846106e0565b90509392505050565b600060808201905081810360008301526107f681876106e0565b90506108056020830186610752565b61081260408301856106c2565b818103606083015261082481846106e0565b905095945050505050565b600060608201905081810360008301526108498186610719565b90506108586020830185610752565b61086560408301846106d1565b949350505050565b6000610877610888565b905061088382826109b6565b919050565b6000604051905090565b600067ffffffffffffffff8211156108ad576108ac6109e7565b5b6108b682610a2a565b9050602081019050919050565b600067ffffffffffffffff8211156108de576108dd6109e7565b5b6108e782610a2a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006109378261094a565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156109a1578082015181840152602081019050610986565b838111156109b0576000848401525b50505050565b6109bf82610a2a565b810181811067ffffffffffffffff821117156109de576109dd6109e7565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b610a448161092c565b8114610a4f57600080fd5b50565b610a5b8161093e565b8114610a6657600080fd5b50565b610a728161096a565b8114610a7d57600080fd5b5056fea2646970667358221220192b4e23b9b6daaae9f30fb00f65433e56a5d8a6906223e4fbd169def800a8a264736f6c63430008070033"; + "0x608060405234801561001057600080fd5b50604051610bcd380380610bcd8339818101604052810190610032919061008d565b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050610108565b600081519050610087816100f1565b92915050565b6000602082840312156100a3576100a26100ec565b5b60006100b184828501610078565b91505092915050565b60006100c5826100cc565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b6100fa816100ba565b811461010557600080fd5b50565b610ab6806101176000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80630abd890514610046578063116191b614610062578063a0a1730b14610080575b600080fd5b610060600480360381019061005b91906105fd565b61009c565b005b61006a6102af565b6040516100779190610761565b60405180910390f35b61009a6004803603810190610095919061055e565b6102d3565b005b60008383836040516024016100b39392919061082f565b6040516020818303038152906040527fe04d4f97000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff838183161783525050505090508473ffffffffffffffffffffffffffffffffffffffff1663095ea7b360008054906101000a900473ffffffffffffffffffffffffffffffffffffffff16886040518363ffffffff1660e01b815260040161018d92919061077c565b602060405180830381600087803b1580156101a757600080fd5b505af11580156101bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101df9190610531565b610215576040517f8164f84200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16637993c1e0888888856040518563ffffffff1660e01b815260040161027494939291906107dc565b600060405180830381600087803b15801561028e57600080fd5b505af11580156102a2573d6000803e3d6000fd5b5050505050505050505050565b60008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008383836040516024016102ea9392919061082f565b6040516020818303038152906040527fe04d4f97000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050905060008054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630ac7c44c86836040518363ffffffff1660e01b81526004016103c49291906107a5565b600060405180830381600087803b1580156103de57600080fd5b505af11580156103f2573d6000803e3d6000fd5b505050505050505050565b600061041061040b84610892565b61086d565b90508281526020810184848401111561042c5761042b610a1b565b5b610437848285610974565b509392505050565b600061045261044d846108c3565b61086d565b90508281526020810184848401111561046e5761046d610a1b565b5b610479848285610974565b509392505050565b60008135905061049081610a3b565b92915050565b6000813590506104a581610a52565b92915050565b6000815190506104ba81610a52565b92915050565b600082601f8301126104d5576104d4610a16565b5b81356104e58482602086016103fd565b91505092915050565b600082601f83011261050357610502610a16565b5b813561051384826020860161043f565b91505092915050565b60008135905061052b81610a69565b92915050565b60006020828403121561054757610546610a25565b5b6000610555848285016104ab565b91505092915050565b6000806000806080858703121561057857610577610a25565b5b600085013567ffffffffffffffff81111561059657610595610a20565b5b6105a2878288016104c0565b945050602085013567ffffffffffffffff8111156105c3576105c2610a20565b5b6105cf878288016104ee565b93505060406105e08782880161051c565b92505060606105f187828801610496565b91505092959194509250565b60008060008060008060c0878903121561061a57610619610a25565b5b600087013567ffffffffffffffff81111561063857610637610a20565b5b61064489828a016104c0565b965050602061065589828a0161051c565b955050604061066689828a01610481565b945050606087013567ffffffffffffffff81111561068757610686610a20565b5b61069389828a016104ee565b93505060806106a489828a0161051c565b92505060a06106b589828a01610496565b9150509295509295509295565b6106cb8161092c565b82525050565b6106da8161093e565b82525050565b60006106eb826108f4565b6106f5818561090a565b9350610705818560208601610983565b61070e81610a2a565b840191505092915050565b6000610724826108ff565b61072e818561091b565b935061073e818560208601610983565b61074781610a2a565b840191505092915050565b61075b8161096a565b82525050565b600060208201905061077660008301846106c2565b92915050565b600060408201905061079160008301856106c2565b61079e6020830184610752565b9392505050565b600060408201905081810360008301526107bf81856106e0565b905081810360208301526107d381846106e0565b90509392505050565b600060808201905081810360008301526107f681876106e0565b90506108056020830186610752565b61081260408301856106c2565b818103606083015261082481846106e0565b905095945050505050565b600060608201905081810360008301526108498186610719565b90506108586020830185610752565b61086560408301846106d1565b949350505050565b6000610877610888565b905061088382826109b6565b919050565b6000604051905090565b600067ffffffffffffffff8211156108ad576108ac6109e7565b5b6108b682610a2a565b9050602081019050919050565b600067ffffffffffffffff8211156108de576108dd6109e7565b5b6108e782610a2a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b60006109378261094a565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156109a1578082015181840152602081019050610986565b838111156109b0576000848401525b50505050565b6109bf82610a2a565b810181811067ffffffffffffffff821117156109de576109dd6109e7565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b610a448161092c565b8114610a4f57600080fd5b50565b610a5b8161093e565b8114610a6657600080fd5b50565b610a728161096a565b8114610a7d57600080fd5b5056fea264697066735822122047394ff599eddfa076b2235d0fd5a7dbfc57b711a64fc8cf9215f4568c2a7f7b64736f6c63430008070033"; type SenderZEVMConstructorParams = | [signer?: Signer] diff --git a/typechain-types/factories/contracts/prototypes/zevm/interfaces.sol/IGatewayZEVMErrors__factory.ts b/typechain-types/factories/contracts/prototypes/zevm/interfaces.sol/IGatewayZEVMErrors__factory.ts index f912a171..9240eeb0 100644 --- a/typechain-types/factories/contracts/prototypes/zevm/interfaces.sol/IGatewayZEVMErrors__factory.ts +++ b/typechain-types/factories/contracts/prototypes/zevm/interfaces.sol/IGatewayZEVMErrors__factory.ts @@ -15,6 +15,11 @@ const _abi = [ name: "CallerIsNotFungibleModule", type: "error", }, + { + inputs: [], + name: "FailedZetaSent", + type: "error", + }, { inputs: [], name: "GasFeeTransferFailed", @@ -30,6 +35,11 @@ const _abi = [ name: "InvalidTarget", type: "error", }, + { + inputs: [], + name: "WZETATransferFailed", + type: "error", + }, { inputs: [], name: "WithdrawalFailed", diff --git a/typechain-types/factories/contracts/prototypes/zevm/interfaces.sol/IGatewayZEVMEvents__factory.ts b/typechain-types/factories/contracts/prototypes/zevm/interfaces.sol/IGatewayZEVMEvents__factory.ts index 1ad08445..2c3a8834 100644 --- a/typechain-types/factories/contracts/prototypes/zevm/interfaces.sol/IGatewayZEVMEvents__factory.ts +++ b/typechain-types/factories/contracts/prototypes/zevm/interfaces.sol/IGatewayZEVMEvents__factory.ts @@ -44,6 +44,12 @@ const _abi = [ name: "from", type: "address", }, + { + indexed: false, + internalType: "address", + name: "zrc20", + type: "address", + }, { indexed: false, internalType: "bytes",