[ { "inputs": [], "stateMutability": "nonpayable", "type": "constructor" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "allowance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientAllowance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" }, { "internalType": "uint256", "name": "balance", "type": "uint256" }, { "internalType": "uint256", "name": "needed", "type": "uint256" } ], "name": "ERC20InsufficientBalance", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "approver", "type": "address" } ], "name": "ERC20InvalidApprover", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "receiver", "type": "address" } ], "name": "ERC20InvalidReceiver", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "ERC20InvalidSender", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" } ], "name": "ERC20InvalidSpender", "type": "error" }, { "inputs": [ { "internalType": "uint256", "name": "deadline", "type": "uint256" } ], "name": "ERC2612ExpiredSignature", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "signer", "type": "address" }, { "internalType": "address", "name": "owner", "type": "address" } ], "name": "ERC2612InvalidSigner", "type": "error" }, { "inputs": [], "name": "NameAndSymbolAlreadySet", "type": "error" }, { "inputs": [], "name": "NameAndSymbolMustNotBeEmpty", "type": "error" }, { "inputs": [ { "internalType": "address", "name": "sender", "type": "address" } ], "name": "Unauthorized", "type": "error" }, { "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": "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": [], "name": "PERMIT_TYPEHASH", "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": [], "name": "ammAddress", "outputs": [ { "internalType": "address", "name": "", "type": "address" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "spender", "type": "address" }, { "internalType": "uint256", "name": "value", "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": "uint256", "name": "value", "type": "uint256" } ], "name": "burn", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "type": "address" }, { "internalType": "uint256", "name": "value", "type": "uint256" } ], "name": "burnFrom", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [], "name": "decimals", "outputs": [ { "internalType": "uint8", "name": "", "type": "uint8" } ], "stateMutability": "view", "type": "function" }, { "inputs": [ { "internalType": "string", "name": "tokenName", "type": "string" }, { "internalType": "string", "name": "tokenSymbol", "type": "string" } ], "name": "initialize", "outputs": [], "stateMutability": "nonpayable", "type": "function" }, { "inputs": [ { "internalType": "address", "name": "account", "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": "", "type": "address" } ], "name": "nonces", "outputs": [ { "internalType": "uint256", "name": "", "type": "uint256" } ], "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": "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": "value", "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": "value", "type": "uint256" } ], "name": "transferFrom", "outputs": [ { "internalType": "bool", "name": "", "type": "bool" } ], "stateMutability": "nonpayable", "type": "function" } ]
60a060405234801561001057600080fd5b50336080819052610fdc61003d600039600081816101cd0152818161037f01526103ef0152610fdc6000f3fe608060405234801561001057600080fd5b50600436106100f65760003560e01c80634837e204116100925780634837e204146101c85780634cd88b76146101fc57806370a082311461020f57806379cc6790146102385780637ecebe001461024b57806395d89b411461026b578063a9059cbb14610273578063d505accf14610286578063dd62ed3e1461029957600080fd5b806306fdde03146100fb578063095ea7b31461011957806318160ddd1461013c57806323b872dd1461014e57806330adf81f14610161578063313ce567146101885780633644e5151461019757806340c10f19146101a057806342966c68146101b5575b600080fd5b6101036102ac565b6040516101109190610ab9565b60405180910390f35b61012c610127366004610b23565b61033e565b6040519015158152602001610110565b6002545b604051908152602001610110565b61012c61015c366004610b4d565b610358565b6101407f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b60405160128152602001610110565b61014060055481565b6101b36101ae366004610b23565b61037c565b005b6101b36101c3366004610b89565b6103df565b6101ef7f000000000000000000000000000000000000000000000000000000000000000081565b6040516101109190610ba2565b6101b361020a366004610c59565b6103ec565b61014061021d366004610cbd565b6001600160a01b031660009081526020819052604090205490565b6101b3610246366004610b23565b61042c565b610140610259366004610cbd565b60066020526000908152604090205481565b610103610441565b61012c610281366004610b23565b610450565b6101b3610294366004610cdf565b61045e565b6101406102a7366004610d52565b610635565b6060600380546102bb90610d85565b80601f01602080910402602001604051908101604052809291908181526020018280546102e790610d85565b80156103345780601f1061030957610100808354040283529160200191610334565b820191906000526020600020905b81548152906001019060200180831161031757829003601f168201915b5050505050905090565b60003361034c818585610660565b60019150505b92915050565b600033610366858285610672565b6103718585856106c5565b506001949350505050565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316146103d157335b60405163472511eb60e11b81526004016103c89190610ba2565b60405180910390fd5b6103db8282610724565b5050565b6103e9338261075a565b50565b337f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03161461042257336103ae565b6103db8282610790565b610437823383610672565b6103db828261075a565b6060600480546102bb90610d85565b60003361034c8185856106c5565b428410156104825760405163313c898160e11b8152600481018590526024016103c8565b6005546001600160a01b038816600090815260066020526040812080549192917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b9190876104d583610dd5565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012060405160200161054e92919061190160f01b81526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa1580156105b9573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b03811615806105ee5750886001600160a01b0316816001600160a01b031614155b1561061f576040516325c0072360e11b81526001600160a01b0380831660048301528a1660248201526044016103c8565b61062a898989610660565b505050505050505050565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61066d83838360016108cd565b505050565b600061067e8484610635565b905060001981146106bf57818110156106b057828183604051637dc7a0d960e11b81526004016103c893929190610dee565b6106bf848484840360006108cd565b50505050565b6001600160a01b0383166106ef576000604051634b637e8f60e11b81526004016103c89190610ba2565b6001600160a01b03821661071957600060405163ec442f0560e01b81526004016103c89190610ba2565b61066d8383836109a2565b6001600160a01b03821661074e57600060405163ec442f0560e01b81526004016103c89190610ba2565b6103db600083836109a2565b6001600160a01b038216610784576000604051634b637e8f60e11b81526004016103c89190610ba2565b6103db826000836109a2565b8151158061079d57508051155b156107bb576040516379db2df160e11b815260040160405180910390fd5b600380546107c890610d85565b15159050806107e45750600480546107df90610d85565b151590505b1561080257604051634a8cdeb560e01b815260040160405180910390fd5b600361080e8382610e5d565b50600461081b8282610e5d565b507f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f600360405161084c9190610f1d565b60408051918290038220828201825260018352603160f81b6020938401528151928301939093528101919091527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a082015260c00160408051601f1981840301815291905280516020909101206005555050565b6001600160a01b0384166108f757600060405163e602df0560e01b81526004016103c89190610ba2565b6001600160a01b038316610921576000604051634a1406b160e11b81526004016103c89190610ba2565b6001600160a01b03808516600090815260016020908152604080832093871683529290522082905580156106bf57826001600160a01b0316846001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9258460405161099491815260200190565b60405180910390a350505050565b6001600160a01b0383166109cd5780600260008282546109c29190610f93565b90915550610a2c9050565b6001600160a01b03831660009081526020819052604090205481811015610a0d5783818360405163391434e360e21b81526004016103c893929190610dee565b6001600160a01b03841660009081526020819052604090209082900390555b6001600160a01b038216610a4857600280548290039055610a67565b6001600160a01b03821660009081526020819052604090208054820190555b816001600160a01b0316836001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051610aac91815260200190565b60405180910390a3505050565b600060208083528351808285015260005b81811015610ae657858101830151858201604001528201610aca565b506000604082860101526040601f19601f8301168501019250505092915050565b80356001600160a01b0381168114610b1e57600080fd5b919050565b60008060408385031215610b3657600080fd5b610b3f83610b07565b946020939093013593505050565b600080600060608486031215610b6257600080fd5b610b6b84610b07565b9250610b7960208501610b07565b9150604084013590509250925092565b600060208284031215610b9b57600080fd5b5035919050565b6001600160a01b0391909116815260200190565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610bdd57600080fd5b813567ffffffffffffffff80821115610bf857610bf8610bb6565b604051601f8301601f19908116603f01168101908282118183101715610c2057610c20610bb6565b81604052838152866020858801011115610c3957600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060408385031215610c6c57600080fd5b823567ffffffffffffffff80821115610c8457600080fd5b610c9086838701610bcc565b93506020850135915080821115610ca657600080fd5b50610cb385828601610bcc565b9150509250929050565b600060208284031215610ccf57600080fd5b610cd882610b07565b9392505050565b600080600080600080600060e0888a031215610cfa57600080fd5b610d0388610b07565b9650610d1160208901610b07565b95506040880135945060608801359350608088013560ff81168114610d3557600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215610d6557600080fd5b610d6e83610b07565b9150610d7c60208401610b07565b90509250929050565b600181811c90821680610d9957607f821691505b602082108103610db957634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052601160045260246000fd5b600060018201610de757610de7610dbf565b5060010190565b6001600160a01b039390931683526020830191909152604082015260600190565b601f82111561066d57600081815260208120601f850160051c81016020861015610e365750805b601f850160051c820191505b81811015610e5557828155600101610e42565b505050505050565b815167ffffffffffffffff811115610e7757610e77610bb6565b610e8b81610e858454610d85565b84610e0f565b602080601f831160018114610ec05760008415610ea85750858301515b600019600386901b1c1916600185901b178555610e55565b600085815260208120601f198616915b82811015610eef57888601518255948401946001909101908401610ed0565b5085821015610f0d5787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000808354610f2b81610d85565b60018281168015610f435760018114610f5857610f87565b60ff1984168752821515830287019450610f87565b8760005260208060002060005b85811015610f7e5781548a820152908401908201610f65565b50505082870194505b50929695505050505050565b8082018082111561035257610352610dbf56fea2646970667358221220926f32d9ccd0b0e0016b302e43ae94cf0d0bc86d8bb2a06238ff8affbe7ed29964736f6c63430008140033