UNPKG

descent-js

Version:

A Typescript library for interacting with the Descent Protocol

4,972 lines 256 kB
{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "_symbol",
          "type": "string"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "inputs": [],
      "name": "AccessControlBadConfirmation",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "neededRole",
          "type": "bytes32"
        }
      ],
      "name": "AccessControlUnauthorizedAccount",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "target",
          "type": "address"
        }
      ],
      "name": "AddressEmptyCode",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "AddressInsufficientBalance",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "ECDSAInvalidSignature",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "length",
          "type": "uint256"
        }
      ],
      "name": "ECDSAInvalidSignatureLength",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "s",
          "type": "bytes32"
        }
      ],
      "name": "ECDSAInvalidSignatureS",
      "type": "error"
    },
    {
      "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": "FailedInnerCall",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "currentNonce",
          "type": "uint256"
        }
      ],
      "name": "InvalidAccountNonce",
      "type": "error"
    },
    {
      "inputs": [],
      "name": "InvalidShortString",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "SafeERC20FailedOperation",
      "type": "error"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "str",
          "type": "string"
        }
      ],
      "name": "StringTooLong",
      "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": [],
      "name": "EIP712DomainChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bool",
          "name": "enabled",
          "type": "bool"
        }
      ],
      "name": "Permit2AllowanceUpdated",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "previousAdminRole",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "newAdminRole",
          "type": "bytes32"
        }
      ],
      "name": "RoleAdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleGranted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "sender",
          "type": "address"
        }
      ],
      "name": "RoleRevoked",
      "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": "DEFAULT_ADMIN_ROLE",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "DOMAIN_SEPARATOR",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "PERMIT2",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "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": "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": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "burn",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "eip712Domain",
      "outputs": [
        {
          "internalType": "bytes1",
          "name": "fields",
          "type": "bytes1"
        },
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "version",
          "type": "string"
        },
        {
          "internalType": "uint256",
          "name": "chainId",
          "type": "uint256"
        },
        {
          "internalType": "address",
          "name": "verifyingContract",
          "type": "address"
        },
        {
          "internalType": "bytes32",
          "name": "salt",
          "type": "bytes32"
        },
        {
          "internalType": "uint256[]",
          "name": "extensions",
          "type": "uint256[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        }
      ],
      "name": "getRoleAdmin",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRole",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "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": "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": "permit2Enabled",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ERC20",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        }
      ],
      "name": "recoverToken",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "callerConfirmation",
          "type": "address"
        }
      ],
      "name": "renounceRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "role",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "setMinterRole",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes4",
          "name": "interfaceId",
          "type": "bytes4"
        }
      ],
      "name": "supportsInterface",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "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"
    },
    {
      "inputs": [
        {
          "internalType": "bool",
          "name": "enabled",
          "type": "bool"
        }
      ],
      "name": "updatePermit2Allowance",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x6101606040523480156200001257600080fd5b50604051620025653803806200256583398101604081905262000035916200034e565b6040805180820190915260018152603160f81b6020820152819081908482600462000061838262000447565b50600562000070828262000447565b5062000082915083905060066200014e565b61012052620000938160076200014e565b61014052815160208084019190912060e052815190820120610100524660a0526200012160e05161010051604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201529081019290925260608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60805250503060c052506200013860003362000187565b50506009805460ff19166001179055506200056d565b60006020835110156200016e57620001668362000235565b905062000181565b816200017b848262000447565b5060ff90505b92915050565b6000828152602081815260408083206001600160a01b038516845290915281205460ff166200022c576000838152602081815260408083206001600160a01b03861684529091529020805460ff19166001179055620001e33390565b6001600160a01b0316826001600160a01b0316847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a450600162000181565b50600062000181565b600080829050601f815111156200026c578260405163305a27a960e01b815260040162000263919062000513565b60405180910390fd5b8051620002798262000548565b179392505050565b634e487b7160e01b600052604160045260246000fd5b60005b83811015620002b45781810151838201526020016200029a565b50506000910152565b600082601f830112620002cf57600080fd5b81516001600160401b0380821115620002ec57620002ec62000281565b604051601f8301601f19908116603f0116810190828211818310171562000317576200031762000281565b816040528381528660208588010111156200033157600080fd5b6200034484602083016020890162000297565b9695505050505050565b600080604083850312156200036257600080fd5b82516001600160401b03808211156200037a57600080fd5b6200038886838701620002bd565b935060208501519150808211156200039f57600080fd5b50620003ae85828601620002bd565b9150509250929050565b600181811c90821680620003cd57607f821691505b602082108103620003ee57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200044257600081815260208120601f850160051c810160208610156200041d5750805b601f850160051c820191505b818110156200043e5782815560010162000429565b5050505b505050565b81516001600160401b0381111562000463576200046362000281565b6200047b81620004748454620003b8565b84620003f4565b602080601f831160018114620004b357600084156200049a5750858301515b600019600386901b1c1916600185901b1785556200043e565b600085815260208120601f198616915b82811015620004e457888601518255948401946001909101908401620004c3565b5085821015620005035787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b60208152600082518060208401526200053481604085016020870162000297565b601f01601f19169190910160400192915050565b80516020808301519190811015620003ee5760001960209190910360031b1b16919050565b60805160a05160c05160e051610100516101205161014051611f9d620005c860003960006110e9015260006110bc01526000610f4901526000610f2101526000610e7c01526000610ea601526000610ed00152611f9d6000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c8063705e6a5b116100f95780639dc29fac11610097578063d505accf11610071578063d505accf146103f4578063d547741f14610407578063dd62ed3e1461041a578063feaea5861461042d57600080fd5b80639dc29fac146103c6578063a217fddf146103d9578063a9059cbb146103e157600080fd5b806384b0196e116100d357806384b0196e1461034c57806391d1485414610367578063945d1229146103ab57806395d89b41146103be57600080fd5b8063705e6a5b146102f057806370a08231146103035780637ecebe001461033957600080fd5b80632f2ff15d1161016657806336568abe1161014057806336568abe14610282578063407c48b41461029557806340c10f19146102a25780636afdd850146102b557600080fd5b80632f2ff15d14610256578063313ce5671461026b5780633644e5151461027a57600080fd5b806318160ddd1161019757806318160ddd1461020e57806323b872dd14610220578063248a9ca31461023357600080fd5b806301ffc9a7146101be57806306fdde03146101e6578063095ea7b3146101fb575b600080fd5b6101d16101cc366004611b48565b610440565b60405190151581526020015b60405180910390f35b6101ee6104d9565b6040516101dd9190611bf8565b6101d1610209366004611c2d565b61056b565b6003545b6040519081526020016101dd565b6101d161022e366004611c59565b610583565b610212610241366004611c9a565b60009081526020819052604090206001015490565b610269610264366004611cb3565b6105a9565b005b604051601281526020016101dd565b6102126105d4565b610269610290366004611cb3565b6105e3565b6009546101d19060ff1681565b6101d16102b0366004611c2d565b610641565b6102cb6e22d473030f116ddee9f6b43ac78ba381565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101dd565b6102696102fe366004611cf1565b610677565b610212610311366004611d0e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b610212610347366004611d0e565b6106e9565b610354610714565b6040516101dd9796959493929190611d2b565b6101d1610375366004611cb3565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6102696103b9366004611d0e565b610776565b6101ee6107ab565b6101d16103d4366004611c2d565b6107ba565b610212600081565b6101d16103ef366004611c2d565b6107f0565b610269610402366004611dea565b6107fe565b610269610415366004611cb3565b6109b0565b610212610428366004611e61565b6109d5565b61026961043b366004611e61565b610a71565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104d357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600480546104e890611e8f565b80601f016020809104026020016040519081016040528092919081815260200182805461051490611e8f565b80156105615780601f1061053657610100808354040283529160200191610561565b820191906000526020600020905b81548152906001019060200180831161054457829003601f168201915b5050505050905090565b600033610579818585610bfd565b5060019392505050565b600033610591858285610c0a565b61059c858585610cae565b60019150505b9392505050565b6000828152602081905260409020600101546105c481610d59565b6105ce8383610d66565b50505050565b60006105de610e62565b905090565b73ffffffffffffffffffffffffffffffffffffffff81163314610632576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61063c8282610f9a565b505050565b60007fcfd53186d792f1ec9d0679afc2dc3ffc86fc31fe1e0f342b838eb6c3eade62b361066d81610d59565b6105798484611055565b600061068281610d59565b60405182151581527f383d8f27281deff0ab982f76ad2feac76f0cb5d922008a4642d8765c748591329060200160405180910390a150600980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260408120546104d3565b6000606080600080600060606107286110b5565b6107306110e2565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b600061078181610d59565b61063c7fcfd53186d792f1ec9d0679afc2dc3ffc86fc31fe1e0f342b838eb6c3eade62b383610d66565b6060600580546104e890611e8f565b60007fcfd53186d792f1ec9d0679afc2dc3ffc86fc31fe1e0f342b838eb6c3eade62b36107e681610d59565b610579848461110f565b600033610579818585610cae565b83421115610840576040517f62791302000000000000000000000000000000000000000000000000000000008152600481018590526024015b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861089a8c73ffffffffffffffffffffffffffffffffffffffff16600090815260086020526040902080546001810190915590565b60408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006109028261116b565b90506000610912828787876111b3565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610999576040517f4b800e4600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301528b166024820152604401610837565b6109a48a8a8a610bfd565b50505050505050505050565b6000828152602081905260409020600101546109cb81610d59565b6105ce8383610f9a565b600073ffffffffffffffffffffffffffffffffffffffff82166e22d473030f116ddee9f6b43ac78ba3148015610a0d575060095460ff165b15610a3957507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6104d3565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600260209081526040808320938616835292905220546105a2565b6000610a7c81610d59565b73ffffffffffffffffffffffffffffffffffffffff831615610b33576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015261063c908490849073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2e9190611ee2565b6111e1565b60008273ffffffffffffffffffffffffffffffffffffffff164760405160006040518083038185875af1925050503d8060008114610b8d576040519150601f19603f3d011682016040523d82523d6000602084013e610b92565b606091505b50509050806105ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7769746864726177206661696c656400000000000000000000000000000000006044820152606401610837565b61063c838383600161126e565b6000610c1684846109d5565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146105ce5781811015610c9f576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610837565b6105ce8484848403600061126e565b73ffffffffffffffffffffffffffffffffffffffff8316610cfe576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610837565b73ffffffffffffffffffffffffffffffffffffffff8216610d4e576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610837565b61063c8383836113b6565b610d638133611561565b50565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610e5a5760008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610df83390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016104d3565b5060006104d3565b60003073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148015610ec857507f000000000000000000000000000000000000000000000000000000000000000046145b15610ef257507f000000000000000000000000000000000000000000000000000000000000000090565b6105de604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610e5a5760008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104d3565b73ffffffffffffffffffffffffffffffffffffffff82166110a5576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610837565b6110b1600083836113b6565b5050565b60606105de7f000000000000000000000000000000000000000000000000000000000000000060066115e7565b60606105de7f000000000000000000000000000000000000000000000000000000000000000060076115e7565b73ffffffffffffffffffffffffffffffffffffffff821661115f576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610837565b6110b1826000836113b6565b60006104d3611178610e62565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000806111c588888888611692565b9250925092506111d5828261178c565b50909695505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261063c908490611890565b73ffffffffffffffffffffffffffffffffffffffff84166112be576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610837565b73ffffffffffffffffffffffffffffffffffffffff831661130e576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610837565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260026020908152604080832093871683529290522082905580156105ce578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516113a891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff83166113ee5780600360008282546113e39190611efb565b909155506114a09050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604090205481811015611474576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610837565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff82166114c9576003805482900390556114f5565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161155491815260200190565b60405180910390a3505050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166110b1576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610837565b606060ff8314611601576115fa83611926565b90506104d3565b81805461160d90611e8f565b80601f016020809104026020016040519081016040528092919081815260200182805461163990611e8f565b80156116865780601f1061165b57610100808354040283529160200191611686565b820191906000526020600020905b81548152906001019060200180831161166957829003601f168201915b505050505090506104d3565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156116cd5750600091506003905082611782565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611721573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661177857506000925060019150829050611782565b9250600091508190505b9450945094915050565b60008260038111156117a0576117a0611f35565b036117a9575050565b60018260038111156117bd576117bd611f35565b036117f4576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600282600381111561180857611808611f35565b03611842576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401610837565b600382600381111561185657611856611f35565b036110b1576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610837565b60006118b273ffffffffffffffffffffffffffffffffffffffff841683611965565b905080516000141580156118d75750808060200190518101906118d59190611f64565b155b1561063c576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610837565b6060600061193383611973565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b60606105a2838360006119b4565b600060ff8216601f8111156104d3576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060814710156119f2576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610837565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051611a1b9190611f81565b60006040518083038185875af1925050503d8060008114611a58576040519150601f19603f3d011682016040523d82523d6000602084013e611a5d565b606091505b5091509150611a6d868383611a77565b9695505050505050565b606082611a8c57611a8782611b06565b6105a2565b8151158015611ab0575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611aff576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610837565b50806105a2565b805115611b165780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215611b5a57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146105a257600080fd5b60005b83811015611ba5578181015183820152602001611b8d565b50506000910152565b60008151808452611bc6816020860160208601611b8a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006105a26020830184611bae565b73ffffffffffffffffffffffffffffffffffffffff81168114610d6357600080fd5b60008060408385031215611c4057600080fd5b8235611c4b81611c0b565b946020939093013593505050565b600080600060608486031215611c6e57600080fd5b8335611c7981611c0b565b92506020840135611c8981611c0b565b929592945050506040919091013590565b600060208284031215611cac57600080fd5b5035919050565b60008060408385031215611cc657600080fd5b823591506020830135611cd881611c0b565b809150509250929050565b8015158114610d6357600080fd5b600060208284031215611d0357600080fd5b81356105a281611ce3565b600060208284031215611d2057600080fd5b81356105a281611c0b565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611d6760e084018a611bae565b8381036040850152611d79818a611bae565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611dd857835183529284019291840191600101611dbc565b50909c9b505050505050505050505050565b600080600080600080600060e0888a031215611e0557600080fd5b8735611e1081611c0b565b96506020880135611e2081611c0b565b95506040880135945060608801359350608088013560ff81168114611e4457600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215611e7457600080fd5b8235611e7f81611c0b565b91506020830135611cd881611c0b565b600181811c90821680611ea357607f821691505b602082108103611edc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611ef457600080fd5b5051919050565b808201808211156104d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611f7657600080fd5b81516105a281611ce3565b60008251611f93818460208701611b8a565b919091019291505056",
    "sourceMap": "425:2710:44:-:0;;;797:189;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3328:431:36;;;;;;;;;;;;-1:-1:-1;;;3328:431:36;;;;887:7:44;;;;859:5;887:7;1962:5:23;:13;859:5:44;1962::23;:13;:::i;:::-;-1:-1:-1;1985:7:23;:17;1995:7;1985;:17;:::i;:::-;-1:-1:-1;3401:45:36;;-1:-1:-1;3401:4:36;;-1:-1:-1;3432:13:36;3401:30;:45::i;:::-;3393:53;;3467:51;:7;3501:16;3467:33;:51::i;:::-;3456:62;;3542:22;;;;;;;;;;3528:36;;3591:25;;;;;;3574:42;;3644:13;3627:30;;3692:23;4226:11;;4239:14;;4204:80;;;2079:95;4204:80;;;4520:25:60;4561:18;;;4554:34;;;;4604:18;;;4597:34;4255:13:36;4647:18:60;;;4640:34;4278:4:36;4690:19:60;;;4683:61;4168:7:36;;4492:19:60;;4204:80:36;;;;;;;;;;;;4194:91;;;;;;4187:98;;4113:179;;3692:23;3667:48;;-1:-1:-1;;3747:4:36;3725:27;;-1:-1:-1;906:42:44::2;2232:4:19;937:10:44;906;:42::i;:::-;-1:-1:-1::0;;958:14:44::2;:21:::0;;-1:-1:-1;;958:21:44::2;975:4;958:21;::::0;;-1:-1:-1;425:2710:44;;2914:340:32;3010:11;3059:2;3043:5;3037:19;:24;3033:215;;;3084:20;3098:5;3084:13;:20::i;:::-;3077:27;;;;3033:215;3161:5;3135:46;3176:5;3161;3135:46;:::i;:::-;-1:-1:-1;1390:66:32;;-1:-1:-1;3033:215:32;2914:340;;;;:::o;6179:316:19:-;6256:4;2954:12;;;;;;;;;;;-1:-1:-1;;;;;2954:29:19;;;;;;;;;;;;6272:217;;6315:6;:12;;;;;;;;;;;-1:-1:-1;;;;;6315:29:19;;;;;;;;;:36;;-1:-1:-1;;6315:36:19;6347:4;6315:36;;;6397:12;735:10:30;;656:96;6397:12:19;-1:-1:-1;;;;;6370:40:19;6388:7;-1:-1:-1;;;;;6370:40:19;6382:4;6370:40;;;;;;;;;;-1:-1:-1;6431:4:19;6424:11;;6272:217;-1:-1:-1;6473:5:19;6466:12;;1708:286:32;1773:11;1796:17;1822:3;1796:30;;1854:2;1840:4;:11;:16;1836:72;;;1893:3;1879:18;;-1:-1:-1;;;1879:18:32;;;;;;;;:::i;:::-;;;;;;;;1836:72;1974:11;;1957:13;1974:4;1957:13;:::i;:::-;1949:36;;1708:286;-1:-1:-1;;;1708:286:32:o;14:127:60:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:250;231:1;241:113;255:6;252:1;249:13;241:113;;;331:11;;;325:18;312:11;;;305:39;277:2;270:10;241:113;;;-1:-1:-1;;388:1:60;370:16;;363:27;146:250::o;401:699::-;455:5;508:3;501:4;493:6;489:17;485:27;475:55;;526:1;523;516:12;475:55;549:13;;-1:-1:-1;;;;;611:10:60;;;608:36;;;624:18;;:::i;:::-;699:2;693:9;667:2;753:13;;-1:-1:-1;;749:22:60;;;773:2;745:31;741:40;729:53;;;797:18;;;817:22;;;794:46;791:72;;;843:18;;:::i;:::-;883:10;879:2;872:22;918:2;910:6;903:18;964:3;957:4;952:2;944:6;940:15;936:26;933:35;930:55;;;981:1;978;971:12;930:55;994:76;1067:2;1060:4;1052:6;1048:17;1041:4;1033:6;1029:17;994:76;:::i;:::-;1088:6;401:699;-1:-1:-1;;;;;;401:699:60:o;1105:562::-;1204:6;1212;1265:2;1253:9;1244:7;1240:23;1236:32;1233:52;;;1281:1;1278;1271:12;1233:52;1308:16;;-1:-1:-1;;;;;1373:14:60;;;1370:34;;;1400:1;1397;1390:12;1370:34;1423:61;1476:7;1467:6;1456:9;1452:22;1423:61;:::i;:::-;1413:71;;1530:2;1519:9;1515:18;1509:25;1493:41;;1559:2;1549:8;1546:16;1543:36;;;1575:1;1572;1565:12;1543:36;;1598:63;1653:7;1642:8;1631:9;1627:24;1598:63;:::i;:::-;1588:73;;;1105:562;;;;;:::o;1672:380::-;1751:1;1747:12;;;;1794;;;1815:61;;1869:4;1861:6;1857:17;1847:27;;1815:61;1922:2;1914:6;1911:14;1891:18;1888:38;1885:161;;1968:10;1963:3;1959:20;1956:1;1949:31;2003:4;2000:1;1993:15;2031:4;2028:1;2021:15;1885:161;;1672:380;;;:::o;2183:545::-;2285:2;2280:3;2277:11;2274:448;;;2321:1;2346:5;2342:2;2335:17;2391:4;2387:2;2377:19;2461:2;2449:10;2445:19;2442:1;2438:27;2432:4;2428:38;2497:4;2485:10;2482:20;2479:47;;;-1:-1:-1;2520:4:60;2479:47;2575:2;2570:3;2566:12;2563:1;2559:20;2553:4;2549:31;2539:41;;2630:82;2648:2;2641:5;2638:13;2630:82;;;2693:17;;;2674:1;2663:13;2630:82;;;2634:3;;;2274:448;2183:545;;;:::o;2904:1352::-;3024:10;;-1:-1:-1;;;;;3046:30:60;;3043:56;;;3079:18;;:::i;:::-;3108:97;3198:6;3158:38;3190:4;3184:11;3158:38;:::i;:::-;3152:4;3108:97;:::i;:::-;3260:4;;3324:2;3313:14;;3341:1;3336:663;;;;4043:1;4060:6;4057:89;;;-1:-1:-1;4112:19:60;;;4106:26;4057:89;-1:-1:-1;;2861:1:60;2857:11;;;2853:24;2849:29;2839:40;2885:1;2881:11;;;2836:57;4159:81;;3306:944;;3336:663;2130:1;2123:14;;;2167:4;2154:18;;-1:-1:-1;;3372:20:60;;;3490:236;3504:7;3501:1;3498:14;3490:236;;;3593:19;;;3587:26;3572:42;;3685:27;;;;3653:1;3641:14;;;;3520:19;;3490:236;;;3494:3;3754:6;3745:7;3742:19;3739:201;;;3815:19;;;3809:26;-1:-1:-1;;3898:1:60;3894:14;;;3910:3;3890:24;3886:37;3882:42;3867:58;3852:74;;3739:201;-1:-1:-1;;;;;3986:1:60;3970:14;;;3966:22;3953:36;;-1:-1:-1;2904:1352:60:o;4755:396::-;4904:2;4893:9;4886:21;4867:4;4936:6;4930:13;4979:6;4974:2;4963:9;4959:18;4952:34;4995:79;5067:6;5062:2;5051:9;5047:18;5042:2;5034:6;5030:15;4995:79;:::i;:::-;5135:2;5114:15;-1:-1:-1;;5110:29:60;5095:45;;;;5142:2;5091:54;;4755:396;-1:-1:-1;;4755:396:60:o;5156:297::-;5274:12;;5321:4;5310:16;;;5304:23;;5274:12;5339:16;;5336:111;;;-1:-1:-1;;5413:4:60;5409:17;;;;5406:1;5402:25;5398:38;5387:50;;5156:297;-1:-1:-1;5156:297:60:o;:::-;425:2710:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b50600436106101b95760003560e01c8063705e6a5b116100f95780639dc29fac11610097578063d505accf11610071578063d505accf146103f4578063d547741f14610407578063dd62ed3e1461041a578063feaea5861461042d57600080fd5b80639dc29fac146103c6578063a217fddf146103d9578063a9059cbb146103e157600080fd5b806384b0196e116100d357806384b0196e1461034c57806391d1485414610367578063945d1229146103ab57806395d89b41146103be57600080fd5b8063705e6a5b146102f057806370a08231146103035780637ecebe001461033957600080fd5b80632f2ff15d1161016657806336568abe1161014057806336568abe14610282578063407c48b41461029557806340c10f19146102a25780636afdd850146102b557600080fd5b80632f2ff15d14610256578063313ce5671461026b5780633644e5151461027a57600080fd5b806318160ddd1161019757806318160ddd1461020e57806323b872dd14610220578063248a9ca31461023357600080fd5b806301ffc9a7146101be57806306fdde03146101e6578063095ea7b3146101fb575b600080fd5b6101d16101cc366004611b48565b610440565b60405190151581526020015b60405180910390f35b6101ee6104d9565b6040516101dd9190611bf8565b6101d1610209366004611c2d565b61056b565b6003545b6040519081526020016101dd565b6101d161022e366004611c59565b610583565b610212610241366004611c9a565b60009081526020819052604090206001015490565b610269610264366004611cb3565b6105a9565b005b604051601281526020016101dd565b6102126105d4565b610269610290366004611cb3565b6105e3565b6009546101d19060ff1681565b6101d16102b0366004611c2d565b610641565b6102cb6e22d473030f116ddee9f6b43ac78ba381565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101dd565b6102696102fe366004611cf1565b610677565b610212610311366004611d0e565b73ffffffffffffffffffffffffffffffffffffffff1660009081526001602052604090205490565b610212610347366004611d0e565b6106e9565b610354610714565b6040516101dd9796959493929190611d2b565b6101d1610375366004611cb3565b60009182526020828152604080842073ffffffffffffffffffffffffffffffffffffffff93909316845291905290205460ff1690565b6102696103b9366004611d0e565b610776565b6101ee6107ab565b6101d16103d4366004611c2d565b6107ba565b610212600081565b6101d16103ef366004611c2d565b6107f0565b610269610402366004611dea565b6107fe565b610269610415366004611cb3565b6109b0565b610212610428366004611e61565b6109d5565b61026961043b366004611e61565b610a71565b60007fffffffff0000000000000000000000000000000000000000000000000000000082167f7965db0b0000000000000000000000000000000000000000000000000000000014806104d357507f01ffc9a7000000000000000000000000000000000000000000000000000000007fffffffff000000000000000000000000000000000000000000000000000000008316145b92915050565b6060600480546104e890611e8f565b80601f016020809104026020016040519081016040528092919081815260200182805461051490611e8f565b80156105615780601f1061053657610100808354040283529160200191610561565b820191906000526020600020905b81548152906001019060200180831161054457829003601f168201915b5050505050905090565b600033610579818585610bfd565b5060019392505050565b600033610591858285610c0a565b61059c858585610cae565b60019150505b9392505050565b6000828152602081905260409020600101546105c481610d59565b6105ce8383610d66565b50505050565b60006105de610e62565b905090565b73ffffffffffffffffffffffffffffffffffffffff81163314610632576040517f6697b23200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61063c8282610f9a565b505050565b60007fcfd53186d792f1ec9d0679afc2dc3ffc86fc31fe1e0f342b838eb6c3eade62b361066d81610d59565b6105798484611055565b600061068281610d59565b60405182151581527f383d8f27281deff0ab982f76ad2feac76f0cb5d922008a4642d8765c748591329060200160405180910390a150600980547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016911515919091179055565b73ffffffffffffffffffffffffffffffffffffffff81166000908152600860205260408120546104d3565b6000606080600080600060606107286110b5565b6107306110e2565b604080516000808252602082019092527f0f000000000000000000000000000000000000000000000000000000000000009b939a50919850469750309650945092509050565b600061078181610d59565b61063c7fcfd53186d792f1ec9d0679afc2dc3ffc86fc31fe1e0f342b838eb6c3eade62b383610d66565b6060600580546104e890611e8f565b60007fcfd53186d792f1ec9d0679afc2dc3ffc86fc31fe1e0f342b838eb6c3eade62b36107e681610d59565b610579848461110f565b600033610579818585610cae565b83421115610840576040517f62791302000000000000000000000000000000000000000000000000000000008152600481018590526024015b60405180910390fd5b60007f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c988888861089a8c73ffffffffffffffffffffffffffffffffffffffff16600090815260086020526040902080546001810190915590565b60408051602081019690965273ffffffffffffffffffffffffffffffffffffffff94851690860152929091166060840152608083015260a082015260c0810186905260e00160405160208183030381529060405280519060200120905060006109028261116b565b90506000610912828787876111b3565b90508973ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610999576040517f4b800e4600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80831660048301528b166024820152604401610837565b6109a48a8a8a610bfd565b50505050505050505050565b6000828152602081905260409020600101546109cb81610d59565b6105ce8383610f9a565b600073ffffffffffffffffffffffffffffffffffffffff82166e22d473030f116ddee9f6b43ac78ba3148015610a0d575060095460ff165b15610a3957507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6104d3565b73ffffffffffffffffffffffffffffffffffffffff8084166000908152600260209081526040808320938616835292905220546105a2565b6000610a7c81610d59565b73ffffffffffffffffffffffffffffffffffffffff831615610b33576040517f70a0823100000000000000000000000000000000000000000000000000000000815230600482015261063c908490849073ffffffffffffffffffffffffffffffffffffffff8316906370a0823190602401602060405180830381865afa158015610b0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b2e9190611ee2565b6111e1565b60008273ffffffffffffffffffffffffffffffffffffffff164760405160006040518083038185875af1925050503d8060008114610b8d576040519150601f19603f3d011682016040523d82523d6000602084013e610b92565b606091505b50509050806105ce576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152600f60248201527f7769746864726177206661696c656400000000000000000000000000000000006044820152606401610837565b61063c838383600161126e565b6000610c1684846109d5565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81146105ce5781811015610c9f576040517ffb8f41b200000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841660048201526024810182905260448101839052606401610837565b6105ce8484848403600061126e565b73ffffffffffffffffffffffffffffffffffffffff8316610cfe576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610837565b73ffffffffffffffffffffffffffffffffffffffff8216610d4e576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610837565b61063c8383836113b6565b610d638133611561565b50565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff16610e5a5760008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff86168452909152902080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00166001179055610df83390565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16847f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45060016104d3565b5060006104d3565b60003073ffffffffffffffffffffffffffffffffffffffff7f000000000000000000000000000000000000000000000000000000000000000016148015610ec857507f000000000000000000000000000000000000000000000000000000000000000046145b15610ef257507f000000000000000000000000000000000000000000000000000000000000000090565b6105de604080517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f60208201527f0000000000000000000000000000000000000000000000000000000000000000918101919091527f000000000000000000000000000000000000000000000000000000000000000060608201524660808201523060a082015260009060c00160405160208183030381529060405280519060200120905090565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915281205460ff1615610e5a5760008381526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8616808552925280832080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016905551339286917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a45060016104d3565b73ffffffffffffffffffffffffffffffffffffffff82166110a5576040517fec442f0500000000000000000000000000000000000000000000000000000000815260006004820152602401610837565b6110b1600083836113b6565b5050565b60606105de7f000000000000000000000000000000000000000000000000000000000000000060066115e7565b60606105de7f000000000000000000000000000000000000000000000000000000000000000060076115e7565b73ffffffffffffffffffffffffffffffffffffffff821661115f576040517f96c6fd1e00000000000000000000000000000000000000000000000000000000815260006004820152602401610837565b6110b1826000836113b6565b60006104d3611178610e62565b836040517f19010000000000000000000000000000000000000000000000000000000000008152600281019290925260228201526042902090565b6000806000806111c588888888611692565b9250925092506111d5828261178c565b50909695505050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8416602482015260448082018490528251808303909101815260649091019091526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fa9059cbb0000000000000000000000000000000000000000000000000000000017905261063c908490611890565b73ffffffffffffffffffffffffffffffffffffffff84166112be576040517fe602df0500000000000000000000000000000000000000000000000000000000815260006004820152602401610837565b73ffffffffffffffffffffffffffffffffffffffff831661130e576040517f94280d6200000000000000000000000000000000000000000000000000000000815260006004820152602401610837565b73ffffffffffffffffffffffffffffffffffffffff808516600090815260026020908152604080832093871683529290522082905580156105ce578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925846040516113a891815260200190565b60405180910390a350505050565b73ffffffffffffffffffffffffffffffffffffffff83166113ee5780600360008282546113e39190611efb565b909155506114a09050565b73ffffffffffffffffffffffffffffffffffffffff831660009081526001602052604090205481811015611474576040517fe450d38c00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff851660048201526024810182905260448101839052606401610837565b73ffffffffffffffffffffffffffffffffffffffff841660009081526001602052604090209082900390555b73ffffffffffffffffffffffffffffffffffffffff82166114c9576003805482900390556114f5565b73ffffffffffffffffffffffffffffffffffffffff821660009081526001602052604090208054820190555b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161155491815260200190565b60405180910390a3505050565b60008281526020818152604080832073ffffffffffffffffffffffffffffffffffffffff8516845290915290205460ff166110b1576040517fe2517d3f00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8216600482015260248101839052604401610837565b606060ff8314611601576115fa83611926565b90506104d3565b81805461160d90611e8f565b80601f016020809104026020016040519081016040528092919081815260200182805461163990611e8f565b80156116865780601f1061165b57610100808354040283529160200191611686565b820191906000526020600020905b81548152906001019060200180831161166957829003601f168201915b505050505090506104d3565b600080807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08411156116cd5750600091506003905082611782565b604080516000808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa158015611721573d6000803e3d6000fd5b50506040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0015191505073ffffffffffffffffffffffffffffffffffffffff811661177857506000925060019150829050611782565b9250600091508190505b9450945094915050565b60008260038111156117a0576117a0611f35565b036117a9575050565b60018260038111156117bd576117bd611f35565b036117f4576040517ff645eedf00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600282600381111561180857611808611f35565b03611842576040517ffce698f700000000000000000000000000000000000000000000000000000000815260048101829052602401610837565b600382600381111561185657611856611f35565b036110b1576040517fd78bce0c00000000000000000000000000000000000000000000000000000000815260048101829052602401610837565b60006118b273ffffffffffffffffffffffffffffffffffffffff841683611965565b905080516000141580156118d75750808060200190518101906118d59190611f64565b155b1561063c576040517f5274afe700000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff84166004820152602401610837565b6060600061193383611973565b604080516020808252818301909252919250600091906020820181803683375050509182525060208101929092525090565b60606105a2838360006119b4565b600060ff8216601f8111156104d3576040517fb3512b0c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6060814710156119f2576040517fcd786059000000000000000000000000000000000000000000000000000000008152306004820152602401610837565b6000808573ffffffffffffffffffffffffffffffffffffffff168486604051611a1b9190611f81565b60006040518083038185875af1925050503d8060008114611a58576040519150601f19603f3d011682016040523d82523d6000602084013e611a5d565b606091505b5091509150611a6d868383611a77565b9695505050505050565b606082611a8c57611a8782611b06565b6105a2565b8151158015611ab0575073ffffffffffffffffffffffffffffffffffffffff84163b155b15611aff576040517f9996b31500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff85166004820152602401610837565b50806105a2565b805115611b165780518082602001fd5b6040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600060208284031215611b5a57600080fd5b81357fffffffff00000000000000000000000000000000000000000000000000000000811681146105a257600080fd5b60005b83811015611ba5578181015183820152602001611b8d565b50506000910152565b60008151808452611bc6816020860160208601611b8a565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b6020815260006105a26020830184611bae565b73ffffffffffffffffffffffffffffffffffffffff81168114610d6357600080fd5b60008060408385031215611c4057600080fd5b8235611c4b81611c0b565b946020939093013593505050565b600080600060608486031215611c6e57600080fd5b8335611c7981611c0b565b92506020840135611c8981611c0b565b929592945050506040919091013590565b600060208284031215611cac57600080fd5b5035919050565b60008060408385031215611cc657600080fd5b823591506020830135611cd881611c0b565b809150509250929050565b8015158114610d6357600080fd5b600060208284031215611d0357600080fd5b81356105a281611ce3565b600060208284031215611d2057600080fd5b81356105a281611c0b565b7fff00000000000000000000000000000000000000000000000000000000000000881681526000602060e081840152611d6760e084018a611bae565b8381036040850152611d79818a611bae565b6060850189905273ffffffffffffffffffffffffffffffffffffffff8816608086015260a0850187905284810360c0860152855180825283870192509083019060005b81811015611dd857835183529284019291840191600101611dbc565b50909c9b505050505050505050505050565b600080600080600080600060e0888a031215611e0557600080fd5b8735611e1081611c0b565b96506020880135611e2081611c0b565b95506040880135945060608801359350608088013560ff81168114611e4457600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60008060408385031215611e7457600080fd5b8235611e7f81611c0b565b91506020830135611cd881611c0b565b600181811c90821680611ea357607f821691505b602082108103611edc577f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b50919050565b600060208284031215611ef457600080fd5b5051919050565b808201808211156104d3577f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600060208284031215611f7657600080fd5b81516105a281611ce3565b60008251611f93818460208701611b8a565b919091019291505056",
    "sourceMap": "425:2710:44:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2565:202:19;;;;;;:::i;:::-;;:::i;:::-;;;516:14:60;;509:22;491:41;;479:2;464:18;2565:202:19;;;;;;;;2074:89:23;;;:::i;:::-;;;;;;;:::i;4293:186::-;;;;;;:::i;:::-;;:::i;3144:97::-;3222:12;;3144:97;;;1983:25:60;;;1971:2;1956:18;3144:97:23;1837:177:60;5039:244:23;;;;;;:::i;:::-;;:::i;3810:120:19:-;;;;;;:::i;:::-;3875:7;3901:12;;;;;;;;;;:22;;;;3810:120;4226:136;;;;;;:::i;:::-;;:::i;:::-;;3002:82:23;;;3075:2;3309:36:60;;3297:2;3282:18;3002:82:23;3167:184:60;2656:112:25;;;:::i;5328:245:19:-;;;;;;:::i;:::-;;:::i;720:26:44:-;;;;;;;;;1380:160;;;;;;:::i;:::-;;:::i;617:76::-;;651:42;617:76;;;;;3532:42:60;3520:55;;;3502:74;;3490:2;3475:18;617:76:44;3356:226:60;2018:172:44;;;;;;:::i;:::-;;:::i;3299:116:23:-;;;;;;:::i;:::-;3390:18;;3364:7;3390:18;;;:9;:18;;;;;;;3299:116;2406:143:25;;;;;;:::i;:::-;;:::i;5144:557:36:-;;;:::i;:::-;;;;;;;;;;;;;:::i;2854:136:19:-;;;;;;:::i;:::-;2931:4;2954:12;;;;;;;;;;;:29;;;;;;;;;;;;;;;;2854:136;1089:134:44;;;;;;:::i;:::-;;:::i;2276:93:23:-;;;:::i;1685:160:44:-;;;;;;:::i;:::-;;:::i;2187:49:19:-;;2232:4;2187:49;;3610:178:23;;;;;;:::i;:::-;;:::i;1680:672:25:-;;;;;;:::i;:::-;;:::i;4642:138:19:-;;;;;;:::i;:::-;;:::i;2323:221:44:-;;;;;;:::i;:::-;;:::i;2762:371::-;;;;;;:::i;:::-;;:::i;2565:202:19:-;2650:4;2673:47;;;2688:32;2673:47;;:87;;-1:-1:-1;876:25:38;861:40;;;;2724:36:19;2666:94;2565:202;-1:-1:-1;;2565:202:19:o;2074:89:23:-;2119:13;2151:5;2144:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2074:89;:::o;4293:186::-;4366:4;735:10:30;4420:31:23;735:10:30;4436:7:23;4445:5;4420:8;:31::i;:::-;-1:-1:-1;4468:4:23;;4293:186;-1:-1:-1;;;4293:186:23:o;5039:244::-;5126:4;735:10:30;5182:37:23;5198:4;735:10:30;5213:5:23;5182:15;:37::i;:::-;5229:26;5239:4;5245:2;5249:5;5229:9;:26::i;:::-;5272:4;5265:11;;;5039:244;;;;;;:::o;4226:136:19:-;3875:7;3901:12;;;;;;;;;;:22;;;2464:16;2475:4;2464:10;:16::i;:::-;4330:25:::1;4341:4;4347:7;4330:10;:25::i;:::-;;4226:136:::0;;;:::o;2656:112:25:-;2715:7;2741:20;:18;:20::i;:::-;2734:27;;2656:112;:::o;5328:245:19:-;5421:34;;;735:10:30;5421:34:19;5417:102;;5478:30;;;;;;;;;;;;;;5417:102;5529:37;5541:4;5547:18;5529:11;:37::i;:::-;;5328:245;;:::o;1380:160:44:-;1474:4;528:31;2464:16:19;2475:4;2464:10;:16::i;:::-;1490:22:44::1;1496:7;1505:6;1490:5;:22::i;2018:172::-:0;2232:4:19;2464:16;2232:4;2464:10;:16::i;:::-;2117:32:44::1;::::0;516:14:60;;509:22;491:41;;2117:32:44::1;::::0;479:2:60;464:18;2117:32:44::1;;;;;;;-1:-1:-1::0;2159:14:44::1;:24:::0;;;::::1;::::0;::::1;;::::0;;;::::1;::::0;;2018:172::o;2406:143:25:-;624:14:31;;;2497:7:25;624:14:31;;;:7;:14;;;;;;2523:19:25;538:107:31;5144:557:36;5242:13;5269:18;5301:21;5336:15;5365:25;5404:12;5430:27;5533:13;:11;:13::i;:::-;5560:16;:14;:16::i;:::-;5668;;;5652:1;5668:16;;;;;;;;;5482:212;;;;-1:-1:-1;5482:212:36;;-1:-1:-1;5590:13:36;;-1:-1:-1;5625:4:36;;-1:-1:-1;5652:1:36;-1:-1:-1;5668:16:36;-1:-1:-1;5482:212:36;-1:-1:-1;5144:557:36:o;1089:134:44:-;2232:4:19;2464:16;2232:4;2464:10;:16::i;:::-;1177:39:44::1;528:31;1208:7;1177:10;:39::i;2276:93:23:-:0;2323:13;2355:7;2348:14;;;;;:::i;1685:160:44:-;1779:4;528:31;2464:16:19;2475:4;2464:10;:16::i;:::-;1795:22:44::1;1801:7;1810:6;1795:5;:22::i;3610:178:23:-:0;3679:4;735:10:30;3733:27:23;735:10:30;3750:2:23;3754:5;3733:9;:27::i;1680:672:25:-;1901:8;1883:15;:26;1879:97;;;1932:33;;;;;;;;1983:25:60;;;1956:18;;1932:33:25;;;;;;;;1879:97;1986:18;1022:95;2045:5;2052:7;2061:5;2068:16;2078:5;1121:14:31;;819:7;1121:14;;;:7;:14;;;;;:16;;;;;;;;;759:395;2068:16:25;2017:78;;;;;;8101:25:60;;;;8145:42;8223:15;;;8203:18;;;8196:43;8275:15;;;;8255:18;;;8248:43;8307:18;;;8300:34;8350:19;;;8343:35;8394:19;;;8387:35;;;8073:19;;2017:78:25;;;;;;;;;;;;2007:89;;;;;;1986:110;;2107:12;2122:28;2139:10;2122:16;:28::i;:::-;2107:43;;2161:14;2178:28;2192:4;2198:1;2201;2204;2178:13;:28::i;:::-;2161:45;;2230:5;2220:15;;:6;:15;;;2216:88;;2258:35;;;;;8617:42:60;8686:15;;;2258:35:25;;;8668:34:60;8738:15;;8718:18;;;8711:43;8580:18;;2258:35:25;8433:327:60;2216:88:25;2314:31;2323:5;2330:7;2339:5;2314:8;:31::i;:::-;1869:483;;;1680:672;;;;;;;:::o;4642:138:19:-;3875:7;3901:12;;;;;;;;;;:22;;;2464:16;2475:4;2464:10;:16::i;:::-;4747:26:::1;4759:4;4765:7;4747:11;:26::i;2323:221:44:-:0;2404:7;2427:18;;;651:42;2427:18;:36;;;;-1:-1:-1;2449:14:44;;;;2427:36;2423:66;;;-1:-1:-1;2472:17:44;2465:24;;2423:66;3952:18:23;;;;3926:7;3952:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;2506:31:44;3846:140:23;2762:371:44;2232:4:19;2464:16;2232:4;2464:10;:16::i;:::-;2859:28:44::1;::::0;::::1;::::0;2855:272:::1;;2937:30;::::0;;;;2961:4:::1;2937:30;::::0;::::1;3502:74:60::0;2903:65:44::1;::::0;2926:5;;2933:2;;2937:15:::1;::::0;::::1;::::0;::::1;::::0;3475:18:60;;2937:30:44::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2903:22;:65::i;2855:272::-;3000:12;3025:2;3017:16;;3041:21;3017:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2999:68;;;3089:7;3081:35;;;::::0;::::1;::::0;;9366:2:60;3081:35:44::1;::::0;::::1;9348:21:60::0;9405:2;9385:18;;;9378:30;9444:17;9424:18;;;9417:45;9479:18;;3081:35:44::1;9164:339:60::0;8989:128:23;9073:37;9082:5;9089:7;9098:5;9105:4;9073:8;:37::i;10663:477::-;10762:24;10789:25;10799:5;10806:7;10789:9;:25::i;:::-;10762:52;;10848:17;10828:16;:37;10824:310;;10904:5;10885:16;:24;10881:130;;;10936:60;;;;;9740:42:60;9728:55;;10936:60:23;;;9710:74:60;9800:18;;;9793:34;;;9843:18;;;9836:34;;;9683:18;;10936:60:23;9508:368:60;10881:130:23;11052:57;11061:5;11068:7;11096:5;11077:16;:24;11103:5;11052:8;:57::i;5656:300::-;5739:18;;;5735:86;;5780:30;;;;;5807:1;5780:30;;;3502:74:60;3475:18;;5780:30:23;3356:226:60;5735:86:23;5834:16;;;5830:86;;5873:32;;;;;5902:1;5873:32;;;3502:74:60;3475:18;;5873:32:23;3356:226:60;5830:86:23;5925:24;5933:4;5939:2;5943:5;5925:7;:24::i;3199:103:19:-;3265:30;3276:4;735:10:30;3265::19;:30::i;:::-;3199:103;:::o;6179:316::-;6256:4;2954:12;;;;;;;;;;;:29;;;;;;;;;;;;;6272:217;;6315:6;:12;;;;;;;;;;;:29;;;;;;;;;;:36;;;;6347:4;6315:36;;;6397:12;735:10:30;;656:96;6397:12:19;6370:40;;6388:7;6370:40;;6382:4;6370:40;;;;;;;;;;-1:-1:-1;6431:4:19;6424:11;;6272:217;-1:-1:-1;6473:5:19;6466:12;;3845:262:36;3898:7;3929:4;3921:28;3938:11;3921:28;;:63;;;;;3970:14;3953:13;:31;3921:63;3917:184;;;-1:-1:-1;4007:22:36;;3845:262::o;3917:184::-;4067:23;4204:80;;;2079:95;4204:80;;;11028:25:60;4226:11:36;11069:18:60;;;11062:34;;;;4239:14:36;11112:18:60;;;11105:34;4255:13:36;11155:18:60;;;11148:34;4278:4:36;11198:19:60;;;11191:84;4168:7:36;;11000:19:60;;4204:80:36;;;;;;;;;;;;4194:91;;;;;;4187:98;;4113:179;;6730:317:19;6808:4;2954:12;;;;;;;;;;;:29;;;;;;;;;;;;;6824:217;;;6898:5;6866:12;;;;;;;;;;;:29;;;;;;;;;;;:37;;;;;;6922:40;735:10:30;;6866:12:19;;6922:40;;6898:5;6922:40;-1:-1:-1;6983:4:19;6976:11;;7721:208:23;7791:21;;;7787:91;;7835:32;;;;;7864:1;7835:32;;;3502:74:60;3475:18;;7835:32:23;3356:226:60;7787:91:23;7887:35;7903:1;7907:7;7916:5;7887:7;:35::i;:::-;7721:208;;:::o;6021:126:36:-;6067:13;6099:41;:5;6126:13;6099:26;:41::i;6473:135::-;6522:13;6554:47;:8;6584:16;6554:29;:47::i;8247:206:23:-;8317:21;;;8313:89;;8361:30;;;;;8388:1;8361:30;;;3502:74:60;3475:18;;8361:30:23;3356:226:60;8313:89:23;8411:35;8419:7;8436:1;8440:5;8411:7;:35::i;4917:176:36:-;4994:7;5020:66;5053:20;:18;:20::i;:::-;5075:10;3555:4:37;3549:11;3585:10;3573:23;;3625:4;3616:14;;3609:39;;;;3677:4;3668:14;;3661:34;3733:4;3718:20;;;3353:401;6803:260:35;6888:7;6908:17;6927:18;6947:16;6967:25;6978:4;6984:1;6987;6990;6967:10;:25::i;:::-;6907:85;;;;;;7002:28;7014:5;7021:8;7002:11;:28::i;:::-;-1:-1:-1;7047:9:35;;6803:260;-1:-1:-1;;;;;;6803:260:35:o;1303:160:28:-;1412:43;;;1427:14;10073:55:60;;1412:43:28;;;10055:74:60;10145:18;;;;10138:34;;;1412:43:28;;;;;;;;;;10028:18:60;;;;1412:43:28;;;;;;;;;;;;;;1385:71;;1405:5;;1385:19;:71::i;9949:432:23:-;10061:19;;;10057:89;;10103:32;;;;;10132:1;10103:32;;;3502:74:60;3475:18;;10103:32:23;3356:226:60;10057:89:23;10159:21;;;10155:90;;10203:31;;;;;10231:1;10203:31;;;3502:74:60;3475:18;;10203:31:23;3356:226:60;10155:90:23;10254:18;;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;:35;;;10299:76;;;;10349:7;10333:31;;10342:5;10333:31;;;10358:5;10333:31;;;;1983:25:60;;1971:2;1956:18;;1837:177;10333:31:23;;;;;;;;9949:432;;;;:::o;6271:1107::-;6360:18;;;6356:540;;6512:5;6496:12;;:21;;;;;;;:::i;:::-;;;;-1:-1:-1;6356:540:23;;-1:-1:-1;6356:540:23;;6570:15;;;6548:19;6570:15;;;:9;:15;;;;;;6603:19;;;6599:115;;;6649:50;;;;;9740:42:60;9728:55;;6649:50:23;;;9710:74:60;9800:18;;;9793:34;;;9843:18;;;9836:34;;;9683:18;;6649:50:23;9508:368:60;6599:115:23;6834:15;;;;;;;:9;:15;;;;;6852:19;;;;6834:37;;6356:540;6910:16;;;6906:425;;7073:12;:21;;;;;;;6906:425;;;7284:13;;;;;;;:9;:13;;;;;:22;;;;;;6906:425;7361:2;7346:25;;7355:4;7346:25;;;7365:5;7346:25;;;;1983::60;;1971:2;1956:18;;1837:177;7346:25:23;;;;;;;;6271:1107;;;:::o;3432:197:19:-;2931:4;2954:12;;;;;;;;;;;:29;;;;;;;;;;;;;3515:108;;3565:47;;;;;10085:42:60;10073:55;;3565:47:19;;;10055:74:60;10145:18;;;10138:34;;;10028:18;;3565:47:19;9881:297:60;3385:267:32;3479:13;1390:66;3508:46;;3504:142;;3577:15;3586:5;3577:8;:15::i;:::-;3570:22;;;;3504:142;3630:5;3623:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5140:1530:35;5266:7;;;6199:66;6186:79;;6182:164;;;-1:-1:-1;6297:1:35;;-1:-1:-1;6301:30:35;;-1:-1:-1;6333:1:35;6281:54;;6182:164;6457:24;;;6440:14;6457:24;;;;;;;;;11513:25:60;;;11586:4;11574:17;;11554:18;;;11547:45;;;;11608:18;;;11601:34;;;11651:18;;;11644:34;;;6457:24:35;;11485:19:60;;6457:24:35;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6457:24:35;;;;;;-1:-1:-1;;6495:20:35;;;6491:113;;-1:-1:-1;6547:1:35;;-1:-1:-1;6551:29:35;;-1:-1:-1;6547:1:35;;-1:-1:-1;6531:62:35;;6491:113;6622:6;-1:-1:-1;6630:20:35;;-1:-1:-1;6630:20:35;;-1:-1:-1;5140:1530:35;;;;;;;;;:::o;7196:532::-;7291:20;7282:5;:29;;;;;;;;:::i;:::-;;7278:444;;7196:532;;:::o;7278:444::-;7387:29;7378:5;:38;;;;;;;;:::i;:::-;;7374:348;;7439:23;;;;;;;;;;;;;;7374:348;7492:35;7483:5;:44;;;;;;;;:::i;:::-;;7479:243;;7550:46;;;;;;;;1983:25:60;;;1956:18;;7550:46:35;1837:177:60;7479:243:35;7626:30;7617:5;:39;;;;;;;;:::i;:::-;;7613:109;;7679:32;;;;;;;;1983:25:60;;;1956:18;;7679:32:35;1837:177:60;4059:629:28;4478:23;4504:33;:27;;;4532:4;4504:27;:33::i;:::-;4478:59;;4551:10;:17;4572:1;4551:22;;:57;;;;;4589:10;4578:30;;;;;;;;;;;;:::i;:::-;4577:31;4551:57;4547:135;;;4631:40;;;;;3532:42:60;3520:55;;4631:40:28;;;3502:74:60;3475:18;;4631:40:28;3356:226:60;2078:405:32;2137:13;2162:11;2176:16;2187:4;2176:10;:16::i;:::-;2300:14;;;2311:2;2300:14;;;;;;;;;2162:30;;-1:-1:-1;2280:17:32;;2300:14;;;;;;;;;-1:-1:-1;;;2390:16:32;;;-1:-1:-1;2435:4:32;2426:14;;2419:28;;;;-1:-1:-1;2390:16:32;2078:405::o;2705:151:29:-;2780:12;2811:38;2833:6;2841:4;2847:1;2811:21;:38::i;2555:245:32:-;2616:7;2688:4;2652:40;;2715:2;2706:11;;2702:69;;;2740:20;;;;;;;;;;;;;;3180:392:29;3279:12;3331:5;3307:21;:29;3303:108;;;3359:41;;;;;3394:4;3359:41;;;3502:74:60;3475:18;;3359:41:29;3356:226:60;3303:108:29;3421:12;3435:23;3462:6;:11;;3481:5;3488:4;3462:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3420:73;;;;3510:55;3537:6;3545:7;3554:10;3510:26;:55::i;:::-;3503:62;3180:392;-1:-1:-1;;;;;;3180:392:29:o;4625:582::-;4769:12;4798:7;4793:408;;4821:19;4829:10;4821:7;:19::i;:::-;4793:408;;;5045:17;;:22;:49;;;;-1:-1:-1;5071:18:29;;;;:23;5045:49;5041:119;;;5121:24;;;;;3532:42:60;3520:55;;5121:24:29;;;3502:74:60;3475:18;;5121:24:29;3356:226:60;5041:119:29;-1:-1:-1;5180:10:29;5173:17;;5743:516;5874:17;;:21;5870:383;;6102:10;6096:17;6158:15;6145:10;6141:2;6137:19;6130:44;5870:383;6225:17;;;;;;;;;;;;;;14:332:60;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;180:9;167:23;230:66;223:5;219:78;212:5;209:89;199:117;;312:1;309;302:12;543:250;628:1;638:113;652:6;649:1;646:13;638:113;;;728:11;;;722:18;709:11;;;702:39;674:2;667:10;638:113;;;-1:-1:-1;;785:1:60;767:16;;760:27;543:250::o;798:330::-;840:3;878:5;872:12;905:6;900:3;893:19;921:76;990:6;983:4;978:3;974:14;967:4;960:5;956:16;921:76;:::i;:::-;1042:2;1030:15;1047:66;1026:88;1017:98;;;;1117:4;1013:109;;798:330;-1:-1:-1;;798:330:60:o;1133:220::-;1282:2;1271:9;1264:21;1245:4;1302:45;1343:2;1332:9;1328:18;1320:6;1302:45;:::i;1358:154::-;1444:42;1437:5;1433:54;1426:5;1423:65;1413:93;;1502:1;1499;1492:12;1517:315;1585:6;1593;1646:2;1634:9;1625:7;1621:23;1617:32;1614:52;;;1662:1;1659;1652:12;1614:52;1701:9;1688:23;1720:31;1745:5;1720:31;:::i;:::-;1770:5;1822:2;1807:18;;;;1794:32;;-1:-1:-1;;;1517:315:60:o;2019:456::-;2096:6;2104;2112;2165:2;2153:9;2144:7;2140:23;2136:32;2133:52;;;2181:1;2178;2171:12;2133:52;2220:9;2207:23;2239:31;2264:5;2239:31;:::i;:::-;2289:5;-1:-1:-1;2346:2:60;2331:18;;2318:32;2359:33;2318:32;2359:33;:::i;:::-;2019:456;;2411:7;;-1:-1:-1;;;2465:2:60;2450:18;;;;2437:32;;2019:456::o;2480:180::-;2539:6;2592:2;2580:9;2571:7;2567:23;2563:32;2560:52;;;2608:1;2605;2598:12;2560:52;-1:-1:-1;2631:23:60;;2480:180;-1:-1:-1;2480:180:60:o;2847:315::-;2915:6;2923;2976:2;2964:9;2955:7;2951:23;2947:32;2944:52;;;2992:1;2989;2982:12;2944:52;3028:9;3015:23;3005:33;;3088:2;3077:9;3073:18;3060:32;3101:31;3126:5;3101:31;:::i;:::-;3151:5;3141:15;;;2847:315;;;;;:::o;3587:118::-;3673:5;3666:13;3659:21;3652:5;3649:32;3639:60;;3695:1;3692;3685:12;3710:241;3766:6;3819:2;3807:9;3798:7;3794:23;3790:32;3787:52;;;3835:1;3832;3825:12;3787:52;3874:9;3861:23;3893:28;3915:5;3893:28;:::i;3956:247::-;4015:6;4068:2;4056:9;4047:7;4043:23;4039:32;4036:52;;;4084:1;4081;4074:12;4036:52;4123:9;4110:23;4142:31;4167:5;4142:31;:::i;4208:1335::-;4605:66;4597:6;4593:79;4582:9;4575:98;4556:4;4692:2;4730:3;4725:2;4714:9;4710:18;4703:31;4757:46;4798:3;4787:9;4783:19;4775:6;4757:46;:::i;:::-;4851:9;4843:6;4839:22;4834:2;4823:9;4819:18;4812:50;4885:33;4911:6;4903;4885:33;:::i;:::-;4949:2;4934:18;;4927:34;;;5010:42;4998:55;;4992:3;4977:19;;4970:84;5085:3;5070:19;;5063:35;;;5135:22;;;5129:3;5114:19;;5107:51;5207:13;;5229:22;;;5305:15;;;;-1:-1:-1;5267:15:60;;;;-1:-1:-1;5348:169:60;5362:6;5359:1;5356:13;5348:169;;;5423:13;;5411:26;;5492:15;;;;5457:12;;;;5384:1;5377:9;5348:169;;;-1:-1:-1;5534:3:60;;4208:1335;-1:-1:-1;;;;;;;;;;;;4208:1335:60:o;5548:829::-;5659:6;5667;5675;5683;5691;5699;5707;5760:3;5748:9;5739:7;5735:23;5731:33;5728:53;;;5777:1;5774;5767:12;5728:53;5816:9;5803:23;5835:31;5860:5;5835:31;:::i;:::-;5885:5;-1:-1:-1;5942:2:60;5927:18;;5914:32;5955:33;5914:32;5955:33;:::i;:::-;6007:7;-1:-1:-1;6061:2:60;6046:18;;6033:32;;-1:-1:-1;6112:2:60;6097:18;;6084:32;;-1:-1:-1;6168:3:60;6153:19;;6140:33;6217:4;6204:18;;6192:31;;6182:59;;6237:1;6234;6227:12;6182:59;5548:829;;;;-1:-1:-1;5548:829:60;;;;6260:7;6314:3;6299:19;;6286:33;;-1:-1:-1;6366:3:60;6351:19;;;6338:33;;5548:829;-1:-1:-1;;5548:829:60:o;6382:388::-;6450:6;6458;6511:2;6499:9;6490:7;6486:23;6482:32;6479:52;;;6527:1;6524;6517:12;6479:52;6566:9;6553:23;6585:31;6610:5;6585:31;:::i;:::-;6635:5;-1:-1:-1;6692:2:60;6677:18;;6664:32;6705:33;6664:32;6705:33;:::i;7183:437::-;7262:1;7258:12;;;;7305;;;7326:61;;7380:4;7372:6;7368:17;7358:27;;7326:61;7433:2;7425:6;7422:14;7402:18;7399:38;7396:218;;7470:77;7467:1;7460:88;7571:4;7568:1;7561:15;7599:4;7596:1;7589:15;7396:218;;7183:437;;;:::o;8765:184::-;8835:6;8888:2;8876:9;8867:7;8863:23;8859:32;8856:52;;;8904:1;8901;8894:12;8856:52;-1:-1:-1;8927:16:60;;8765:184;-1:-1:-1;8765:184:60:o;10183:279::-;10248:9;;;10269:10;;;10266:190;;;10312:77;10309:1;10302:88;10413:4;10410:1;10403:15;10441:4;10438:1;10431:15;11689:184;11741:77;11738:1;11731:88;11838:4;11835:1;11828:15;11862:4;11859:1;11852:15;11878:245;11945:6;11998:2;11986:9;11977:7;11973:23;11969:32;11966:52;;;12014:1;12011;12004:12;11966:52;12046:9;12040:16;12065:28;12087:5;12065:28;:::i;12128:287::-;12257:3;12295:6;12289:13;12311:66;12370:6;12365:3;12358:4;12350:6;12346:17;12311:66;:::i;:::-;12393:16;;;;;12128:287;-1:-1:-1;;12128:287:60:o",
    "linkReferences": {},
    "immutableReferences": {
      "46321": [
        {
          "start": 3792,
          "length": 32
        }
      ],
      "46323": [
        {
          "start": 3750,
          "length": 32
        }
      ],
      "46325": [
        {
          "start": 3708,
          "length": 32
        }
      ],
      "46327": [
        {
          "start": 3873,
          "length": 32
        }
      ],
      "46329": [
        {
          "start": 3913,
          "length": 32
        }
      ],
      "46332": [
        {
          "start": 4284,
          "length": 32
        }
      ],
      "46335": [
        {
          "start": 4329,
          "length": 32
        }
      ]
    }
  },
  "methodIdentifiers": {
    "DEFAULT_ADMIN_ROLE()": "a217fddf",
    "DOMAIN_SEPARATOR()": "3644e515",
    "PERMIT2()": "6afdd850",
    "allowance(address,address)": "dd62ed3e",
    "approve(address,uint256)": "095ea7b3",
    "balanceOf(address)": "70a08231",
    "burn(address,uint256)": "9dc29fac",
    "decimals()": "313ce567",
    "eip712Domain()": "84b0196e",
    "getRoleAdmin(bytes32)": "248a9ca3",
    "grantRole(bytes32,address)": "2f2ff15d",
    "hasRole(bytes32,address)": "91d14854",
    "mint(address,uint256)": "40c10f19",
    "name()": "06fdde03",
    "nonces(address)": "7ecebe00",
    "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf",
    "permit2Enabled()": "407c48b4",
    "recoverToken(address,address)": "feaea586",
    "renounceRole(bytes32,address)": "36568abe",
    "revokeRole(bytes32,address)": "d547741f",
    "setMinterRole(address)": "945d1229",
    "supportsInterface(bytes4)": "01ffc9a7",
    "symbol()": "95d89b41",
    "totalSupply()": "18160ddd",
    "transfer(address,uint256)": "a9059cbb",
    "transferFrom(address,address,uint256)": "23b872dd",
    "updatePermit2Allowance(bool)": "705e6a5b"
  },
  "rawMetadata": "{\"compiler\":{\"version\":\"0.8.21+commit.d9974bed\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"string\",\"name\":\"_name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"_symbol\",\"type\":\"string\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"AddressInsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ECDSAInvalidSignature\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"length\",\"type\":\"uint256\"}],\"name\":\"ECDSAInvalidSignatureLength\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"s\",\"type\":\"bytes32\"}],\"name\":\"ECDSAInvalidSignatureS\",\"type\":\"error\"},{\"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\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"currentNonce\",\"type\":\"uint256\"}],\"name\":\"InvalidAccountNonce\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidShortString\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"SafeERC20FailedOperation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"str\",\"type\":\"string\"}],\"name\":\"StringTooLong\",\"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\":[],\"name\":\"EIP712DomainChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"Permit2AllowanceUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"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\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DOMAIN_SEPARATOR\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"PERMIT2\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"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\":\"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\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"burn\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"decimals\",\"outputs\":[{\"internalType\":\"uint8\",\"name\":\"\",\"type\":\"uint8\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"eip712Domain\",\"outputs\":[{\"internalType\":\"bytes1\",\"name\":\"fields\",\"type\":\"bytes1\"},{\"internalType\":\"string\",\"name\":\"name\",\"type\":\"string\"},{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"},{\"internalType\":\"uint256\",\"name\":\"chainId\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"verifyingContract\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"salt\",\"type\":\"bytes32\"},{\"internalType\":\"uint256[]\",\"name\":\"extensions\",\"type\":\"uint256[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"mint\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"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\":\"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\":\"permit2Enabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract ERC20\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"to\",\"type\":\"address\"}],\"name\":\"recoverToken\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"setMinterRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"updatePermit2Allowance\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"AddressInsufficientBalance(address)\":[{\"details\":\"The ETH balance of the account is not enough to perform the operation.\"}],\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an invalid length.\"}],\"ECDSAInvalidSignatureS(bytes32)\":[{\"details\":\"The signature has an S value that is in the upper half order.\"}],\"ERC20InsufficientAllowance(address,uint256,uint256)\":[{\"details\":\"Indicates a failure with the `spender`\\u2019s `allowance`. Used in transfers.\",\"params\":{\"allowance\":\"Amount of tokens a `spender` is allowed to operate with.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC20InsufficientBalance(address,uint256,uint256)\":[{\"details\":\"Indicates an error related to the current `balance` of a `sender`. Used in transfers.\",\"params\":{\"balance\":\"Current balance for the interacting account.\",\"needed\":\"Minimum amount required to perform a transfer.\",\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidApprover(address)\":[{\"details\":\"Indicates a failure with the `approver` of a token to be approved. Used in approvals.\",\"params\":{\"approver\":\"Address initiating an approval operation.\"}}],\"ERC20InvalidReceiver(address)\":[{\"details\":\"Indicates a failure with the token `receiver`. Used in transfers.\",\"params\":{\"receiver\":\"Address to which tokens are being transferred.\"}}],\"ERC20InvalidSender(address)\":[{\"details\":\"Indicates a failure with the token `sender`. Used in transfers.\",\"params\":{\"sender\":\"Address whose tokens are being transferred.\"}}],\"ERC20InvalidSpender(address)\":[{\"details\":\"Indicates a failure with the `spender` to be approved. Used in approvals.\",\"params\":{\"spender\":\"Address that may be allowed to operate on tokens without being their owner.\"}}],\"ERC2612ExpiredSignature(uint256)\":[{\"details\":\"Permit deadline has expired.\"}],\"ERC2612InvalidSigner(address,address)\":[{\"details\":\"Mismatched signature.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidAccountNonce(address,uint256)\":[{\"details\":\"The nonce used for an `account` is not the expected current nonce.\"}],\"SafeERC20FailedOperation(address)\":[{\"details\":\"An operation with an ERC20 token failed.\"}]},\"events\":{\"Approval(address,address,uint256)\":{\"details\":\"Emitted when the allowance of a `spender` for an `owner` is set by a call to {approve}. `value` is the new allowance.\"},\"EIP712DomainChanged()\":{\"details\":\"MAY be emitted to signal that the domain could have changed.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call:   - if using `revokeRole`, it is the admin role bearer   - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"Transfer(address,address,uint256)\":{\"details\":\"Emitted when `value` tokens are moved from one account (`from`) to another (`to`). Note that `value` may be zero.\"}},\"kind\":\"dev\",\"methods\":{\"DOMAIN_SEPARATOR()\":{\"details\":\"Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}.\"},\"allowance(address,address)\":{\"details\":\"The permit2 contract has full approval by default. If the approval is revoked, it can still be manually approved.\"},\"approve(address,uint256)\":{\"details\":\"See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address.\"},\"balanceOf(address)\":{\"details\":\"See {IERC20-balanceOf}.\"},\"burn(address,uint256)\":{\"details\":\"Burns a  token\",\"params\":{\"account\":\"address to burn tokens from\",\"amount\":\"amount of tokens to burn\"}},\"decimals()\":{\"details\":\"Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}.\"},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"mint(address,uint256)\":{\"details\":\"Mints a new token\",\"params\":{\"account\":\"address to send the minted tokens to\",\"amount\":\"amount of tokens to mint\"}},\"name()\":{\"details\":\"Returns the name of the token.\"},\"nonces(address)\":{\"details\":\"Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times.\"},\"permit(address,address,uint256,uint256,uint8,bytes32,bytes32)\":{\"details\":\"Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above.\"},\"recoverToken(address,address)\":{\"details\":\"withdraw token. For cases where people mistakenly send other tokens to this address\",\"params\":{\"to\":\"account to withdraw tokens to\",\"token\":\"address of the token to withdraw\"}},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"setMinterRole(address)\":{\"details\":\"sets a minter role\",\"params\":{\"account\":\"address for the minter role\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"symbol()\":{\"details\":\"Returns the symbol of the token, usually a shorter version of the name.\"},\"totalSupply()\":{\"details\":\"See {IERC20-totalSupply}.\"},\"transfer(address,uint256)\":{\"details\":\"See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`.\"},\"transferFrom(address,address,uint256)\":{\"details\":\"See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`.\"},\"updatePermit2Allowance(bool)\":{\"details\":\"used to update if to default approve permit2 address for all addresses\",\"params\":{\"enabled\":\"if the default approval should be done or not\"}}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/currency.sol\":\"Currency\"},\"evmVersion\":\"paris\",\"libraries\":{},\"metadata\":{\"appendCBOR\":false,\"bytecodeHash\":\"none\"},\"optimizer\":{\"enabled\":true,\"runs\":1000000},\"remappings\":[\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\"]},\"sources\":{\"lib/openzeppelin-contracts/contracts/access/AccessControl.sol\":{\"keccak256\":\"0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80\",\"dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z\"]},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26\",\"dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol\":{\"keccak256\":\"0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a\",\"dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol\":{\"keccak256\":\"0xc3e1fa9d1987f8d349dfb4d6fe93bf2ca014b52ba335cfac30bfe71e357e6f80\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c5703ccdeb7b1d685e375ed719117e9edf2ab4bc544f24f23b0d50ec82257229\",\"dweb:/ipfs/QmTdwkbQq7owpCiyuzE7eh5LrD2ddrBCZ5WHVsWPi1RrTS\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Permit.sol\":{\"keccak256\":\"0xc858a86a35701004d89022a5e98819aac46ccbdc4072fc9dd43928a676b1a2ee\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://18acebb483c512c0eaafcb437f09c839972c3f0d36f0201ea7baa2926b987dd2\",\"dweb:/ipfs/Qmd9bf2noaDSYDtf6FMSzKu7LPhuf91jsVNmcoCuTCuGic\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"lib/openzeppelin-contracts/contracts/utils/Context.sol\":{\"keccak256\":\"0x75a4ee64c68dbd5f38bddd06e664a64c8271b4caa554fb6f0607dfd672bb4bf3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0c4e6cb30d3601e2f7af5af09e265508147cb275a8dcd99d6f7363645cc56867\",\"dweb:/ipfs/QmNgFkoXNWoUbAyw71rr1sKQ95Rj2GfvYiWg79xEYDn2NY\"]},\"lib/openzeppelin-contracts/contracts/utils/Nonces.sol\":{\"keccak256\":\"0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e\",\"dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ\"]},\"lib/openzeppelin-contracts/contracts/utils/ShortStrings.sol\":{\"keccak256\":\"0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c\",\"dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol\":{\"keccak256\":\"0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21\",\"dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol\":{\"keccak256\":\"0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8\",\"dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"src/currency.sol\":{\"keccak256\":\"0xcff030c4bad135b27acbe405aba19da1184c406c30fe6839b17ffcb8548938d4\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://8ca7791099d9f9851622964e2668477dbe07441c4d687621eaff725c7e25d48b\",\"dweb:/ipfs/QmdsMzD9aVqBym5bS4QnYnGtN8872iBck94NFeyfLirJ8Y\"]},\"src/interfaces/ICurrency.sol\":{\"keccak256\":\"0x3b7adace3df08c34906612358d435ffff3b90b5eec0eae34b6335cc8dcd0e7ed\",\"license\":\"GPL-3.0\",\"urls\":[\"bzz-raw://370c80ec5636bd95342256d4116f703e633e6b0467ee530397e9b5cada37f998\",\"dweb:/ipfs/QmPQ5KY37JpfuSAXpJ16kBXAQVJcE253cfjYGcBEcMLERz\"]}},\"version\":1}",
  "metadata": {
    "compiler": {
      "version": "0.8.21+commit.d9974bed"
    },
    "language": "Solidity",
    "output": {
      "abi": [
        {
          "inputs": [
            {
              "internalType": "string",
              "name": "_name",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "_symbol",
              "type": "string"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "constructor"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "AccessControlBadConfirmation"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "account",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "neededRole",
              "type": "bytes32"
            }
          ],
          "type": "error",
          "name": "AccessControlUnauthorizedAccount"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "target",
              "type": "address"
            }
          ],
          "type": "error",
          "name": "AddressEmptyCode"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "account",
              "type": "address"
            }
          ],
          "type": "error",
          "name": "AddressInsufficientBalance"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "ECDSAInvalidSignature"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "length",
              "type": "uint256"
            }
          ],
          "type": "error",
          "name": "ECDSAInvalidSignatureLength"
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "s",
              "type": "bytes32"
            }
          ],
          "type": "error",
          "name": "ECDSAInvalidSignatureS"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "spender",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "allowance",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "needed",
              "type": "uint256"
            }
          ],
          "type": "error",
          "name": "ERC20InsufficientAllowance"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "sender",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "balance",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "needed",
              "type": "uint256"
            }
          ],
          "type": "error",
          "name": "ERC20InsufficientBalance"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "approver",
              "type": "address"
            }
          ],
          "type": "error",
          "name": "ERC20InvalidApprover"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "receiver",
              "type": "address"
            }
          ],
          "type": "error",
          "name": "ERC20InvalidReceiver"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "sender",
              "type": "address"
            }
          ],
          "type": "error",
          "name": "ERC20InvalidSender"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "spender",
              "type": "address"
            }
          ],
          "type": "error",
          "name": "ERC20InvalidSpender"
        },
        {
          "inputs": [
            {
              "internalType": "uint256",
              "name": "deadline",
              "type": "uint256"
            }
          ],
          "type": "error",
          "name": "ERC2612ExpiredSignature"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "signer",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            }
          ],
          "type": "error",
          "name": "ERC2612InvalidSigner"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "FailedInnerCall"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "account",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "currentNonce",
              "type": "uint256"
            }
          ],
          "type": "error",
          "name": "InvalidAccountNonce"
        },
        {
          "inputs": [],
          "type": "error",
          "name": "InvalidShortString"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "token",
              "type": "address"
            }
          ],
          "type": "error",
          "name": "SafeERC20FailedOperation"
        },
        {
          "inputs": [
            {
              "internalType": "string",
              "name": "str",
              "type": "string"
            }
          ],
          "type": "error",
          "name": "StringTooLong"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "spender",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Approval",
          "anonymous": false
        },
        {
          "inputs": [],
          "type": "event",
          "name": "EIP712DomainChanged",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "bool",
              "name": "enabled",
              "type": "bool",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Permit2AllowanceUpdated",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "role",
              "type": "bytes32",
              "indexed": true
            },
            {
              "internalType": "bytes32",
              "name": "previousAdminRole",
              "type": "bytes32",
              "indexed": true
            },
            {
              "internalType": "bytes32",
              "name": "newAdminRole",
              "type": "bytes32",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "RoleAdminChanged",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "role",
              "type": "bytes32",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "account",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "sender",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "RoleGranted",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "role",
              "type": "bytes32",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "account",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "sender",
              "type": "address",
              "indexed": true
            }
          ],
          "type": "event",
          "name": "RoleRevoked",
          "anonymous": false
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address",
              "indexed": true
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256",
              "indexed": false
            }
          ],
          "type": "event",
          "name": "Transfer",
          "anonymous": false
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "DEFAULT_ADMIN_ROLE",
          "outputs": [
            {
              "internalType": "bytes32",
              "name": "",
              "type": "bytes32"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "DOMAIN_SEPARATOR",
          "outputs": [
            {
              "internalType": "bytes32",
              "name": "",
              "type": "bytes32"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "PERMIT2",
          "outputs": [
            {
              "internalType": "address",
              "name": "",
              "type": "address"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "spender",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "allowance",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "spender",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "approve",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "account",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "balanceOf",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "account",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "burn",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "decimals",
          "outputs": [
            {
              "internalType": "uint8",
              "name": "",
              "type": "uint8"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "eip712Domain",
          "outputs": [
            {
              "internalType": "bytes1",
              "name": "fields",
              "type": "bytes1"
            },
            {
              "internalType": "string",
              "name": "name",
              "type": "string"
            },
            {
              "internalType": "string",
              "name": "version",
              "type": "string"
            },
            {
              "internalType": "uint256",
              "name": "chainId",
              "type": "uint256"
            },
            {
              "internalType": "address",
              "name": "verifyingContract",
              "type": "address"
            },
            {
              "internalType": "bytes32",
              "name": "salt",
              "type": "bytes32"
            },
            {
              "internalType": "uint256[]",
              "name": "extensions",
              "type": "uint256[]"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "role",
              "type": "bytes32"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "getRoleAdmin",
          "outputs": [
            {
              "internalType": "bytes32",
              "name": "",
              "type": "bytes32"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "role",
              "type": "bytes32"
            },
            {
              "internalType": "address",
              "name": "account",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "grantRole"
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "role",
              "type": "bytes32"
            },
            {
              "internalType": "address",
              "name": "account",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "hasRole",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "account",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "amount",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "mint",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "name",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "owner",
              "type": "address"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "nonces",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "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"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "permit"
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "permit2Enabled",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "contract ERC20",
              "name": "token",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "recoverToken"
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "role",
              "type": "bytes32"
            },
            {
              "internalType": "address",
              "name": "callerConfirmation",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "renounceRole"
        },
        {
          "inputs": [
            {
              "internalType": "bytes32",
              "name": "role",
              "type": "bytes32"
            },
            {
              "internalType": "address",
              "name": "account",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "revokeRole"
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "account",
              "type": "address"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "setMinterRole"
        },
        {
          "inputs": [
            {
              "internalType": "bytes4",
              "name": "interfaceId",
              "type": "bytes4"
            }
          ],
          "stateMutability": "view",
          "type": "function",
          "name": "supportsInterface",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "symbol",
          "outputs": [
            {
              "internalType": "string",
              "name": "",
              "type": "string"
            }
          ]
        },
        {
          "inputs": [],
          "stateMutability": "view",
          "type": "function",
          "name": "totalSupply",
          "outputs": [
            {
              "internalType": "uint256",
              "name": "",
              "type": "uint256"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "transfer",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "address",
              "name": "from",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "to",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "value",
              "type": "uint256"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "transferFrom",
          "outputs": [
            {
              "internalType": "bool",
              "name": "",
              "type": "bool"
            }
          ]
        },
        {
          "inputs": [
            {
              "internalType": "bool",
              "name": "enabled",
              "type": "bool"
            }
          ],
          "stateMutability": "nonpayable",
          "type": "function",
          "name": "updatePermit2Allowance"
        }
      ],
      "devdoc": {
        "kind": "dev",
        "methods": {
          "DOMAIN_SEPARATOR()": {
            "details": "Returns the domain separator used in the encoding of the signature for {permit}, as defined by {EIP712}."
          },
          "allowance(address,address)": {
            "details": "The permit2 contract has full approval by default. If the approval is revoked, it can still be manually approved."
          },
          "approve(address,uint256)": {
            "details": "See {IERC20-approve}. NOTE: If `value` is the maximum `uint256`, the allowance is not updated on `transferFrom`. This is semantically equivalent to an infinite approval. Requirements: - `spender` cannot be the zero address."
          },
          "balanceOf(address)": {
            "details": "See {IERC20-balanceOf}."
          },
          "burn(address,uint256)": {
            "details": "Burns a  token",
            "params": {
              "account": "address to burn tokens from",
              "amount": "amount of tokens to burn"
            }
          },
          "decimals()": {
            "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the default value returned by this function, unless it's overridden. NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."
          },
          "eip712Domain()": {
            "details": "See {IERC-5267}."
          },
          "getRoleAdmin(bytes32)": {
            "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."
          },
          "grantRole(bytes32,address)": {
            "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event."
          },
          "hasRole(bytes32,address)": {
            "details": "Returns `true` if `account` has been granted `role`."
          },
          "mint(address,uint256)": {
            "details": "Mints a new token",
            "params": {
              "account": "address to send the minted tokens to",
              "amount": "amount of tokens to mint"
            }
          },
          "name()": {
            "details": "Returns the name of the token."
          },
          "nonces(address)": {
            "details": "Returns the current nonce for `owner`. This value must be included whenever a signature is generated for {permit}. Every successful call to {permit} increases ``owner``'s nonce by one. This prevents a signature from being used multiple times."
          },
          "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": {
            "details": "Sets `value` as the allowance of `spender` over ``owner``'s tokens, given ``owner``'s signed approval. IMPORTANT: The same issues {IERC20-approve} has related to transaction ordering also apply here. Emits an {Approval} event. Requirements: - `spender` cannot be the zero address. - `deadline` must be a timestamp in the future. - `v`, `r` and `s` must be a valid `secp256k1` signature from `owner` over the EIP712-formatted function arguments. - the signature must use ``owner``'s current nonce (see {nonces}). For more information on the signature format, see the https://eips.ethereum.org/EIPS/eip-2612#specification[relevant EIP section]. CAUTION: See Security Considerations above."
          },
          "recoverToken(address,address)": {
            "details": "withdraw token. For cases where people mistakenly send other tokens to this address",
            "params": {
              "to": "account to withdraw tokens to",
              "token": "address of the token to withdraw"
            }
          },
          "renounceRole(bytes32,address)": {
            "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event."
          },
          "revokeRole(bytes32,address)": {
            "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event."
          },
          "setMinterRole(address)": {
            "details": "sets a minter role",
            "params": {
              "account": "address for the minter role"
            }
          },
          "supportsInterface(bytes4)": {
            "details": "See {IERC165-supportsInterface}."
          },
          "symbol()": {
            "details": "Returns the symbol of the token, usually a shorter version of the name."
          },
          "totalSupply()": {
            "details": "See {IERC20-totalSupply}."
          },
          "transfer(address,uint256)": {
            "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `value`."
          },
          "transferFrom(address,address,uint256)": {
            "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `value`. - the caller must have allowance for ``from``'s tokens of at least `value`."
          },
          "updatePermit2Allowance(bool)": {
            "details": "used to update if to default approve permit2 address for all addresses",
            "params": {
              "enabled": "if the default approval should be done or not"
            }
          }
        },
        "version": 1
      },
      "userdoc": {
        "kind": "user",
        "methods": {},
        "version": 1
      }
    },
    "settings": {
      "remappings": [
        "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
        "ds-test/=lib/forge-std/lib/ds-test/src/",
        "erc4626-tests/=lib/openzeppelin-contracts/lib/erc4626-tests/",
        "forge-std/=lib/forge-std/src/",
        "openzeppelin-contracts/=lib/openzeppelin-contracts/"
      ],
      "optimizer": {
        "enabled": true,
        "runs": 1000000
      },
      "metadata": {
        "bytecodeHash": "none",
        "appendCBOR": false
      },
      "compilationTarget": {
        "src/currency.sol": "Currency"
      },
      "libraries": {}
    },
    "sources": {
      "lib/openzeppelin-contracts/contracts/access/AccessControl.sol": {
        "keccak256": "0xa0e92d42942f4f57c5be50568dac11e9d00c93efcb458026e18d2d9b9b2e7308",
        "urls": [
          "bzz-raw://46326c0bb1e296b67185e81c918e0b40501b8b6386165855df0a3f3c634b6a80",
          "dweb:/ipfs/QmTwyrDYtsxsk6pymJTK94PnEpzsmkpUxFuzEiakDopy4Z"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/access/IAccessControl.sol": {
        "keccak256": "0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41",
        "urls": [
          "bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26",
          "dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/interfaces/IERC5267.sol": {
        "keccak256": "0x92aa1df62dc3d33f1656d63bede0923e0df0b706ad4137c8b10b0a8fe549fd92",
        "urls": [
          "bzz-raw://c5c0f29195ad64cbe556da8e257dac8f05f78c53f90323c0d2accf8e6922d33a",
          "dweb:/ipfs/QmQ61TED8uaCZwcbh8KkgRSsCav7x7HbcGHwHts3U4DmUP"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol": {
        "keccak256": "0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7",
        "urls": [
          "bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f",
          "dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol": {
        "keccak256": "0xc3e1fa9d1987f8d349dfb4d6fe93bf2ca014b52ba335cfac30bfe71e357e6f80",
        "urls": [
          "bzz-raw://c5703ccdeb7b1d685e375ed719117e9edf2ab4bc544f24f23b0d50ec82257229",
          "dweb:/ipfs/QmTdwkbQq7owpCiyuzE7eh5LrD2ddrBCZ5WHVsWPi1RrTS"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": {
        "keccak256": "0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70",
        "urls": [
          "bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c",
          "dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Permit.sol": {
        "keccak256": "0xc858a86a35701004d89022a5e98819aac46ccbdc4072fc9dd43928a676b1a2ee",
        "urls": [
          "bzz-raw://18acebb483c512c0eaafcb437f09c839972c3f0d36f0201ea7baa2926b987dd2",
          "dweb:/ipfs/Qmd9bf2noaDSYDtf6FMSzKu7LPhuf91jsVNmcoCuTCuGic"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol": {
        "keccak256": "0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2",
        "urls": [
          "bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850",
          "dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol": {
        "keccak256": "0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff",
        "urls": [
          "bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d",
          "dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol": {
        "keccak256": "0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386",
        "urls": [
          "bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0",
          "dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/Address.sol": {
        "keccak256": "0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721",
        "urls": [
          "bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245",
          "dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/Context.sol": {
        "keccak256": "0x75a4ee64c68dbd5f38bddd06e664a64c8271b4caa554fb6f0607dfd672bb4bf3",
        "urls": [
          "bzz-raw://0c4e6cb30d3601e2f7af5af09e265508147cb275a8dcd99d6f7363645cc56867",
          "dweb:/ipfs/QmNgFkoXNWoUbAyw71rr1sKQ95Rj2GfvYiWg79xEYDn2NY"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/Nonces.sol": {
        "keccak256": "0x0082767004fca261c332e9ad100868327a863a88ef724e844857128845ab350f",
        "urls": [
          "bzz-raw://132dce9686a54e025eb5ba5d2e48208f847a1ec3e60a3e527766d7bf53fb7f9e",
          "dweb:/ipfs/QmXn1a2nUZMpu2z6S88UoTfMVtY2YNh86iGrzJDYmMkKeZ"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/ShortStrings.sol": {
        "keccak256": "0x18a7171df639a934592915a520ecb97c5bbc9675a1105607aac8a94e72bf62c6",
        "urls": [
          "bzz-raw://7478e1f13da69a2867ccd883001d836b75620362e743f196376d63ed0c422a1c",
          "dweb:/ipfs/QmWywcQ9TNfwtoqAxbn25d8C5VrV12PrPS9UjtGe6pL2BA"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": {
        "keccak256": "0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418",
        "urls": [
          "bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c",
          "dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/Strings.sol": {
        "keccak256": "0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792",
        "urls": [
          "bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453",
          "dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol": {
        "keccak256": "0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf",
        "urls": [
          "bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c",
          "dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/cryptography/EIP712.sol": {
        "keccak256": "0x999f705a027ed6dc2d4e0df2cc4a509852c6bfd11de1c8161bf88832d0503fd0",
        "urls": [
          "bzz-raw://0798def67258d9a3cc20b2b4da7ebf351a5cefe0abfdd665d2d81f8e32f89b21",
          "dweb:/ipfs/QmPEvJosnPfzHNjKvCv2D3891mA2Ww8eUwkqrxBjuYdHCt"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol": {
        "keccak256": "0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435",
        "urls": [
          "bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c",
          "dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/introspection/ERC165.sol": {
        "keccak256": "0x9e8778b14317ba9e256c30a76fd6c32b960af621987f56069e1e819c77c6a133",
        "urls": [
          "bzz-raw://1777404f1dcd0fac188e55a288724ec3c67b45288e49cc64723e95e702b49ab8",
          "dweb:/ipfs/QmZFdC626GButBApwDUvvTnUzdinevC3B24d7yyh57XkiA"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol": {
        "keccak256": "0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b",
        "urls": [
          "bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df",
          "dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/math/Math.sol": {
        "keccak256": "0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d",
        "urls": [
          "bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875",
          "dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L"
        ],
        "license": "MIT"
      },
      "lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol": {
        "keccak256": "0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72",
        "urls": [
          "bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc",
          "dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT"
        ],
        "license": "MIT"
      },
      "src/currency.sol": {
        "keccak256": "0xcff030c4bad135b27acbe405aba19da1184c406c30fe6839b17ffcb8548938d4",
        "urls": [
          "bzz-raw://8ca7791099d9f9851622964e2668477dbe07441c4d687621eaff725c7e25d48b",
          "dweb:/ipfs/QmdsMzD9aVqBym5bS4QnYnGtN8872iBck94NFeyfLirJ8Y"
        ],
        "license": "GPL-3.0"
      },
      "src/interfaces/ICurrency.sol": {
        "keccak256": "0x3b7adace3df08c34906612358d435ffff3b90b5eec0eae34b6335cc8dcd0e7ed",
        "urls": [
          "bzz-raw://370c80ec5636bd95342256d4116f703e633e6b0467ee530397e9b5cada37f998",
          "dweb:/ipfs/QmPQ5KY37JpfuSAXpJ16kBXAQVJcE253cfjYGcBEcMLERz"
        ],
        "license": "GPL-3.0"
      }
    },
    "version": 1
  },
  "ast": {
    "absolutePath": "src/currency.sol",
    "id": 48348,
    "exportedSymbols": {
      "AccessControl": [43683],
      "Currency": [48347],
      "ERC20": [44443],
      "ERC20Permit": [44675],
      "ICurrency": [48595],
      "SafeERC20": [45027]
    },
    "nodeType": "SourceUnit",
    "src": "36:3100:44",
    "nodes": [
      {
        "id": 48131,
        "nodeType": "PragmaDirective",
        "src": "36:23:44",
        "nodes": [],
        "literals": ["solidity", "0.8", ".21"]
      },
      {
        "id": 48133,
        "nodeType": "ImportDirective",
        "src": "108:79:44",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts/contracts/access/AccessControl.sol",
        "file": "@openzeppelin/contracts/access/AccessControl.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 48348,
        "sourceUnit": 43684,
        "symbolAliases": [
          {
            "foreign": {
              "id": 48132,
              "name": "AccessControl",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 43683,
              "src": "116:13:44",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 48136,
        "nodeType": "ImportDirective",
        "src": "188:98:44",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts/contracts/token/ERC20/extensions/ERC20Permit.sol",
        "file": "@openzeppelin/contracts/token/ERC20/extensions/ERC20Permit.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 48348,
        "sourceUnit": 44676,
        "symbolAliases": [
          {
            "foreign": {
              "id": 48134,
              "name": "ERC20Permit",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 44675,
              "src": "196:11:44",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          },
          {
            "foreign": {
              "id": 48135,
              "name": "ERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 44443,
              "src": "209:5:44",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 48138,
        "nodeType": "ImportDirective",
        "src": "287:82:44",
        "nodes": [],
        "absolutePath": "lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 48348,
        "sourceUnit": 45028,
        "symbolAliases": [
          {
            "foreign": {
              "id": 48137,
              "name": "SafeERC20",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 45027,
              "src": "295:9:44",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 48140,
        "nodeType": "ImportDirective",
        "src": "370:53:44",
        "nodes": [],
        "absolutePath": "src/interfaces/ICurrency.sol",
        "file": "./interfaces/ICurrency.sol",
        "nameLocation": "-1:-1:-1",
        "scope": 48348,
        "sourceUnit": 48596,
        "symbolAliases": [
          {
            "foreign": {
              "id": 48139,
              "name": "ICurrency",
              "nodeType": "Identifier",
              "overloadedDeclarations": [],
              "referencedDeclaration": 48595,
              "src": "378:9:44",
              "typeDescriptions": {}
            },
            "nameLocation": "-1:-1:-1"
          }
        ],
        "unitAlias": ""
      },
      {
        "id": 48347,
        "nodeType": "ContractDefinition",
        "src": "425:2710:44",
        "nodes": [
          {
            "id": 48151,
            "nodeType": "VariableDeclaration",
            "src": "490:69:44",
            "nodes": [],
            "constant": true,
            "mutability": "constant",
            "name": "MINTER_BURNER_ROLE",
            "nameLocation": "507:18:44",
            "scope": 48347,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 48147,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "490:7:44",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "4d494e5445525f4255524e45525f524f4c45",
                  "id": 48149,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "538:20:44",
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_cfd53186d792f1ec9d0679afc2dc3ffc86fc31fe1e0f342b838eb6c3eade62b3",
                    "typeString": "literal_string \"MINTER_BURNER_ROLE\""
                  },
                  "value": "MINTER_BURNER_ROLE"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_cfd53186d792f1ec9d0679afc2dc3ffc86fc31fe1e0f342b838eb6c3eade62b3",
                    "typeString": "literal_string \"MINTER_BURNER_ROLE\""
                  }
                ],
                "id": 48148,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": -8,
                "src": "528:9:44",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 48150,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "nameLocations": [],
              "names": [],
              "nodeType": "FunctionCall",
              "src": "528:31:44",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "internal"
          },
          {
            "id": 48154,
            "nodeType": "VariableDeclaration",
            "src": "617:76:44",
            "nodes": [],
            "constant": true,
            "functionSelector": "6afdd850",
            "mutability": "constant",
            "name": "PERMIT2",
            "nameLocation": "641:7:44",
            "scope": 48347,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_address",
              "typeString": "address"
            },
            "typeName": {
              "id": 48152,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "617:7:44",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            },
            "value": {
              "hexValue": "307830303030303030303030323244343733303330463131366444454539463642343361433738424133",
              "id": 48153,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "651:42:44",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              },
              "value": "0x000000000022D473030F116dDEE9F6B43aC78BA3"
            },
            "visibility": "public"
          },
          {
            "id": 48156,
            "nodeType": "VariableDeclaration",
            "src": "720:26:44",
            "nodes": [],
            "constant": false,
            "functionSelector": "407c48b4",
            "mutability": "mutable",
            "name": "permit2Enabled",
            "nameLocation": "732:14:44",
            "scope": 48347,
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bool",
              "typeString": "bool"
            },
            "typeName": {
              "id": 48155,
              "name": "bool",
              "nodeType": "ElementaryTypeName",
              "src": "720:4:44",
              "typeDescriptions": {
                "typeIdentifier": "t_bool",
                "typeString": "bool"
              }
            },
            "visibility": "public"
          },
          {
            "id": 48181,
            "nodeType": "FunctionDefinition",
            "src": "797:189:44",
            "nodes": [],
            "body": {
              "id": 48180,
              "nodeType": "Block",
              "src": "896:90:44",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 48171,
                        "name": "DEFAULT_ADMIN_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 43417,
                        "src": "917:18:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "expression": {
                          "id": 48172,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "937:3:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 48173,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberLocation": "941:6:44",
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "937:10:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 48170,
                      "name": "_grantRole",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43644,
                      "src": "906:10:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$",
                        "typeString": "function (bytes32,address) returns (bool)"
                      }
                    },
                    "id": 48174,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "906:42:44",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 48175,
                  "nodeType": "ExpressionStatement",
                  "src": "906:42:44"
                },
                {
                  "expression": {
                    "id": 48178,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 48176,
                      "name": "permit2Enabled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 48156,
                      "src": "958:14:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "hexValue": "74727565",
                      "id": 48177,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "bool",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "975:4:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "value": "true"
                    },
                    "src": "958:21:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 48179,
                  "nodeType": "ExpressionStatement",
                  "src": "958:21:44"
                }
              ]
            },
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 48163,
                    "name": "_name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 48158,
                    "src": "859:5:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "id": 48164,
                    "name": "_symbol",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 48160,
                    "src": "866:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  }
                ],
                "id": 48165,
                "kind": "baseConstructorSpecifier",
                "modifierName": {
                  "id": 48162,
                  "name": "ERC20",
                  "nameLocations": ["853:5:44"],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 44443,
                  "src": "853:5:44"
                },
                "nodeType": "ModifierInvocation",
                "src": "853:21:44"
              },
              {
                "arguments": [
                  {
                    "id": 48167,
                    "name": "_symbol",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 48160,
                    "src": "887:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  }
                ],
                "id": 48168,
                "kind": "baseConstructorSpecifier",
                "modifierName": {
                  "id": 48166,
                  "name": "ERC20Permit",
                  "nameLocations": ["875:11:44"],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 44675,
                  "src": "875:11:44"
                },
                "nodeType": "ModifierInvocation",
                "src": "875:20:44"
              }
            ],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "parameters": {
              "id": 48161,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 48158,
                  "mutability": "mutable",
                  "name": "_name",
                  "nameLocation": "823:5:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 48181,
                  "src": "809:19:44",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 48157,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "809:6:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 48160,
                  "mutability": "mutable",
                  "name": "_symbol",
                  "nameLocation": "844:7:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 48181,
                  "src": "830:21:44",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 48159,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "830:6:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "808:44:44"
            },
            "returnParameters": {
              "id": 48169,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "896:0:44"
            },
            "scope": 48347,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 48196,
            "nodeType": "FunctionDefinition",
            "src": "1089:134:44",
            "nodes": [],
            "body": {
              "id": 48195,
              "nodeType": "Block",
              "src": "1167:56:44",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 48191,
                        "name": "MINTER_BURNER_ROLE",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 48151,
                        "src": "1188:18:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "id": 48192,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 48184,
                        "src": "1208:7:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 48190,
                      "name": "_grantRole",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 43644,
                      "src": "1177:10:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$",
                        "typeString": "function (bytes32,address) returns (bool)"
                      }
                    },
                    "id": 48193,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1177:39:44",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 48194,
                  "nodeType": "ExpressionStatement",
                  "src": "1177:39:44"
                }
              ]
            },
            "documentation": {
              "id": 48182,
              "nodeType": "StructuredDocumentation",
              "src": "992:92:44",
              "text": " @dev sets a minter role\n @param account address for the minter role"
            },
            "functionSelector": "945d1229",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 48187,
                    "name": "DEFAULT_ADMIN_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 43417,
                    "src": "1147:18:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 48188,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 48186,
                  "name": "onlyRole",
                  "nameLocations": ["1138:8:44"],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 43428,
                  "src": "1138:8:44"
                },
                "nodeType": "ModifierInvocation",
                "src": "1138:28:44"
              }
            ],
            "name": "setMinterRole",
            "nameLocation": "1098:13:44",
            "parameters": {
              "id": 48185,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 48184,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "1120:7:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 48196,
                  "src": "1112:15:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 48183,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1112:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1111:17:44"
            },
            "returnParameters": {
              "id": 48189,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1167:0:44"
            },
            "scope": 48347,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 48217,
            "nodeType": "FunctionDefinition",
            "src": "1380:160:44",
            "nodes": [],
            "body": {
              "id": 48216,
              "nodeType": "Block",
              "src": "1480:60:44",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 48210,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 48199,
                        "src": "1496:7:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 48211,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 48201,
                        "src": "1505:6:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 48209,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44283,
                      "src": "1490:5:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 48212,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1490:22:44",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 48213,
                  "nodeType": "ExpressionStatement",
                  "src": "1490:22:44"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 48214,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1529:4:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 48208,
                  "id": 48215,
                  "nodeType": "Return",
                  "src": "1522:11:44"
                }
              ]
            },
            "baseFunctions": [48585],
            "documentation": {
              "id": 48197,
              "nodeType": "StructuredDocumentation",
              "src": "1229:146:44",
              "text": " @dev Mints a new token\n @param account address to send the minted tokens to\n @param amount amount of tokens to mint"
            },
            "functionSelector": "40c10f19",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 48204,
                    "name": "MINTER_BURNER_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 48151,
                    "src": "1445:18:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 48205,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 48203,
                  "name": "onlyRole",
                  "nameLocations": ["1436:8:44"],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 43428,
                  "src": "1436:8:44"
                },
                "nodeType": "ModifierInvocation",
                "src": "1436:28:44"
              }
            ],
            "name": "mint",
            "nameLocation": "1389:4:44",
            "parameters": {
              "id": 48202,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 48199,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "1402:7:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 48217,
                  "src": "1394:15:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 48198,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1394:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 48201,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "1419:6:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 48217,
                  "src": "1411:14:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 48200,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1411:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1393:33:44"
            },
            "returnParameters": {
              "id": 48208,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 48207,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 48217,
                  "src": "1474:4:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 48206,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1474:4:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1473:6:44"
            },
            "scope": 48347,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 48238,
            "nodeType": "FunctionDefinition",
            "src": "1685:160:44",
            "nodes": [],
            "body": {
              "id": 48237,
              "nodeType": "Block",
              "src": "1785:60:44",
              "nodes": [],
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 48231,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 48220,
                        "src": "1801:7:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 48232,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 48222,
                        "src": "1810:6:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 48230,
                      "name": "_burn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 44316,
                      "src": "1795:5:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 48233,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1795:22:44",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 48234,
                  "nodeType": "ExpressionStatement",
                  "src": "1795:22:44"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 48235,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "1834:4:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 48229,
                  "id": 48236,
                  "nodeType": "Return",
                  "src": "1827:11:44"
                }
              ]
            },
            "baseFunctions": [48594],
            "documentation": {
              "id": 48218,
              "nodeType": "StructuredDocumentation",
              "src": "1546:134:44",
              "text": " @dev Burns a  token\n @param account address to burn tokens from\n @param amount amount of tokens to burn"
            },
            "functionSelector": "9dc29fac",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 48225,
                    "name": "MINTER_BURNER_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 48151,
                    "src": "1750:18:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 48226,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 48224,
                  "name": "onlyRole",
                  "nameLocations": ["1741:8:44"],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 43428,
                  "src": "1741:8:44"
                },
                "nodeType": "ModifierInvocation",
                "src": "1741:28:44"
              }
            ],
            "name": "burn",
            "nameLocation": "1694:4:44",
            "parameters": {
              "id": 48223,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 48220,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "1707:7:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 48238,
                  "src": "1699:15:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 48219,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1699:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 48222,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "1724:6:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 48238,
                  "src": "1716:14:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 48221,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "1716:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1698:33:44"
            },
            "returnParameters": {
              "id": 48229,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 48228,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 48238,
                  "src": "1779:4:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 48227,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "1779:4:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1778:6:44"
            },
            "scope": 48347,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 48256,
            "nodeType": "FunctionDefinition",
            "src": "2018:172:44",
            "nodes": [],
            "body": {
              "id": 48255,
              "nodeType": "Block",
              "src": "2102:88:44",
              "nodes": [],
              "statements": [
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 48248,
                        "name": "enabled",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 48241,
                        "src": "2141:7:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 48247,
                      "name": "Permit2AllowanceUpdated",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 48576,
                      "src": "2117:23:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bool_$returns$__$",
                        "typeString": "function (bool)"
                      }
                    },
                    "id": 48249,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2117:32:44",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 48250,
                  "nodeType": "EmitStatement",
                  "src": "2112:37:44"
                },
                {
                  "expression": {
                    "id": 48253,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 48251,
                      "name": "permit2Enabled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 48156,
                      "src": "2159:14:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 48252,
                      "name": "enabled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 48241,
                      "src": "2176:7:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "2159:24:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 48254,
                  "nodeType": "ExpressionStatement",
                  "src": "2159:24:44"
                }
              ]
            },
            "documentation": {
              "id": 48239,
              "nodeType": "StructuredDocumentation",
              "src": "1851:162:44",
              "text": " @dev used to update if to default approve permit2 address for all addresses\n @param enabled if the default approval should be done or not"
            },
            "functionSelector": "705e6a5b",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 48244,
                    "name": "DEFAULT_ADMIN_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 43417,
                    "src": "2082:18:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 48245,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 48243,
                  "name": "onlyRole",
                  "nameLocations": ["2073:8:44"],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 43428,
                  "src": "2073:8:44"
                },
                "nodeType": "ModifierInvocation",
                "src": "2073:28:44"
              }
            ],
            "name": "updatePermit2Allowance",
            "nameLocation": "2027:22:44",
            "parameters": {
              "id": 48242,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 48241,
                  "mutability": "mutable",
                  "name": "enabled",
                  "nameLocation": "2055:7:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 48256,
                  "src": "2050:12:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 48240,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "2050:4:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2049:14:44"
            },
            "returnParameters": {
              "id": 48246,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2102:0:44"
            },
            "scope": 48347,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "external"
          },
          {
            "id": 48286,
            "nodeType": "FunctionDefinition",
            "src": "2323:221:44",
            "nodes": [],
            "body": {
              "id": 48285,
              "nodeType": "Block",
              "src": "2413:131:44",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 48271,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "id": 48269,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "id": 48267,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 48261,
                        "src": "2427:7:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "==",
                      "rightExpression": {
                        "id": 48268,
                        "name": "PERMIT2",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 48154,
                        "src": "2438:7:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "src": "2427:18:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "&&",
                    "rightExpression": {
                      "id": 48270,
                      "name": "permit2Enabled",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 48156,
                      "src": "2449:14:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "2427:36:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 48278,
                  "nodeType": "IfStatement",
                  "src": "2423:66:44",
                  "trueBody": {
                    "expression": {
                      "expression": {
                        "arguments": [
                          {
                            "id": 48274,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "2477:7:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 48273,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "2477:7:44",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            }
                          ],
                          "id": 48272,
                          "name": "type",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -27,
                          "src": "2472:4:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                            "typeString": "function () pure"
                          }
                        },
                        "id": 48275,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "nameLocations": [],
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2472:13:44",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_meta_type_t_uint256",
                          "typeString": "type(uint256)"
                        }
                      },
                      "id": 48276,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberLocation": "2486:3:44",
                      "memberName": "max",
                      "nodeType": "MemberAccess",
                      "src": "2472:17:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "functionReturnParameters": 48266,
                    "id": 48277,
                    "nodeType": "Return",
                    "src": "2465:24:44"
                  }
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 48281,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 48259,
                        "src": "2522:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 48282,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 48261,
                        "src": "2529:7:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 48279,
                        "name": "super",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -25,
                        "src": "2506:5:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_super$_Currency_$48347_$",
                          "typeString": "type(contract super Currency)"
                        }
                      },
                      "id": 48280,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberLocation": "2512:9:44",
                      "memberName": "allowance",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 44070,
                      "src": "2506:15:44",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address,address) view returns (uint256)"
                      }
                    },
                    "id": 48283,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "nameLocations": [],
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2506:31:44",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 48266,
                  "id": 48284,
                  "nodeType": "Return",
                  "src": "2499:38:44"
                }
              ]
            },
            "baseFunctions": [44070],
            "documentation": {
              "id": 48257,
              "nodeType": "StructuredDocumentation",
              "src": "2196:122:44",
              "text": "@dev The permit2 contract has full approval by default. If the approval is revoked, it can still be manually approved."
            },
            "functionSelector": "dd62ed3e",
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "allowance",
            "nameLocation": "2332:9:44",
            "overrides": {
              "id": 48263,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "2386:8:44"
            },
            "parameters": {
              "id": 48262,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 48259,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "2350:5:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 48286,
                  "src": "2342:13:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 48258,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2342:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 48261,
                  "mutability": "mutable",
                  "name": "spender",
                  "nameLocation": "2365:7:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 48286,
                  "src": "2357:15:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 48260,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2357:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2341:32:44"
            },
            "returnParameters": {
              "id": 48266,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 48265,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 48286,
                  "src": "2404:7:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 48264,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "2404:7:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2403:9:44"
            },
            "scope": 48347,
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "id": 48346,
            "nodeType": "FunctionDefinition",
            "src": "2762:371:44",
            "nodes": [],
            "body": {
              "id": 48345,
              "nodeType": "Block",
              "src": "2845:288:44",
              "nodes": [],
              "statements": [
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 48306,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "arguments": [
                        {
                          "id": 48300,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 48290,
                          "src": "2867:5:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_contract$_ERC20_$44443",
                            "typeString": "contract ERC20"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_contract$_ERC20_$44443",
                            "typeString": "contract ERC20"
                          }
                        ],
                        "id": 48299,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2859:7:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 48298,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2859:7:44",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 48301,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2859:14:44",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 48304,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "2885:1:44",
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 48303,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "2877:7:44",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 48302,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "2877:7:44",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 48305,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "nameLocations": [],
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "2877:10:44",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "2859:28:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 48343,
                    "nodeType": "Block",
                    "src": "2985:142:44",
                    "statements": [
                      {
                        "assignments": [48323, null],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 48323,
                            "mutability": "mutable",
                            "name": "success",
                            "nameLocation": "3005:7:44",
                            "nodeType": "VariableDeclaration",
                            "scope": 48343,
                            "src": "3000:12:44",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "typeName": {
                              "id": 48322,
                              "name": "bool",
                              "nodeType": "ElementaryTypeName",
                              "src": "3000:4:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "visibility": "internal"
                          },
                          null
                        ],
                        "id": 48337,
                        "initialValue": {
                          "arguments": [
                            {
                              "hexValue": "",
                              "id": 48335,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3064:2:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              },
                              "value": ""
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                "typeString": "literal_string \"\""
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                  "typeString": "literal_string \"\""
                                }
                              ],
                              "expression": {
                                "arguments": [
                                  {
                                    "id": 48326,
                                    "name": "to",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 48292,
                                    "src": "3025:2:44",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 48325,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": true,
                                  "lValueRequested": false,
                                  "nodeType": "ElementaryTypeNameExpression",
                                  "src": "3017:8:44",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_type$_t_address_payable_$",
                                    "typeString": "type(address payable)"
                                  },
                                  "typeName": {
                                    "id": 48324,
                                    "name": "address",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "3017:8:44",
                                    "stateMutability": "payable",
                                    "typeDescriptions": {}
                                  }
                                },
                                "id": 48327,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "typeConversion",
                                "lValueRequested": false,
                                "nameLocations": [],
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "3017:11:44",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address_payable",
                                  "typeString": "address payable"
                                }
                              },
                              "id": 48328,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberLocation": "3029:4:44",
                              "memberName": "call",
                              "nodeType": "MemberAccess",
                              "src": "3017:16:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                              }
                            },
                            "id": 48334,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "names": ["value"],
                            "nodeType": "FunctionCallOptions",
                            "options": [
                              {
                                "expression": {
                                  "arguments": [
                                    {
                                      "id": 48331,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "3049:4:44",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Currency_$48347",
                                        "typeString": "contract Currency"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_Currency_$48347",
                                        "typeString": "contract Currency"
                                      }
                                    ],
                                    "id": 48330,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "3041:7:44",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 48329,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "3041:7:44",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 48332,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "3041:13:44",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "id": 48333,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "3055:7:44",
                                "memberName": "balance",
                                "nodeType": "MemberAccess",
                                "src": "3041:21:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "src": "3017:46:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                              "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                            }
                          },
                          "id": 48336,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3017:50:44",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                            "typeString": "tuple(bool,bytes memory)"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "2999:68:44"
                      },
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 48339,
                              "name": "success",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 48323,
                              "src": "3089:7:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "7769746864726177206661696c6564",
                              "id": 48340,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "3098:17:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_f788322002b8424ed68b8abd50be064ad13f3c130a8b07f2a88c6b5024ee35fe",
                                "typeString": "literal_string \"withdraw failed\""
                              },
                              "value": "withdraw failed"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_f788322002b8424ed68b8abd50be064ad13f3c130a8b07f2a88c6b5024ee35fe",
                                "typeString": "literal_string \"withdraw failed\""
                              }
                            ],
                            "id": 48338,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [-18, -18],
                            "referencedDeclaration": -18,
                            "src": "3081:7:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 48341,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "3081:35:44",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 48342,
                        "nodeType": "ExpressionStatement",
                        "src": "3081:35:44"
                      }
                    ]
                  },
                  "id": 48344,
                  "nodeType": "IfStatement",
                  "src": "2855:272:44",
                  "trueBody": {
                    "id": 48321,
                    "nodeType": "Block",
                    "src": "2889:90:44",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 48310,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 48290,
                              "src": "2926:5:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_ERC20_$44443",
                                "typeString": "contract ERC20"
                              }
                            },
                            {
                              "id": 48311,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 48292,
                              "src": "2933:2:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "arguments": [
                                {
                                  "arguments": [
                                    {
                                      "id": 48316,
                                      "name": "this",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -28,
                                      "src": "2961:4:44",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_contract$_Currency_$48347",
                                        "typeString": "contract Currency"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_contract$_Currency_$48347",
                                        "typeString": "contract Currency"
                                      }
                                    ],
                                    "id": 48315,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "lValueRequested": false,
                                    "nodeType": "ElementaryTypeNameExpression",
                                    "src": "2953:7:44",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_type$_t_address_$",
                                      "typeString": "type(address)"
                                    },
                                    "typeName": {
                                      "id": 48314,
                                      "name": "address",
                                      "nodeType": "ElementaryTypeName",
                                      "src": "2953:7:44",
                                      "typeDescriptions": {}
                                    }
                                  },
                                  "id": 48317,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "typeConversion",
                                  "lValueRequested": false,
                                  "nameLocations": [],
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "2953:13:44",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "expression": {
                                  "id": 48312,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 48290,
                                  "src": "2937:5:44",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_ERC20_$44443",
                                    "typeString": "contract ERC20"
                                  }
                                },
                                "id": 48313,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberLocation": "2943:9:44",
                                "memberName": "balanceOf",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 44029,
                                "src": "2937:15:44",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_external_view$_t_address_$returns$_t_uint256_$",
                                  "typeString": "function (address) view external returns (uint256)"
                                }
                              },
                              "id": 48318,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "nameLocations": [],
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "2937:30:44",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_contract$_ERC20_$44443",
                                "typeString": "contract ERC20"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "id": 48307,
                              "name": "SafeERC20",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 45027,
                              "src": "2903:9:44",
                              "typeDescriptions": {
                                "typeIdentifier": "t_type$_t_contract$_SafeERC20_$45027_$",
                                "typeString": "type(library SafeERC20)"
                              }
                            },
                            "id": 48309,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberLocation": "2913:12:44",
                            "memberName": "safeTransfer",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 44787,
                            "src": "2903:22:44",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$44521_$_t_address_$_t_uint256_$returns$__$",
                              "typeString": "function (contract IERC20,address,uint256)"
                            }
                          },
                          "id": 48319,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "nameLocations": [],
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "2903:65:44",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 48320,
                        "nodeType": "ExpressionStatement",
                        "src": "2903:65:44"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 48287,
              "nodeType": "StructuredDocumentation",
              "src": "2550:207:44",
              "text": " @dev withdraw token. For cases where people mistakenly send other tokens to this address\n @param token address of the token to withdraw\n @param to account to withdraw tokens to"
            },
            "functionSelector": "feaea586",
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 48295,
                    "name": "DEFAULT_ADMIN_ROLE",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 43417,
                    "src": "2825:18:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  }
                ],
                "id": 48296,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 48294,
                  "name": "onlyRole",
                  "nameLocations": ["2816:8:44"],
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 43428,
                  "src": "2816:8:44"
                },
                "nodeType": "ModifierInvocation",
                "src": "2816:28:44"
              }
            ],
            "name": "recoverToken",
            "nameLocation": "2771:12:44",
            "parameters": {
              "id": 48293,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 48290,
                  "mutability": "mutable",
                  "name": "token",
                  "nameLocation": "2790:5:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 48346,
                  "src": "2784:11:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$44443",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "id": 48289,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 48288,
                      "name": "ERC20",
                      "nameLocations": ["2784:5:44"],
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 44443,
                      "src": "2784:5:44"
                    },
                    "referencedDeclaration": 44443,
                    "src": "2784:5:44",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$44443",
                      "typeString": "contract ERC20"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 48292,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "2805:2:44",
                  "nodeType": "VariableDeclaration",
                  "scope": 48346,
                  "src": "2797:10:44",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 48291,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2797:7:44",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2783:25:44"
            },
            "returnParameters": {
              "id": 48297,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2845:0:44"
            },
            "scope": 48347,
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 48141,
              "name": "AccessControl",
              "nameLocations": ["446:13:44"],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 43683,
              "src": "446:13:44"
            },
            "id": 48142,
            "nodeType": "InheritanceSpecifier",
            "src": "446:13:44"
          },
          {
            "baseName": {
              "id": 48143,
              "name": "ERC20Permit",
              "nameLocations": ["461:11:44"],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 44675,
              "src": "461:11:44"
            },
            "id": 48144,
            "nodeType": "InheritanceSpecifier",
            "src": "461:11:44"
          },
          {
            "baseName": {
              "id": 48145,
              "name": "ICurrency",
              "nameLocations": ["474:9:44"],
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 48595,
              "src": "474:9:44"
            },
            "id": 48146,
            "nodeType": "InheritanceSpecifier",
            "src": "474:9:44"
          }
        ],
        "canonicalName": "Currency",
        "contractDependencies": [],
        "contractKind": "contract",
        "fullyImplemented": true,
        "linearizedBaseContracts": [
          48347, 48595, 44675, 45370, 46527, 43791, 44737, 44443, 43833, 44701, 44521, 43683, 46625,
          46637, 43766, 45302
        ],
        "name": "Currency",
        "nameLocation": "434:8:44",
        "scope": 48348,
        "usedErrors": [
          43693, 43696, 43803, 43808, 43813, 43822, 43827, 43832, 44552, 44559, 44754, 45035, 45040,
          45043, 45312, 45384, 45386, 45963, 45968, 45973
        ],
        "usedEvents": [43705, 43714, 43723, 43771, 44455, 44464, 48576]
      }
    ],
    "license": "GPL-3.0"
  },
  "id": 44
}