@bitriel/governance
Version:
On-chain DAO governance for Bitriel Protocol
665 lines • 80.9 kB
JSON
{
"_format": "hh-sol-artifact-1",
"contractName": "BitrielToken",
"sourceName": "contracts/BitrielToken.sol",
"abi": [
{
"inputs": [],
"stateMutability": "nonpayable",
"type": "constructor"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Approval",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "delegator",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "fromDelegate",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "toDelegate",
"type": "address"
}
],
"name": "DelegateChanged",
"type": "event"
},
{
"anonymous": false,
"inputs": [
{
"indexed": true,
"internalType": "address",
"name": "delegate",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "previousBalance",
"type": "uint256"
},
{
"indexed": false,
"internalType": "uint256",
"name": "newBalance",
"type": "uint256"
}
],
"name": "DelegateVotesChanged",
"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": "from",
"type": "address"
},
{
"indexed": true,
"internalType": "address",
"name": "to",
"type": "address"
},
{
"indexed": false,
"internalType": "uint256",
"name": "value",
"type": "uint256"
}
],
"name": "Transfer",
"type": "event"
},
{
"inputs": [],
"name": "DOMAIN_SEPARATOR",
"outputs": [
{
"internalType": "bytes32",
"name": "",
"type": "bytes32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "spender",
"type": "address"
}
],
"name": "allowance",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "approve",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "balanceOf",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "uint32",
"name": "pos",
"type": "uint32"
}
],
"name": "checkpoints",
"outputs": [
{
"components": [
{
"internalType": "uint32",
"name": "fromBlock",
"type": "uint32"
},
{
"internalType": "uint224",
"name": "votes",
"type": "uint224"
}
],
"internalType": "struct ERC20Votes.Checkpoint",
"name": "",
"type": "tuple"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "decimals",
"outputs": [
{
"internalType": "uint8",
"name": "",
"type": "uint8"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "subtractedValue",
"type": "uint256"
}
],
"name": "decreaseAllowance",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "delegatee",
"type": "address"
}
],
"name": "delegate",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "delegatee",
"type": "address"
},
{
"internalType": "uint256",
"name": "nonce",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "expiry",
"type": "uint256"
},
{
"internalType": "uint8",
"name": "v",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "r",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "s",
"type": "bytes32"
}
],
"name": "delegateBySig",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "delegates",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "uint256",
"name": "blockNumber",
"type": "uint256"
}
],
"name": "getPastTotalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
},
{
"internalType": "uint256",
"name": "blockNumber",
"type": "uint256"
}
],
"name": "getPastVotes",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "getVotes",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "addedValue",
"type": "uint256"
}
],
"name": "increaseAllowance",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "_to",
"type": "address"
},
{
"internalType": "uint256",
"name": "_amount",
"type": "uint256"
}
],
"name": "mint",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "name",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
}
],
"name": "nonces",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "account",
"type": "address"
}
],
"name": "numCheckpoints",
"outputs": [
{
"internalType": "uint32",
"name": "",
"type": "uint32"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "owner",
"outputs": [
{
"internalType": "address",
"name": "",
"type": "address"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "owner",
"type": "address"
},
{
"internalType": "address",
"name": "spender",
"type": "address"
},
{
"internalType": "uint256",
"name": "value",
"type": "uint256"
},
{
"internalType": "uint256",
"name": "deadline",
"type": "uint256"
},
{
"internalType": "uint8",
"name": "v",
"type": "uint8"
},
{
"internalType": "bytes32",
"name": "r",
"type": "bytes32"
},
{
"internalType": "bytes32",
"name": "s",
"type": "bytes32"
}
],
"name": "permit",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "renounceOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [],
"name": "symbol",
"outputs": [
{
"internalType": "string",
"name": "",
"type": "string"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [],
"name": "totalSupply",
"outputs": [
{
"internalType": "uint256",
"name": "",
"type": "uint256"
}
],
"stateMutability": "view",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "transfer",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "from",
"type": "address"
},
{
"internalType": "address",
"name": "to",
"type": "address"
},
{
"internalType": "uint256",
"name": "amount",
"type": "uint256"
}
],
"name": "transferFrom",
"outputs": [
{
"internalType": "bool",
"name": "",
"type": "bool"
}
],
"stateMutability": "nonpayable",
"type": "function"
},
{
"inputs": [
{
"internalType": "address",
"name": "newOwner",
"type": "address"
}
],
"name": "transferOwnership",
"outputs": [],
"stateMutability": "nonpayable",
"type": "function"
}
],
"bytecode": "0x6101606040527f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9610140908152503480156200003a57600080fd5b506040518060400160405280600781526020017f4269747269656c00000000000000000000000000000000000000000000000000815250806040518060400160405280600181526020017f31000000000000000000000000000000000000000000000000000000000000008152506040518060400160405280600781526020017f4269747269656c000000000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f425452000000000000000000000000000000000000000000000000000000000081525081600390805190602001906200012c9291906200032e565b508060049080519060200190620001459291906200032e565b50505060008280519060200120905060008280519060200120905060007f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f90508260e081815250508161010081815250504660a08181525050620001b18184846200022460201b60201c565b608081815250503073ffffffffffffffffffffffffffffffffffffffff1660c08173ffffffffffffffffffffffffffffffffffffffff1660601b815250508061012081815250505050505050506200021e620002126200026060201b60201c565b6200026860201b60201c565b6200051b565b600083838346306040516020016200024195949392919062000411565b6040516020818303038152906040528051906020012090509392505050565b600033905090565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200033c90620004b6565b90600052602060002090601f016020900481019282620003605760008555620003ac565b82601f106200037b57805160ff1916838001178555620003ac565b82800160010185558215620003ac579182015b82811115620003ab5782518255916020019190600101906200038e565b5b509050620003bb9190620003bf565b5090565b5b80821115620003da576000816000905550600101620003c0565b5090565b620003e9816200046e565b82525050565b620003fa8162000482565b82525050565b6200040b81620004ac565b82525050565b600060a082019050620004286000830188620003ef565b620004376020830187620003ef565b620004466040830186620003ef565b62000455606083018562000400565b620004646080830184620003de565b9695505050505050565b60006200047b826200048c565b9050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006002820490506001821680620004cf57607f821691505b60208210811415620004e657620004e5620004ec565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60805160a05160c05160601c60e051610100516101205161014051613eac620005796000396000610edd0152600061181b0152600061185d0152600061183c01526000611771015260006117c7015260006117f00152613eac6000f3fe608060405234801561001057600080fd5b506004361061018e5760003560e01c8063715018a6116100de578063a457c2d711610097578063d505accf11610071578063d505accf146104e5578063dd62ed3e14610501578063f1127ed814610531578063f2fde38b146105615761018e565b8063a457c2d714610469578063a9059cbb14610499578063c3cda520146104c95761018e565b8063715018a6146103935780637ecebe001461039d5780638da5cb5b146103cd5780638e539e8c146103eb57806395d89b411461041b5780639ab24eb0146104395761018e565b8063395093511161014b578063587cde1e11610125578063587cde1e146102e75780635c19a95c146103175780636fcfff451461033357806370a08231146103635761018e565b8063395093511461026b5780633a46b1a81461029b57806340c10f19146102cb5761018e565b806306fdde0314610193578063095ea7b3146101b157806318160ddd146101e157806323b872dd146101ff578063313ce5671461022f5780633644e5151461024d575b600080fd5b61019b61057d565b6040516101a8919061328f565b60405180910390f35b6101cb60048036038101906101c69190612b83565b61060f565b6040516101d8919061311b565b60405180910390f35b6101e9610632565b6040516101f6919061358c565b60405180910390f35b61021960048036038101906102149190612a96565b61063c565b604051610226919061311b565b60405180910390f35b61023761066b565b60405161024491906135eb565b60405180910390f35b610255610674565b6040516102629190613136565b60405180910390f35b61028560048036038101906102809190612b83565b610683565b604051610292919061311b565b60405180910390f35b6102b560048036038101906102b09190612b83565b61072d565b6040516102c2919061358c565b60405180910390f35b6102e560048036038101906102e09190612b83565b6107c1565b005b61030160048036038101906102fc9190612a31565b61084b565b60405161030e9190613100565b60405180910390f35b610331600480360381019061032c9190612a31565b6108b4565b005b61034d60048036038101906103489190612a31565b6108c8565b60405161035a91906135d0565b60405180910390f35b61037d60048036038101906103789190612a31565b61091c565b60405161038a919061358c565b60405180910390f35b61039b610964565b005b6103b760048036038101906103b29190612a31565b6109ec565b6040516103c4919061358c565b60405180910390f35b6103d5610a3c565b6040516103e29190613100565b60405180910390f35b61040560048036038101906104009190612c84565b610a66565b604051610412919061358c565b60405180910390f35b610423610abc565b604051610430919061328f565b60405180910390f35b610453600480360381019061044e9190612a31565b610b4e565b604051610460919061358c565b60405180910390f35b610483600480360381019061047e9190612b83565b610c85565b604051610490919061311b565b60405180910390f35b6104b360048036038101906104ae9190612b83565b610d6f565b6040516104c0919061311b565b60405180910390f35b6104e360048036038101906104de9190612bbf565b610d92565b005b6104ff60048036038101906104fa9190612ae5565b610e96565b005b61051b60048036038101906105169190612a5a565b610fd8565b604051610528919061358c565b60405180910390f35b61054b60048036038101906105469190612c48565b61105f565b6040516105589190613571565b60405180910390f35b61057b60048036038101906105769190612a31565b611195565b005b60606003805461058c906137b2565b80601f01602080910402602001604051908101604052809291908181526020018280546105b8906137b2565b80156106055780601f106105da57610100808354040283529160200191610605565b820191906000526020600020905b8154815290600101906020018083116105e857829003601f168201915b5050505050905090565b60008061061a61128d565b9050610627818585611295565b600191505092915050565b6000600254905090565b60008061064761128d565b9050610654858285611460565b61065f8585856114ec565b60019150509392505050565b60006012905090565b600061067e61176d565b905090565b60008061068e61128d565b9050610722818585600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461071d919061362d565b611295565b600191505092915050565b6000438210610771576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610768906132f1565b60405180910390fd5b6107b9600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002083611887565b905092915050565b6107c961128d565b73ffffffffffffffffffffffffffffffffffffffff166107e7610a3c565b73ffffffffffffffffffffffffffffffffffffffff161461083d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161083490613491565b60405180910390fd5b61084782826119df565b5050565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6108c56108bf61128d565b82611a6c565b50565b6000610915600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050611b86565b9050919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61096c61128d565b73ffffffffffffffffffffffffffffffffffffffff1661098a610a3c565b73ffffffffffffffffffffffffffffffffffffffff16146109e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d790613491565b60405180910390fd5b6109ea6000611bd9565b565b6000610a35600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611c9f565b9050919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000438210610aaa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa1906132f1565b60405180910390fd5b610ab5600883611887565b9050919050565b606060048054610acb906137b2565b80601f0160208091040260200160405190810160405280929190818152602001828054610af7906137b2565b8015610b445780601f10610b1957610100808354040283529160200191610b44565b820191906000526020600020905b815481529060010190602001808311610b2757829003601f168201915b5050505050905090565b600080600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002080549050905060008114610c5c57600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600182610bea91906136b4565b81548110610c21577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160000160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16610c5f565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16915050919050565b600080610c9061128d565b90506000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905083811015610d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4d90613531565b60405180910390fd5b610d638286868403611295565b60019250505092915050565b600080610d7a61128d565b9050610d878185856114ec565b600191505092915050565b83421115610dd5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dcc90613311565b60405180910390fd5b6000610e37610e2f7fe48329057bfd03d55e49b547132e39cffd9c1820ad7b9d4c5307691425d15adf898989604051602001610e1494939291906131b2565b60405160208183030381529060405280519060200120611cad565b858585611cc7565b9050610e4281611cf2565b8614610e83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7a90613351565b60405180910390fd5b610e8d8188611a6c565b50505050505050565b83421115610ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed0906133d1565b60405180910390fd5b60007f0000000000000000000000000000000000000000000000000000000000000000888888610f088c611cf2565b89604051602001610f1e96959493929190613151565b6040516020818303038152906040528051906020012090506000610f4182611cad565b90506000610f5182878787611cc7565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610fc1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb890613451565b60405180910390fd5b610fcc8a8a8a611295565b50505050505050505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b61106761298a565b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208263ffffffff16815481106110e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020016040518060400160405290816000820160009054906101000a900463ffffffff1663ffffffff1663ffffffff1681526020016000820160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681525050905092915050565b61119d61128d565b73ffffffffffffffffffffffffffffffffffffffff166111bb610a3c565b73ffffffffffffffffffffffffffffffffffffffff1614611211576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120890613491565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611281576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127890613371565b60405180910390fd5b61128a81611bd9565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611305576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fc90613511565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611375576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136c90613391565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92583604051611453919061358c565b60405180910390a3505050565b600061146c8484610fd8565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146114e657818110156114d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cf906133b1565b60405180910390fd5b6114e58484848403611295565b5b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561155c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611553906134d1565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115c3906132d1565b60405180910390fd5b6115d7838383611d50565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561165d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611654906133f1565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116f0919061362d565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611754919061358c565b60405180910390a3611767848484611d55565b50505050565b60007f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff163073ffffffffffffffffffffffffffffffffffffffff161480156117e957507f000000000000000000000000000000000000000000000000000000000000000046145b15611816577f00000000000000000000000000000000000000000000000000000000000000009050611884565b6118817f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000611d80565b90505b90565b6000808380549050905060005b8181101561192c5760006118a88284611dba565b9050848682815481106118e4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160000160009054906101000a900463ffffffff1663ffffffff16111561191657809250611926565b600181611923919061362d565b91505b50611894565b600082146119b4578460018361194291906136b4565b81548110611979577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160000160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff166119b7565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff169250505092915050565b6119e98282611de0565b6119f1611f40565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16611a17610632565b1115611a58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4f90613471565b60405180910390fd5b611a666008611f6483611f7a565b50505050565b6000611a778361084b565b90506000611a848461091c565b905082600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167f3134e8a2e6d97e929a7e54011ea5485d7d196dd5f0ba4d4ef95803e8e3fc257f60405160405180910390a4611b80828483612264565b50505050565b600063ffffffff8016821115611bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc8906134f1565b60405180910390fd5b819050919050565b6000600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081600001549050919050565b6000611cc0611cba61176d565b8361245d565b9050919050565b6000806000611cd887878787612490565b91509150611ce58161259d565b8192505050949350505050565b600080600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000209050611d3f81611c9f565b9150611d4a816128ee565b50919050565b505050565b611d60838383612904565b611d7b611d6c8461084b565b611d758461084b565b83612264565b505050565b60008383834630604051602001611d9b9594939291906131f7565b6040516020818303038152906040528051906020012090509392505050565b60006002828418611dcb9190613683565b828416611dd8919061362d565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e50576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4790613551565b60405180910390fd5b611e5c60008383611d50565b8060026000828254611e6e919061362d565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ec3919061362d565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611f28919061358c565b60405180910390a3611f3c60008383611d55565b5050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff905090565b60008183611f72919061362d565b905092915050565b6000806000858054905090506000811461200e5785600182611f9c91906136b4565b81548110611fd3577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160000160049054906101000a90047bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16612011565b60005b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16925061203f83858763ffffffff16565b91506000811180156120b85750438660018361205b91906136b4565b81548110612092577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160000160009054906101000a900463ffffffff1663ffffffff16145b1561216b576120c682612909565b866001836120d491906136b4565b8154811061210b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200160000160046101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555061225b565b85604051806040016040528061218043611b86565b63ffffffff16815260200161219485612909565b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff168152509080600181540180825580915050600190039060005260206000200160009091909190915060008201518160000160006101000a81548163ffffffff021916908363ffffffff16021790555060208201518160000160046101000a8154817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff02191690837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff16021790555050505b50935093915050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141580156122a05750600081115b1561245857600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461237e57600080612327600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002061297485611f7a565b915091508473ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a72483836040516123739291906135a7565b60405180910390a250505b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461245757600080612400600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020611f6485611f7a565b915091508373ffffffffffffffffffffffffffffffffffffffff167fdec2bacdd2f05b59de34da9b523dff8be42e5e38e818c82fdb0bae774387a724838360405161244c9291906135a7565b60405180910390a250505b5b505050565b600082826040516020016124729291906130c9565b60405160208183030381529060405280519060200120905092915050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c11156124cb576000600391509150612594565b601b8560ff16141580156124e35750601c8560ff1614155b156124f5576000600491509150612594565b60006001878787876040516000815260200160405260405161251a949392919061324a565b6020604051602081039080840390855afa15801561253c573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561258b57600060019250925050612594565b80600092509250505b94509492505050565b600060048111156125d7577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612610577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b141561261b576128eb565b60016004811115612655577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b81600481111561268e577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156126cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c6906132b1565b60405180910390fd5b60026004811115612709577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b816004811115612742577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612783576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161277a90613331565b60405180910390fd5b600360048111156127bd577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156127f6577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b1415612837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282e90613411565b60405180910390fd5b600480811115612870577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b8160048111156128a9577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b14156128ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128e190613431565b60405180910390fd5b5b50565b6001816000016000828254019250508190555050565b505050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff801682111561296c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612963906134b1565b60405180910390fd5b819050919050565b6000818361298291906136b4565b905092915050565b6040518060400160405280600063ffffffff16815260200160007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1681525090565b6000813590506129d781613e03565b92915050565b6000813590506129ec81613e1a565b92915050565b600081359050612a0181613e31565b92915050565b600081359050612a1681613e48565b92915050565b600081359050612a2b81613e5f565b92915050565b600060208284031215612a4357600080fd5b6000612a51848285016129c8565b91505092915050565b60008060408385031215612a6d57600080fd5b6000612a7b858286016129c8565b9250506020612a8c858286016129c8565b9150509250929050565b600080600060608486031215612aab57600080fd5b6000612ab9868287016129c8565b9350506020612aca868287016129c8565b9250506040612adb868287016129f2565b9150509250925092565b600080600080600080600060e0888a031215612b0057600080fd5b6000612b0e8a828b016129c8565b9750506020612b1f8a828b016129c8565b9650506040612b308a828b016129f2565b9550506060612b418a828b016129f2565b9450506080612b528a828b01612a1c565b93505060a0612b638a828b016129dd565b92505060c0612b748a828b016129dd565b91505092959891949750929550565b60008060408385031215612b9657600080fd5b6000612ba4858286016129c8565b9250506020612bb5858286016129f2565b9150509250929050565b60008060008060008060c08789031215612bd857600080fd5b6000612be689828a016129c8565b9650506020612bf789828a016129f2565b9550506040612c0889828a016129f2565b9450506060612c1989828a01612a1c565b9350506080612c2a89828a016129dd565b92505060a0612c3b89828a016129dd565b9150509295509295509295565b60008060408385031215612c5b57600080fd5b6000612c69858286016129c8565b9250506020612c7a85828601612a07565b9150509250929050565b600060208284031215612c9657600080fd5b6000612ca4848285016129f2565b91505092915050565b612cb6816136e8565b82525050565b612cc5816136fa565b82525050565b612cd481613706565b82525050565b612ceb612ce682613706565b6137e4565b82525050565b6000612cfc82613606565b612d068185613611565b9350612d1681856020860161377f565b612d1f8161387b565b840191505092915050565b6000612d37601883613611565b9150612d428261388c565b602082019050919050565b6000612d5a602383613611565b9150612d65826138b5565b604082019050919050565b6000612d7d601f83613611565b9150612d8882613904565b602082019050919050565b6000612da0601d83613611565b9150612dab8261392d565b602082019050919050565b6000612dc3601f83613611565b9150612dce82613956565b602082019050919050565b6000612de6601983613611565b9150612df18261397f565b602082019050919050565b6000612e09602683613611565b9150612e14826139a8565b604082019050919050565b6000612e2c602283613611565b9150612e37826139f7565b604082019050919050565b6000612e4f600283613622565b9150612e5a82613a46565b600282019050919050565b6000612e72601d83613611565b9150612e7d82613a6f565b602082019050919050565b6000612e95601d83613611565b9150612ea082613a98565b602082019050919050565b6000612eb8602683613611565b9150612ec382613ac1565b604082019050919050565b6000612edb602283613611565b9150612ee682613b10565b604082019050919050565b6000612efe602283613611565b9150612f0982613b5f565b604082019050919050565b6000612f21601e83613611565b9150612f2c82613bae565b602082019050919050565b6000612f44603083613611565b9150612f4f82613bd7565b604082019050919050565b6000612f67602083613611565b9150612f7282613c26565b602082019050919050565b6000612f8a602783613611565b9150612f9582613c4f565b604082019050919050565b6000612fad602583613611565b9150612fb882613c9e565b604082019050919050565b6000612fd0602683613611565b9150612fdb82613ced565b604082019050919050565b6000612ff3602483613611565b9150612ffe82613d3c565b604082019050919050565b6000613016602583613611565b915061302182613d8b565b604082019050919050565b6000613039601f83613611565b915061304482613dda565b602082019050919050565b604082016000820151613065600085018261309c565b506020820151613078602085018261307e565b50505050565b61308781613730565b82525050565b61309681613758565b82525050565b6130a581613762565b82525050565b6130b481613762565b82525050565b6130c381613772565b82525050565b60006130d482612e42565b91506130e08285612cda565b6020820191506130f08284612cda565b6020820191508190509392505050565b60006020820190506131156000830184612cad565b92915050565b60006020820190506131306000830184612cbc565b92915050565b600060208201905061314b6000830184612ccb565b92915050565b600060c0820190506131666000830189612ccb565b6131736020830188612cad565b6131806040830187612cad565b61318d606083018661308d565b61319a608083018561308d565b6131a760a083018461308d565b979650505050505050565b60006080820190506131c76000830187612ccb565b6131d46020830186612cad565b6131e1604083018561308d565b6131ee606083018461308d565b95945050505050565b600060a08201905061320c6000830188612ccb565b6132196020830187612ccb565b6132266040830186612ccb565b613233606083018561308d565b6132406080830184612cad565b9695505050505050565b600060808201905061325f6000830187612ccb565b61326c60208301866130ba565b6132796040830185612ccb565b6132866060830184612ccb565b95945050505050565b600060208201905081810360008301526132a98184612cf1565b905092915050565b600060208201905081810360008301526132ca81612d2a565b9050919050565b600060208201905081810360008301526132ea81612d4d565b9050919050565b6000602082019050818103600083015261330a81612d70565b9050919050565b6000602082019050818103600083015261332a81612d93565b9050919050565b6000602082019050818103600083015261334a81612db6565b9050919050565b6000602082019050818103600083015261336a81612dd9565b9050919050565b6000602082019050818103600083015261338a81612dfc565b9050919050565b600060208201905081810360008301526133aa81612e1f565b9050919050565b600060208201905081810360008301526133ca81612e65565b9050919050565b600060208201905081810360008301526133ea81612e88565b9050919050565b6000602082019050818103600083015261340a81612eab565b9050919050565b6000602082019050818103600083015261342a81612ece565b9050919050565b6000602082019050818103600083015261344a81612ef1565b9050919050565b6000602082019050818103600083015261346a81612f14565b9050919050565b6000602082019050818103600083015261348a81612f37565b9050919050565b600060208201905081810360008301526134aa81612f5a565b9050919050565b600060208201905081810360008301526134ca81612f7d565b9050919050565b600060208201905081810360008301526134ea81612fa0565b9050919050565b6000602082019050818103600083015261350a81612fc3565b9050919050565b6000602082019050818103600083015261352a81612fe6565b9050919050565b6000602082019050818103600083015261354a81613009565b9050919050565b6000602082019050818103600083015261356a8161302c565b9050919050565b6000604082019050613586600083018461304f565b92915050565b60006020820190506135a1600083018461308d565b92915050565b60006040820190506135bc600083018561308d565b6135c9602083018461308d565b9392505050565b60006020820190506135e560008301846130ab565b92915050565b600060208201905061360060008301846130ba565b92915050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600061363882613758565b915061364383613758565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613678576136776137ee565b5b828201905092915050565b600061368e82613758565b915061369983613758565b9250826136a9576136a861381d565b5b828204905092915050565b60006136bf82613758565b91506136ca83613758565b9250828210156136dd576136dc6137ee565b5b828203905092915050565b60006136f382613710565b9050919050565b60008115159050919050565b6000819050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600063ffffffff82169050919050565b600060ff82169050919050565b60005b8381101561379d578082015181840152602081019050613782565b838111156137ac576000848401525b50505050565b600060028204905060018216806137ca57607f821691505b602082108114156137de576137dd61384c565b5b50919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433230566f7465733a20626c6f636b206e6f7420796574206d696e656400600082015250565b7f4552433230566f7465733a207369676e61747572652065787069726564000000600082015250565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b7f4552433230566f7465733a20696e76616c6964206e6f6e636500000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f1901000000000000000000000000000000000000000000000000000000000000600082015250565b7f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000600082015250565b7f45524332305065726d69743a206578706972656420646561646c696e65000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f45434453413a20696e76616c6964207369676e6174757265202776272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332305065726d69743a20696e76616c6964207369676e61747572650000600082015250565b7f4552433230566f7465733a20746f74616c20737570706c79207269736b73206f60008201527f766572666c6f77696e6720766f74657300000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f53616665436173743a2076616c756520646f65736e27742066697420696e203260008201527f3234206269747300000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f53616665436173743a2076616c756520646f65736e27742066697420696e203360008201527f3220626974730000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b613e0c816136e8565b8114613e1757600080fd5b50565b613e2381613706565b8114613e2e57600080fd5b50565b613e3a81613758565b8114613e4557600080fd5b50565b613e5181613762565b8114613e5c57600080fd5b50565b613e6881613772565b8114613e7357600080fd5b5056fea2646970667358221220da8dbd7ed067e4c5ee1018502b7cd13792fc3f1c5be2587d15a8fc0c70f8ab0864736f6c63430008040033",
"deployedBytecode": "0x608060405234801561001057600080fd5b506004361061018e5760003560e01c8063715018a6116100de578063a457c2d711610097578063d505accf11610071578063d505accf146104e5578063dd62ed3e14610501578063f1127ed814610531578063f2fde38b146105615761018e565b8063a457c2d714610469578063a9059cbb14610499578063c3cda520146104c95761018e565b8063715018a6146103935780637ecebe001461039d5780638da5cb5b146103cd5780638e539e8c146103eb57806395d89b411461041b5780639ab24eb0146104395761018e565b8063395093511161014b578063587cde1e11610125578063587cde1e146102e75780635c19a95c146103175780636fcfff451461033357806370a08231146103635761018e565b8063395093511461026b5780633a46b1a81461029b57806340c10f19146102cb5761018e565b806306fdde0314610193578063095ea7b3146101b157806318160ddd146101e157806323b872dd146101ff578063313ce5671461022f5780633644e5151461024d575b600080fd5b61019b61057d565b6040516101a8919061328f565b60405180910390f35b6101cb60048036038101906101c69190612b83565b61060f565b6040516101d8919061311b565b60405180910390f35b6101e9610632565b6040516101f6919061358c565b60405180910390f35b61021960048036038101906102149190612a96565b61063c565b604051610226919061311b565b60405180910390f35b61023761066b565b60405161024491906135eb565b60405180910390f35b610255610674565b6040516102629190613136565b60405180910390f35b61028560048036038101906102809190612b83565b61068356