{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name_",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol_",
          "type": "string"
        },
        {
          "internalType": "address[]",
          "name": "defaultOperators_",
          "type": "address[]"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "owner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "value",
          "type": "uint256"
        }
      ],
      "name": "Approval",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenHolder",
          "type": "address"
        }
      ],
      "name": "AuthorizedOperator",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "operatorData",
          "type": "bytes"
        }
      ],
      "name": "Burned",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "operatorData",
          "type": "bytes"
        }
      ],
      "name": "Minted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "tokenHolder",
          "type": "address"
        }
      ],
      "name": "RevokedOperator",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "indexed": false,
          "internalType": "bytes",
          "name": "operatorData",
          "type": "bytes"
        }
      ],
      "name": "Sent",
      "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": [
        {
          "internalType": "address",
          "name": "holder",
          "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": "operator",
          "type": "address"
        }
      ],
      "name": "authorizeOperator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "tokenHolder",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "burn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "defaultOperators",
      "outputs": [
        {
          "internalType": "address[]",
          "name": "",
          "type": "address[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "granularity",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "tokenHolder",
          "type": "address"
        }
      ],
      "name": "isOperatorFor",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "operatorData",
          "type": "bytes"
        }
      ],
      "name": "operatorBurn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "sender",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        },
        {
          "internalType": "bytes",
          "name": "operatorData",
          "type": "bytes"
        }
      ],
      "name": "operatorSend",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "operator",
          "type": "address"
        }
      ],
      "name": "revokeOperator",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "send",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "holder",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "recipient",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x60806040523480156200001157600080fd5b5060405162001b8238038062001b828339810160408190526200003491620003f1565b82516200004990600290602086019062000215565b5081516200005f90600390602085019062000215565b50805162000075906004906020840190620002a4565b5060005b8151811015620000e5576001600560008484815181106200009e576200009e62000508565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580620000dc816200051e565b91505062000079565b506040516329965a1d60e01b815230600482018190527fac7fbab5f54a3ca8194167523c6753bfeb96a445279294b6125b68cce217705460248301526044820152731820a4b7618bde71dce8cdc73aab6c95905fad24906329965a1d90606401600060405180830381600087803b1580156200016057600080fd5b505af115801562000175573d6000803e3d6000fd5b50506040516329965a1d60e01b815230600482018190527faea199e31a596269b42cdafd93407f14436db6e4cad65417994c2eb37381e05a60248301526044820152731820a4b7618bde71dce8cdc73aab6c95905fad2492506329965a1d9150606401600060405180830381600087803b158015620001f357600080fd5b505af115801562000208573d6000803e3d6000fd5b5050505050505062000582565b828054620002239062000546565b90600052602060002090601f01602090048101928262000247576000855562000292565b82601f106200026257805160ff191683800117855562000292565b8280016001018555821562000292579182015b828111156200029257825182559160200191906001019062000275565b50620002a0929150620002fc565b5090565b82805482825590600052602060002090810192821562000292579160200282015b828111156200029257825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620002c5565b5b80821115620002a05760008155600101620002fd565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b038111828210171562000354576200035462000313565b604052919050565b600082601f8301126200036e57600080fd5b81516001600160401b038111156200038a576200038a62000313565b6020620003a0601f8301601f1916820162000329565b8281528582848701011115620003b557600080fd5b60005b83811015620003d5578581018301518282018401528201620003b8565b83811115620003e75760008385840101525b5095945050505050565b6000806000606084860312156200040757600080fd5b83516001600160401b03808211156200041f57600080fd5b6200042d878388016200035c565b94506020915081860151818111156200044557600080fd5b62000453888289016200035c565b9450506040860151818111156200046957600080fd5b8601601f810188136200047b57600080fd5b80518281111562000490576200049062000313565b8060051b9250620004a384840162000329565b818152928201840192848101908a851115620004be57600080fd5b928501925b84841015620004f857835192506001600160a01b0383168314620004e75760008081fd5b8282529285019290850190620004c3565b8096505050505050509250925092565b634e487b7160e01b600052603260045260246000fd5b6000600182016200053f57634e487b7160e01b600052601160045260246000fd5b5060010190565b600181811c908216806200055b57607f821691505b6020821081036200057c57634e487b7160e01b600052602260045260246000fd5b50919050565b6115f080620005926000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c8063959b8c3f116100a2578063d95b637111610071578063d95b63711461022b578063dd62ed3e1461023e578063fad8b32a14610277578063fc673c4f1461028a578063fe9d93031461029d57600080fd5b8063959b8c3f146101ea57806395d89b41146101fd5780639bd9bbc614610205578063a9059cbb1461021857600080fd5b806323b872dd116100e957806323b872dd14610183578063313ce56714610196578063556f0dc7146101a557806362ad1b83146101ac57806370a08231146101c157600080fd5b806306e485381461011b57806306fdde0314610139578063095ea7b31461014e57806318160ddd14610171575b600080fd5b6101236102b0565b604051610130919061108e565b60405180910390f35b610141610312565b6040516101309190611128565b61016161015c366004611153565b61039b565b6040519015158152602001610130565b6001545b604051908152602001610130565b61016161019136600461117f565b6103b3565b60405160128152602001610130565b6001610175565b6101bf6101ba366004611263565b6103f9565b005b6101756101cf3660046112f6565b6001600160a01b031660009081526020819052604090205490565b6101bf6101f83660046112f6565b61043e565b61014161055b565b6101bf610213366004611313565b61056a565b610161610226366004611153565b61058d565b61016161023936600461136c565b6105c5565b61017561024c36600461136c565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b6101bf6102853660046112f6565b610667565b6101bf6102983660046113a5565b610782565b6101bf6102ab366004611425565b6107ba565b6060600480548060200260200160405190810160405280929190818152602001828054801561030857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116102ea575b5050505050905090565b6060600280546103219061146c565b80601f016020809104026020016040519081016040528092919081815260200182805461034d9061146c565b80156103085780601f1061036f57610100808354040283529160200191610308565b820191906000526020600020905b81548152906001019060200180831161037d57509395945050505050565b6000336103a98185856107d9565b5060019392505050565b6000336103c1858285610900565b6103ee8585856040518060200160405280600081525060405180602001604052806000815250600061098c565b506001949350505050565b61040333866105c5565b6104285760405162461bcd60e51b815260040161041f906114a6565b60405180910390fd5b6104378585858585600161098c565b5050505050565b6001600160a01b03811633036104a25760405162461bcd60e51b8152602060048201526024808201527f4552433737373a20617574686f72697a696e672073656c66206173206f70657260448201526330ba37b960e11b606482015260840161041f565b6001600160a01b03811660009081526005602052604090205460ff16156104f3573360009081526007602090815260408083206001600160a01b03851684529091529020805460ff19169055610522565b3360009081526006602090815260408083206001600160a01b03851684529091529020805460ff191660011790555b60405133906001600160a01b038316907ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f990600090a350565b6060600380546103219061146c565b6105883384848460405180602001604052806000815250600161098c565b505050565b60006105bc3384846040518060200160405280600081525060405180602001604052806000815250600061098c565b50600192915050565b6000816001600160a01b0316836001600160a01b0316148061063057506001600160a01b03831660009081526005602052604090205460ff16801561063057506001600160a01b0380831660009081526007602090815260408083209387168352929052205460ff16155b8061066057506001600160a01b0380831660009081526006602090815260408083209387168352929052205460ff165b9392505050565b336001600160a01b038216036106c95760405162461bcd60e51b815260206004820152602160248201527f4552433737373a207265766f6b696e672073656c66206173206f70657261746f6044820152603960f91b606482015260840161041f565b6001600160a01b03811660009081526005602052604090205460ff161561071d573360009081526007602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610749565b3360009081526006602090815260408083206001600160a01b03851684529091529020805460ff191690555b60405133906001600160a01b038316907f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa190600090a350565b61078c33856105c5565b6107a85760405162461bcd60e51b815260040161041f906114a6565b6107b484848484610a88565b50505050565b6107d533838360405180602001604052806000815250610a88565b5050565b6001600160a01b03831661083d5760405162461bcd60e51b815260206004820152602560248201527f4552433737373a20617070726f76652066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161041f565b6001600160a01b03821661089f5760405162461bcd60e51b815260206004820152602360248201527f4552433737373a20617070726f766520746f20746865207a65726f206164647260448201526265737360e81b606482015260840161041f565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383811660009081526008602090815260408083209386168352929052205460001981146107b4578181101561097f5760405162461bcd60e51b815260206004820152601e60248201527f4552433737373a20696e73756666696369656e7420616c6c6f77616e63650000604482015260640161041f565b6107b484848484036107d9565b6001600160a01b0386166109f15760405162461bcd60e51b815260206004820152602660248201527f4552433737373a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b606482015260840161041f565b6001600160a01b038516610a535760405162461bcd60e51b8152602060048201526024808201527f4552433737373a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161041f565b33610a62818888888888610c3c565b610a70818888888888610d63565b610a7f81888888888888610ec9565b50505050505050565b6001600160a01b038416610ae95760405162461bcd60e51b815260206004820152602260248201527f4552433737373a206275726e2066726f6d20746865207a65726f206164647265604482015261737360f01b606482015260840161041f565b33610af981866000878787610c3c565b6001600160a01b03851660009081526020819052604090205484811015610b6e5760405162461bcd60e51b815260206004820152602360248201527f4552433737373a206275726e20616d6f756e7420657863656564732062616c616044820152626e636560e81b606482015260840161041f565b6001600160a01b0386166000908152602081905260408120868303905560018054879290610b9d908490611508565b92505081905550856001600160a01b0316826001600160a01b03167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a4098878787604051610beb9392919061151f565b60405180910390a36040518581526000906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe8956024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca90604401602060405180830381865afa158015610cbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce19190611554565b90506001600160a01b03811615610a7f57604051633ad5cbc160e11b81526001600160a01b038216906375ab978290610d28908a908a908a908a908a908a90600401611571565b600060405180830381600087803b158015610d4257600080fd5b505af1158015610d56573d6000803e3d6000fd5b5050505050505050505050565b6001600160a01b03851660009081526020819052604090205483811015610ddc5760405162461bcd60e51b815260206004820152602760248201527f4552433737373a207472616e7366657220616d6f756e7420657863656564732060448201526662616c616e636560c81b606482015260840161041f565b6001600160a01b03808716600090815260208190526040808220878503905591871681529081208054869290610e139084906115cb565b92505081905550846001600160a01b0316866001600160a01b0316886001600160a01b03167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987878787604051610e6b9392919061151f565b60405180910390a4846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051610eb891815260200190565b60405180910390a350505050505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b6024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca90604401602060405180830381865afa158015610f4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6e9190611554565b90506001600160a01b03811615610fea576040516223de2960e01b81526001600160a01b038216906223de2990610fb3908b908b908b908b908b908b90600401611571565b600060405180830381600087803b158015610fcd57600080fd5b505af1158015610fe1573d6000803e3d6000fd5b50505050611084565b8115611084576001600160a01b0386163b156110845760405162461bcd60e51b815260206004820152604d60248201527f4552433737373a20746f6b656e20726563697069656e7420636f6e747261637460448201527f20686173206e6f20696d706c656d656e74657220666f7220455243373737546f60648201526c1ad95b9cd49958da5c1a595b9d609a1b608482015260a40161041f565b5050505050505050565b6020808252825182820181905260009190848201906040850190845b818110156110cf5783516001600160a01b0316835292840192918401916001016110aa565b50909695505050505050565b6000815180845260005b81811015611101576020818501810151868301820152016110e5565b81811115611113576000602083870101525b50601f01601f19169290920160200192915050565b60208152600061066060208301846110db565b6001600160a01b038116811461115057600080fd5b50565b6000806040838503121561116657600080fd5b82356111718161113b565b946020939093013593505050565b60008060006060848603121561119457600080fd5b833561119f8161113b565b925060208401356111af8161113b565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126111e757600080fd5b813567ffffffffffffffff80821115611202576112026111c0565b604051601f8301601f19908116603f0116810190828211818310171561122a5761122a6111c0565b8160405283815286602085880101111561124357600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a0868803121561127b57600080fd5b85356112868161113b565b945060208601356112968161113b565b935060408601359250606086013567ffffffffffffffff808211156112ba57600080fd5b6112c689838a016111d6565b935060808801359150808211156112dc57600080fd5b506112e9888289016111d6565b9150509295509295909350565b60006020828403121561130857600080fd5b81356106608161113b565b60008060006060848603121561132857600080fd5b83356113338161113b565b925060208401359150604084013567ffffffffffffffff81111561135657600080fd5b611362868287016111d6565b9150509250925092565b6000806040838503121561137f57600080fd5b823561138a8161113b565b9150602083013561139a8161113b565b809150509250929050565b600080600080608085870312156113bb57600080fd5b84356113c68161113b565b935060208501359250604085013567ffffffffffffffff808211156113ea57600080fd5b6113f6888389016111d6565b9350606087013591508082111561140c57600080fd5b50611419878288016111d6565b91505092959194509250565b6000806040838503121561143857600080fd5b82359150602083013567ffffffffffffffff81111561145657600080fd5b611462858286016111d6565b9150509250929050565b600181811c9082168061148057607f821691505b6020821081036114a057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602c908201527f4552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f60408201526b39103337b9103437b63232b960a11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008282101561151a5761151a6114f2565b500390565b83815260606020820152600061153860608301856110db565b828103604084015261154a81856110db565b9695505050505050565b60006020828403121561156657600080fd5b81516106608161113b565b6001600160a01b0387811682528681166020830152851660408201526060810184905260c0608082018190526000906115ac908301856110db565b82810360a08401526115be81856110db565b9998505050505050505050565b600082198211156115de576115de6114f2565b50019056fea164736f6c634300080d000a",
    "sourceMap": "1088:17522:4:-:0;;;2316:612;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2448:13;;;;:5;;:13;;;;;:::i;:::-;-1:-1:-1;2471:17:4;;;;:7;;:17;;;;;:::i;:::-;-1:-1:-1;2499:42:4;;;;:22;;:42;;;;;:::i;:::-;;2556:9;2551:126;2575:17;:24;2571:1;:28;2551:126;;;2662:4;2620:17;:39;2638:17;2656:1;2638:20;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;2620:39:4;;;;;;;;;;;-1:-1:-1;2620:39:4;:46;;-1:-1:-1;;2620:46:4;;;;;;;;;;2601:3;;;;:::i;:::-;;;;2551:126;;;-1:-1:-1;2718:97:4;;-1:-1:-1;;;2718:97:4;;2768:4;2718:97;;;3268:34:22;;;2775:24:4;3318:18:22;;;3311:34;3361:18;;;3354:43;1242:42:4;;2718:41;;3203:18:22;;2718:97:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2825:96:4;;-1:-1:-1;;;2825:96:4;;2875:4;2825:96;;;3268:34:22;;;2882:23:4;3318:18:22;;;3311:34;3361:18;;;3354:43;1242:42:4;;-1:-1:-1;2825:41:4;;-1:-1:-1;3203:18:22;;2825:96:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2316:612;;;1088:17522;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1088:17522:4;;;-1:-1:-1;1088:17522:4;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;1088:17522:4;-1:-1:-1;;;;;1088:17522:4;;;;;;;;;;;-1:-1:-1;1088:17522:4;;;;;;;;;;;;;;;;;;;;;14:127:22;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:275;217:2;211:9;282:2;263:13;;-1:-1:-1;;259:27:22;247:40;;-1:-1:-1;;;;;302:34:22;;338:22;;;299:62;296:88;;;364:18;;:::i;:::-;400:2;393:22;146:275;;-1:-1:-1;146:275:22:o;426:695::-;480:5;533:3;526:4;518:6;514:17;510:27;500:55;;551:1;548;541:12;500:55;574:13;;-1:-1:-1;;;;;599:26:22;;596:52;;;628:18;;:::i;:::-;667:4;695:53;738:2;719:13;;-1:-1:-1;;715:27:22;711:36;;695:53;:::i;:::-;773:2;764:7;757:19;817:3;812:2;807;799:6;795:15;791:24;788:33;785:53;;;834:1;831;824:12;785:53;856:1;866:134;880:2;877:1;874:9;866:134;;;969:14;;;965:23;;959:30;937:15;;;933:24;;926:64;891:10;;866:134;;;1018:2;1015:1;1012:9;1009:81;;;1078:1;1073:2;1068;1059:7;1055:16;1051:25;1044:36;1009:81;-1:-1:-1;1108:7:22;426:695;-1:-1:-1;;;;;426:695:22:o;1126:1528::-;1259:6;1267;1275;1328:2;1316:9;1307:7;1303:23;1299:32;1296:52;;;1344:1;1341;1334:12;1296:52;1371:16;;-1:-1:-1;;;;;1436:14:22;;;1433:34;;;1463:1;1460;1453:12;1433:34;1486:61;1539:7;1530:6;1519:9;1515:22;1486:61;:::i;:::-;1476:71;;1566:2;1556:12;;1614:2;1603:9;1599:18;1593:25;1643:2;1633:8;1630:16;1627:36;;;1659:1;1656;1649:12;1627:36;1682:63;1737:7;1726:8;1715:9;1711:24;1682:63;:::i;:::-;1672:73;;;1791:2;1780:9;1776:18;1770:25;1820:2;1810:8;1807:16;1804:36;;;1836:1;1833;1826:12;1804:36;1859:24;;1914:4;1906:13;;1902:27;-1:-1:-1;1892:55:22;;1943:1;1940;1933:12;1892:55;1972:2;1966:9;1994:2;1990;1987:10;1984:36;;;2000:18;;:::i;:::-;2046:2;2043:1;2039:10;2029:20;;2069:28;2093:2;2089;2085:11;2069:28;:::i;:::-;2131:15;;;2201:11;;;2197:20;;;2162:12;;;;2229:19;;;2226:39;;;2261:1;2258;2251:12;2226:39;2285:11;;;;2305:319;2321:6;2316:3;2313:15;2305:319;;;2388:10;;;-1:-1:-1;;;;;;2431:31:22;;2421:42;;2411:140;;2505:1;2534:2;2530;2523:14;2411:140;2564:18;;;2338:12;;;;2602;;;;2305:319;;;2643:5;2633:15;;;;;;;;1126:1528;;;;;:::o;2659:127::-;2720:10;2715:3;2711:20;2708:1;2701:31;2751:4;2748:1;2741:15;2775:4;2772:1;2765:15;2791:232;2830:3;2851:17;;;2848:140;;2910:10;2905:3;2901:20;2898:1;2891:31;2945:4;2942:1;2935:15;2973:4;2970:1;2963:15;2848:140;-1:-1:-1;3015:1:22;3004:13;;2791:232::o;3408:380::-;3487:1;3483:12;;;;3530;;;3551:61;;3605:4;3597:6;3593:17;3583:27;;3551:61;3658:2;3650:6;3647:14;3627:18;3624:38;3621:161;;3704:10;3699:3;3695:20;3692:1;3685:31;3739:4;3736:1;3729:15;3767:4;3764:1;3757:15;3621:161;;3408:380;;;:::o;:::-;1088:17522:4;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b50600436106101165760003560e01c8063959b8c3f116100a2578063d95b637111610071578063d95b63711461022b578063dd62ed3e1461023e578063fad8b32a14610277578063fc673c4f1461028a578063fe9d93031461029d57600080fd5b8063959b8c3f146101ea57806395d89b41146101fd5780639bd9bbc614610205578063a9059cbb1461021857600080fd5b806323b872dd116100e957806323b872dd14610183578063313ce56714610196578063556f0dc7146101a557806362ad1b83146101ac57806370a08231146101c157600080fd5b806306e485381461011b57806306fdde0314610139578063095ea7b31461014e57806318160ddd14610171575b600080fd5b6101236102b0565b604051610130919061108e565b60405180910390f35b610141610312565b6040516101309190611128565b61016161015c366004611153565b61039b565b6040519015158152602001610130565b6001545b604051908152602001610130565b61016161019136600461117f565b6103b3565b60405160128152602001610130565b6001610175565b6101bf6101ba366004611263565b6103f9565b005b6101756101cf3660046112f6565b6001600160a01b031660009081526020819052604090205490565b6101bf6101f83660046112f6565b61043e565b61014161055b565b6101bf610213366004611313565b61056a565b610161610226366004611153565b61058d565b61016161023936600461136c565b6105c5565b61017561024c36600461136c565b6001600160a01b03918216600090815260086020908152604080832093909416825291909152205490565b6101bf6102853660046112f6565b610667565b6101bf6102983660046113a5565b610782565b6101bf6102ab366004611425565b6107ba565b6060600480548060200260200160405190810160405280929190818152602001828054801561030857602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116102ea575b5050505050905090565b6060600280546103219061146c565b80601f016020809104026020016040519081016040528092919081815260200182805461034d9061146c565b80156103085780601f1061036f57610100808354040283529160200191610308565b820191906000526020600020905b81548152906001019060200180831161037d57509395945050505050565b6000336103a98185856107d9565b5060019392505050565b6000336103c1858285610900565b6103ee8585856040518060200160405280600081525060405180602001604052806000815250600061098c565b506001949350505050565b61040333866105c5565b6104285760405162461bcd60e51b815260040161041f906114a6565b60405180910390fd5b6104378585858585600161098c565b5050505050565b6001600160a01b03811633036104a25760405162461bcd60e51b8152602060048201526024808201527f4552433737373a20617574686f72697a696e672073656c66206173206f70657260448201526330ba37b960e11b606482015260840161041f565b6001600160a01b03811660009081526005602052604090205460ff16156104f3573360009081526007602090815260408083206001600160a01b03851684529091529020805460ff19169055610522565b3360009081526006602090815260408083206001600160a01b03851684529091529020805460ff191660011790555b60405133906001600160a01b038316907ff4caeb2d6ca8932a215a353d0703c326ec2d81fc68170f320eb2ab49e9df61f990600090a350565b6060600380546103219061146c565b6105883384848460405180602001604052806000815250600161098c565b505050565b60006105bc3384846040518060200160405280600081525060405180602001604052806000815250600061098c565b50600192915050565b6000816001600160a01b0316836001600160a01b0316148061063057506001600160a01b03831660009081526005602052604090205460ff16801561063057506001600160a01b0380831660009081526007602090815260408083209387168352929052205460ff16155b8061066057506001600160a01b0380831660009081526006602090815260408083209387168352929052205460ff165b9392505050565b336001600160a01b038216036106c95760405162461bcd60e51b815260206004820152602160248201527f4552433737373a207265766f6b696e672073656c66206173206f70657261746f6044820152603960f91b606482015260840161041f565b6001600160a01b03811660009081526005602052604090205460ff161561071d573360009081526007602090815260408083206001600160a01b03851684529091529020805460ff19166001179055610749565b3360009081526006602090815260408083206001600160a01b03851684529091529020805460ff191690555b60405133906001600160a01b038316907f50546e66e5f44d728365dc3908c63bc5cfeeab470722c1677e3073a6ac294aa190600090a350565b61078c33856105c5565b6107a85760405162461bcd60e51b815260040161041f906114a6565b6107b484848484610a88565b50505050565b6107d533838360405180602001604052806000815250610a88565b5050565b6001600160a01b03831661083d5760405162461bcd60e51b815260206004820152602560248201527f4552433737373a20617070726f76652066726f6d20746865207a65726f206164604482015264647265737360d81b606482015260840161041f565b6001600160a01b03821661089f5760405162461bcd60e51b815260206004820152602360248201527f4552433737373a20617070726f766520746f20746865207a65726f206164647260448201526265737360e81b606482015260840161041f565b6001600160a01b0383811660008181526008602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a3505050565b6001600160a01b0383811660009081526008602090815260408083209386168352929052205460001981146107b4578181101561097f5760405162461bcd60e51b815260206004820152601e60248201527f4552433737373a20696e73756666696369656e7420616c6c6f77616e63650000604482015260640161041f565b6107b484848484036107d9565b6001600160a01b0386166109f15760405162461bcd60e51b815260206004820152602660248201527f4552433737373a207472616e736665722066726f6d20746865207a65726f206160448201526564647265737360d01b606482015260840161041f565b6001600160a01b038516610a535760405162461bcd60e51b8152602060048201526024808201527f4552433737373a207472616e7366657220746f20746865207a65726f206164646044820152637265737360e01b606482015260840161041f565b33610a62818888888888610c3c565b610a70818888888888610d63565b610a7f81888888888888610ec9565b50505050505050565b6001600160a01b038416610ae95760405162461bcd60e51b815260206004820152602260248201527f4552433737373a206275726e2066726f6d20746865207a65726f206164647265604482015261737360f01b606482015260840161041f565b33610af981866000878787610c3c565b6001600160a01b03851660009081526020819052604090205484811015610b6e5760405162461bcd60e51b815260206004820152602360248201527f4552433737373a206275726e20616d6f756e7420657863656564732062616c616044820152626e636560e81b606482015260840161041f565b6001600160a01b0386166000908152602081905260408120868303905560018054879290610b9d908490611508565b92505081905550856001600160a01b0316826001600160a01b03167fa78a9be3a7b862d26933ad85fb11d80ef66b8f972d7cbba06621d583943a4098878787604051610beb9392919061151f565b60405180910390a36040518581526000906001600160a01b038816907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a3505050505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527f29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe8956024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca90604401602060405180830381865afa158015610cbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce19190611554565b90506001600160a01b03811615610a7f57604051633ad5cbc160e11b81526001600160a01b038216906375ab978290610d28908a908a908a908a908a908a90600401611571565b600060405180830381600087803b158015610d4257600080fd5b505af1158015610d56573d6000803e3d6000fd5b5050505050505050505050565b6001600160a01b03851660009081526020819052604090205483811015610ddc5760405162461bcd60e51b815260206004820152602760248201527f4552433737373a207472616e7366657220616d6f756e7420657863656564732060448201526662616c616e636560c81b606482015260840161041f565b6001600160a01b03808716600090815260208190526040808220878503905591871681529081208054869290610e139084906115cb565b92505081905550846001600160a01b0316866001600160a01b0316886001600160a01b03167f06b541ddaa720db2b10a4d0cdac39b8d360425fc073085fac19bc82614677987878787604051610e6b9392919061151f565b60405180910390a4846001600160a01b0316866001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef86604051610eb891815260200190565b60405180910390a350505050505050565b60405163555ddc6560e11b81526001600160a01b03861660048201527fb281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b6024820152600090731820a4b7618bde71dce8cdc73aab6c95905fad249063aabbb8ca90604401602060405180830381865afa158015610f4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6e9190611554565b90506001600160a01b03811615610fea576040516223de2960e01b81526001600160a01b038216906223de2990610fb3908b908b908b908b908b908b90600401611571565b600060405180830381600087803b158015610fcd57600080fd5b505af1158015610fe1573d6000803e3d6000fd5b50505050611084565b8115611084576001600160a01b0386163b156110845760405162461bcd60e51b815260206004820152604d60248201527f4552433737373a20746f6b656e20726563697069656e7420636f6e747261637460448201527f20686173206e6f20696d706c656d656e74657220666f7220455243373737546f60648201526c1ad95b9cd49958da5c1a595b9d609a1b608482015260a40161041f565b5050505050505050565b6020808252825182820181905260009190848201906040850190845b818110156110cf5783516001600160a01b0316835292840192918401916001016110aa565b50909695505050505050565b6000815180845260005b81811015611101576020818501810151868301820152016110e5565b81811115611113576000602083870101525b50601f01601f19169290920160200192915050565b60208152600061066060208301846110db565b6001600160a01b038116811461115057600080fd5b50565b6000806040838503121561116657600080fd5b82356111718161113b565b946020939093013593505050565b60008060006060848603121561119457600080fd5b833561119f8161113b565b925060208401356111af8161113b565b929592945050506040919091013590565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126111e757600080fd5b813567ffffffffffffffff80821115611202576112026111c0565b604051601f8301601f19908116603f0116810190828211818310171561122a5761122a6111c0565b8160405283815286602085880101111561124357600080fd5b836020870160208301376000602085830101528094505050505092915050565b600080600080600060a0868803121561127b57600080fd5b85356112868161113b565b945060208601356112968161113b565b935060408601359250606086013567ffffffffffffffff808211156112ba57600080fd5b6112c689838a016111d6565b935060808801359150808211156112dc57600080fd5b506112e9888289016111d6565b9150509295509295909350565b60006020828403121561130857600080fd5b81356106608161113b565b60008060006060848603121561132857600080fd5b83356113338161113b565b925060208401359150604084013567ffffffffffffffff81111561135657600080fd5b611362868287016111d6565b9150509250925092565b6000806040838503121561137f57600080fd5b823561138a8161113b565b9150602083013561139a8161113b565b809150509250929050565b600080600080608085870312156113bb57600080fd5b84356113c68161113b565b935060208501359250604085013567ffffffffffffffff808211156113ea57600080fd5b6113f6888389016111d6565b9350606087013591508082111561140c57600080fd5b50611419878288016111d6565b91505092959194509250565b6000806040838503121561143857600080fd5b82359150602083013567ffffffffffffffff81111561145657600080fd5b611462858286016111d6565b9150509250929050565b600181811c9082168061148057607f821691505b6020821081036114a057634e487b7160e01b600052602260045260246000fd5b50919050565b6020808252602c908201527f4552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f60408201526b39103337b9103437b63232b960a11b606082015260800190565b634e487b7160e01b600052601160045260246000fd5b60008282101561151a5761151a6114f2565b500390565b83815260606020820152600061153860608301856110db565b828103604084015261154a81856110db565b9695505050505050565b60006020828403121561156657600080fd5b81516106608161113b565b6001600160a01b0387811682528681166020830152851660408201526060810184905260c0608082018190526000906115ac908301856110db565b82810360a08401526115be81856110db565b9998505050505050505050565b600082198211156115de576115de6114f2565b50019056fea164736f6c634300080d000a",
    "sourceMap": "1088:17522:4:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6528:130;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2982:98;;;:::i;:::-;;;;;;;:::i;8286:197::-;;;;;;:::i;:::-;;:::i;:::-;;;2000:14:22;;1993:22;1975:41;;1963:2;1948:18;8286:197:4;1835:187:22;3775:123:4;3879:12;;3775:123;;;2173:25:22;;;2161:2;2146:18;3775:123:4;2027:177:22;8965:317:4;;;;;;:::i;:::-;;:::i;3422:82::-;;;3495:2;2812:36:22;;2800:2;2785:18;3422:82:4;2670:184:22;3619:95:4;3706:1;3619:95;;6777:366;;;;;;:::i;:::-;;:::i;:::-;;3998:150;;;;;;:::i;:::-;-1:-1:-1;;;;;4119:22:4;4093:7;4119:22;;;;;;;;;;;;3998:150;5583:412;;;;;;:::i;:::-;;:::i;3136:102::-;;;:::i;4278:193::-;;;;;;:::i;:::-;;:::i;4702:183::-;;;;;;:::i;:::-;;:::i;5205:311::-;;;;;;:::i;:::-;;:::i;7828:151::-;;;;;;:::i;:::-;-1:-1:-1;;;;;7944:19:4;;;7918:7;7944:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;7828:151;6059:403;;;;;;:::i;:::-;;:::i;7264:325::-;;;;;;:::i;:::-;;:::i;5015:127::-;;;;;;:::i;:::-;;:::i;6528:130::-;6594:16;6629:22;6622:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;6622:29:4;;;;;;;;;;;;;;;;;;;;;;;6528:130;:::o;2982:98::-;3036:13;3068:5;3061:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3061:12:4;;2982:98;-1:-1:-1;;;;;2982:98:4:o;8286:197::-;8368:4;719:10:9;8423:32:4;719:10:9;8440:7:4;8449:5;8423:8;:32::i;:::-;-1:-1:-1;8472:4:4;;8286:197;-1:-1:-1;;;8286:197:4:o;8965:317::-;9101:4;719:10:9;9157:40:4;9173:6;719:10:9;9190:6:4;9157:15;:40::i;:::-;9207:47;9213:6;9221:9;9232:6;9207:47;;;;;;;;;;;;;;;;;;;;;;;;9248:5;9207;:47::i;:::-;-1:-1:-1;9271:4:4;;8965:317;-1:-1:-1;;;;8965:317:4:o;6777:366::-;6984:35;719:10:9;7012:6:4;6984:13;:35::i;:::-;6976:92;;;;-1:-1:-1;;;6976:92:4;;;;;;;:::i;:::-;;;;;;;;;7078:58;7084:6;7092:9;7103:6;7111:4;7117:12;7131:4;7078:5;:58::i;:::-;6777:366;;;;;:::o;5583:412::-;-1:-1:-1;;;;;5670:24:4;;719:10:9;5670:24:4;5662:73;;;;-1:-1:-1;;;5662:73:4;;7918:2:22;5662:73:4;;;7900:21:22;7957:2;7937:18;;;7930:30;7996:34;7976:18;;;7969:62;-1:-1:-1;;;8047:18:22;;;8040:34;8091:19;;5662:73:4;7716:400:22;5662:73:4;-1:-1:-1;;;;;5750:27:4;;;;;;:17;:27;;;;;;;;5746:185;;;719:10:9;5800:38:4;;;;:24;:38;;;;;;;;-1:-1:-1;;;;;5800:48:4;;;;;;;;;5793:55;;-1:-1:-1;;5793:55:4;;;5746:185;;;719:10:9;5879:24:4;;;;:10;:24;;;;;;;;-1:-1:-1;;;;;5879:34:4;;;;;;;;;:41;;-1:-1:-1;;5879:41:4;5916:4;5879:41;;;5746:185;5946:42;;719:10:9;;-1:-1:-1;;;;;5946:42:4;;;;;;;;5583:412;:::o;3136:102::-;3192:13;3224:7;3217:14;;;;;:::i;4278:193::-;4410:54;719:10:9;4430:9:4;4441:6;4449:4;4410:54;;;;;;;;;;;;4459:4;4410:5;:54::i;:::-;4278:193;;;:::o;4702:183::-;4788:4;4804:53;719:10:9;4824:9:4;4835:6;4804:53;;;;;;;;;;;;;;;;;;;;;;;;4851:5;4804;:53::i;:::-;-1:-1:-1;4874:4:4;4702:183;;;;:::o;5205:311::-;5305:4;5352:11;-1:-1:-1;;;;;5340:23:4;:8;-1:-1:-1;;;;;5340:23:4;;:120;;;-1:-1:-1;;;;;;5380:27:4;;;;;;:17;:27;;;;;;;;:79;;;;-1:-1:-1;;;;;;5412:37:4;;;;;;;:24;:37;;;;;;;;:47;;;;;;;;;;;;5411:48;5380:79;5340:169;;;-1:-1:-1;;;;;;5476:23:4;;;;;;;:10;:23;;;;;;;;:33;;;;;;;;;;;;5340:169;5321:188;5205:311;-1:-1:-1;;;5205:311:4:o;6059:403::-;719:10:9;-1:-1:-1;;;;;6143:24:4;;;6135:70;;;;-1:-1:-1;;;6135:70:4;;8323:2:22;6135:70:4;;;8305:21:22;8362:2;8342:18;;;8335:30;8401:34;8381:18;;;8374:62;-1:-1:-1;;;8452:18:22;;;8445:31;8493:19;;6135:70:4;8121:397:22;6135:70:4;-1:-1:-1;;;;;6220:27:4;;;;;;:17;:27;;;;;;;;6216:185;;;719:10:9;6263:38:4;;;;:24;:38;;;;;;;;-1:-1:-1;;;;;6263:48:4;;;;;;;;;:55;;-1:-1:-1;;6263:55:4;6314:4;6263:55;;;6216:185;;;719:10:9;6356:24:4;;;;:10;:24;;;;;;;;-1:-1:-1;;;;;6356:34:4;;;;;;;;;6349:41;;-1:-1:-1;;6349:41:4;;;6216:185;6416:39;;719:10:9;;-1:-1:-1;;;;;6416:39:4;;;;;;;;6059:403;:::o;7264:325::-;7445:36;719:10:9;7473:7:4;7445:13;:36::i;:::-;7437:93;;;;-1:-1:-1;;;7437:93:4;;;;;;;:::i;:::-;7540:42;7546:7;7555:6;7563:4;7569:12;7540:5;:42::i;:::-;7264:325;;;;:::o;5015:127::-;5098:37;719:10:9;5118:6:4;5126:4;5098:37;;;;;;;;;;;;:5;:37::i;:::-;5015:127;;:::o;14427:373::-;-1:-1:-1;;;;;14558:20:4;;14550:70;;;;-1:-1:-1;;;14550:70:4;;8725:2:22;14550:70:4;;;8707:21:22;8764:2;8744:18;;;8737:30;8803:34;8783:18;;;8776:62;-1:-1:-1;;;8854:18:22;;;8847:35;8899:19;;14550:70:4;8523:401:22;14550:70:4;-1:-1:-1;;;;;14638:21:4;;14630:69;;;;-1:-1:-1;;;14630:69:4;;9131:2:22;14630:69:4;;;9113:21:22;9170:2;9150:18;;;9143:30;9209:34;9189:18;;;9182:62;-1:-1:-1;;;9260:18:22;;;9253:33;9303:19;;14630:69:4;8929:399:22;14630:69:4;-1:-1:-1;;;;;14710:19:4;;;;;;;:11;:19;;;;;;;;:28;;;;;;;;;;;;;:36;;;14761:32;;2173:25:22;;;14761:32:4;;2146:18:22;14761:32:4;;;;;;;14427:373;;;:::o;17391:442::-;-1:-1:-1;;;;;7944:19:4;;;17521:24;7944:19;;;:11;:19;;;;;;;;:28;;;;;;;;;;-1:-1:-1;;17587:37:4;;17583:244;;17668:6;17648:16;:26;;17640:69;;;;-1:-1:-1;;;17640:69:4;;9535:2:22;17640:69:4;;;9517:21:22;9574:2;9554:18;;;9547:30;9613:32;9593:18;;;9586:60;9663:18;;17640:69:4;9333:354:22;17640:69:4;17751:51;17760:5;17767:7;17795:6;17776:16;:25;17751:8;:51::i;11898:658::-;-1:-1:-1;;;;;12120:18:4;;12112:69;;;;-1:-1:-1;;;12112:69:4;;9894:2:22;12112:69:4;;;9876:21:22;9933:2;9913:18;;;9906:30;9972:34;9952:18;;;9945:62;-1:-1:-1;;;10023:18:22;;;10016:36;10069:19;;12112:69:4;9692:402:22;12112:69:4;-1:-1:-1;;;;;12199:16:4;;12191:65;;;;-1:-1:-1;;;12191:65:4;;10301:2:22;12191:65:4;;;10283:21:22;10340:2;10320:18;;;10313:30;10379:34;10359:18;;;10352:62;-1:-1:-1;;;10430:18:22;;;10423:34;10474:19;;12191:65:4;10099:400:22;12191:65:4;719:10:9;12309:69:4;719:10:9;12337:4:4;12343:2;12347:6;12355:8;12365:12;12309:17;:69::i;:::-;12389:57;12395:8;12405:4;12411:2;12415:6;12423:8;12433:12;12389:5;:57::i;:::-;12457:92;12477:8;12487:4;12493:2;12497:6;12505:8;12515:12;12529:19;12457;:92::i;:::-;12102:454;11898:658;;;;;;:::o;12861:811::-;-1:-1:-1;;;;;13025:18:4;;13017:65;;;;-1:-1:-1;;;13017:65:4;;10706:2:22;13017:65:4;;;10688:21:22;10745:2;10725:18;;;10718:30;10784:34;10764:18;;;10757:62;-1:-1:-1;;;10835:18:22;;;10828:32;10877:19;;13017:65:4;10504:398:22;13017:65:4;719:10:9;13135:73:4;719:10:9;13163:4:4;13093:16;13181:6;13189:4;13195:12;13135:17;:73::i;:::-;-1:-1:-1;;;;;13342:15:4;;13320:19;13342:15;;;;;;;;;;;13375:21;;;;13367:69;;;;-1:-1:-1;;;13367:69:4;;11109:2:22;13367:69:4;;;11091:21:22;11148:2;11128:18;;;11121:30;11187:34;11167:18;;;11160:62;-1:-1:-1;;;11238:18:22;;;11231:33;11281:19;;13367:69:4;10907:399:22;13367:69:4;-1:-1:-1;;;;;13470:15:4;;:9;:15;;;;;;;;;;13488:20;;;13470:38;;13528:12;:22;;13502:6;;13470:9;13528:22;;13502:6;;13528:22;:::i;:::-;;;;;;;;13583:4;-1:-1:-1;;;;;13566:50:4;13573:8;-1:-1:-1;;;;;13566:50:4;;13589:6;13597:4;13603:12;13566:50;;;;;;;;:::i;:::-;;;;;;;;13631:34;;2173:25:22;;;13654:1:4;;-1:-1:-1;;;;;13631:34:4;;;;;2161:2:22;2146:18;13631:34:4;;;;;;;13007:665;;12861:811;;;;:::o;15273:472::-;15504:78;;-1:-1:-1;;;15504:78:4;;-1:-1:-1;;;;;12220:32:22;;15504:78:4;;;12202:51:22;1491:31:4;12269:18:22;;;12262:34;15482:19:4;;1242:42;;15504:41;;12175:18:22;;15504:78:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15482:100;-1:-1:-1;;;;;;15596:25:4;;;15592:147;;15637:91;;-1:-1:-1;;;15637:91:4;;-1:-1:-1;;;;;15637:39:4;;;;;:91;;15677:8;;15687:4;;15693:2;;15697:6;;15705:8;;15715:12;;15637:91;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15472:273;15273:472;;;;;;:::o;13678:611::-;-1:-1:-1;;;;;13956:15:4;;13934:19;13956:15;;;;;;;;;;;13989:21;;;;13981:73;;;;-1:-1:-1;;;13981:73:4;;13502:2:22;13981:73:4;;;13484:21:22;13541:2;13521:18;;;13514:30;13580:34;13560:18;;;13553:62;-1:-1:-1;;;13631:18:22;;;13624:37;13678:19;;13981:73:4;13300:403:22;13981:73:4;-1:-1:-1;;;;;14088:15:4;;;:9;:15;;;;;;;;;;;14106:20;;;14088:38;;14146:13;;;;;;;;:23;;14120:6;;14088:9;14146:23;;14120:6;;14146:23;:::i;:::-;;;;;;;;14206:2;-1:-1:-1;;;;;14185:56:4;14200:4;-1:-1:-1;;;;;14185:56:4;14190:8;-1:-1:-1;;;;;14185:56:4;;14210:6;14218:8;14228:12;14185:56;;;;;;;;:::i;:::-;;;;;;;;14271:2;-1:-1:-1;;;;;14256:26:4;14265:4;-1:-1:-1;;;;;14256:26:4;;14275:6;14256:26;;;;2173:25:22;;2161:2;2146:18;;2027:177;14256:26:4;;;;;;;;13865:424;13678:611;;;;;;:::o;16434:676::-;16701:79;;-1:-1:-1;;;16701:79:4;;-1:-1:-1;;;;;12220:32:22;;16701:79:4;;;12202:51:22;1588:34:4;12269:18:22;;;12262:34;16679:19:4;;1242:42;;16701:41;;12175:18:22;;16701:79:4;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16679:101;-1:-1:-1;;;;;;16794:25:4;;;16790:314;;16835:96;;-1:-1:-1;;;16835:96:4;;-1:-1:-1;;;;;16835:44:4;;;;;:96;;16880:8;;16890:4;;16896:2;;16900:6;;16908:8;;16918:12;;16835:96;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16790:314;;;16952:19;16948:156;;;-1:-1:-1;;;;;16996:13:4;;1465:19:8;:23;16987:106:4;;;;-1:-1:-1;;;16987:106:4;;14043:2:22;16987:106:4;;;14025:21:22;14082:2;14062:18;;;14055:30;14121:34;14101:18;;;14094:62;14192:34;14172:18;;;14165:62;-1:-1:-1;;;14243:19:22;;;14236:44;14297:19;;16987:106:4;13841:481:22;16987:106:4;16669:441;16434:676;;;;;;;:::o;14:658:22:-;185:2;237:21;;;307:13;;210:18;;;329:22;;;156:4;;185:2;408:15;;;;382:2;367:18;;;156:4;451:195;465:6;462:1;459:13;451:195;;;530:13;;-1:-1:-1;;;;;526:39:22;514:52;;621:15;;;;586:12;;;;562:1;480:9;451:195;;;-1:-1:-1;663:3:22;;14:658;-1:-1:-1;;;;;;14:658:22:o;677:472::-;719:3;757:5;751:12;784:6;779:3;772:19;809:1;819:162;833:6;830:1;827:13;819:162;;;895:4;951:13;;;947:22;;941:29;923:11;;;919:20;;912:59;848:12;819:162;;;999:6;996:1;993:13;990:87;;;1065:1;1058:4;1049:6;1044:3;1040:16;1036:27;1029:38;990:87;-1:-1:-1;1131:2:22;1110:15;-1:-1:-1;;1106:29:22;1097:39;;;;1138:4;1093:50;;677:472;-1:-1:-1;;677:472:22:o;1154:220::-;1303:2;1292:9;1285:21;1266:4;1323:45;1364:2;1353:9;1349:18;1341:6;1323:45;:::i;1379:131::-;-1:-1:-1;;;;;1454:31:22;;1444:42;;1434:70;;1500:1;1497;1490:12;1434:70;1379:131;:::o;1515:315::-;1583:6;1591;1644:2;1632:9;1623:7;1619:23;1615:32;1612:52;;;1660:1;1657;1650:12;1612:52;1699:9;1686:23;1718:31;1743:5;1718:31;:::i;:::-;1768:5;1820:2;1805:18;;;;1792:32;;-1:-1:-1;;;1515:315:22:o;2209:456::-;2286:6;2294;2302;2355:2;2343:9;2334:7;2330:23;2326:32;2323:52;;;2371:1;2368;2361:12;2323:52;2410:9;2397:23;2429:31;2454:5;2429:31;:::i;:::-;2479:5;-1:-1:-1;2536:2:22;2521:18;;2508:32;2549:33;2508:32;2549:33;:::i;:::-;2209:456;;2601:7;;-1:-1:-1;;;2655:2:22;2640:18;;;;2627:32;;2209:456::o;2859:127::-;2920:10;2915:3;2911:20;2908:1;2901:31;2951:4;2948:1;2941:15;2975:4;2972:1;2965:15;2991:718;3033:5;3086:3;3079:4;3071:6;3067:17;3063:27;3053:55;;3104:1;3101;3094:12;3053:55;3140:6;3127:20;3166:18;3203:2;3199;3196:10;3193:36;;;3209:18;;:::i;:::-;3284:2;3278:9;3252:2;3338:13;;-1:-1:-1;;3334:22:22;;;3358:2;3330:31;3326:40;3314:53;;;3382:18;;;3402:22;;;3379:46;3376:72;;;3428:18;;:::i;:::-;3468:10;3464:2;3457:22;3503:2;3495:6;3488:18;3549:3;3542:4;3537:2;3529:6;3525:15;3521:26;3518:35;3515:55;;;3566:1;3563;3556:12;3515:55;3630:2;3623:4;3615:6;3611:17;3604:4;3596:6;3592:17;3579:54;3677:1;3670:4;3665:2;3657:6;3653:15;3649:26;3642:37;3697:6;3688:15;;;;;;2991:718;;;;:::o;3714:885::-;3827:6;3835;3843;3851;3859;3912:3;3900:9;3891:7;3887:23;3883:33;3880:53;;;3929:1;3926;3919:12;3880:53;3968:9;3955:23;3987:31;4012:5;3987:31;:::i;:::-;4037:5;-1:-1:-1;4094:2:22;4079:18;;4066:32;4107:33;4066:32;4107:33;:::i;:::-;4159:7;-1:-1:-1;4213:2:22;4198:18;;4185:32;;-1:-1:-1;4268:2:22;4253:18;;4240:32;4291:18;4321:14;;;4318:34;;;4348:1;4345;4338:12;4318:34;4371:49;4412:7;4403:6;4392:9;4388:22;4371:49;:::i;:::-;4361:59;;4473:3;4462:9;4458:19;4445:33;4429:49;;4503:2;4493:8;4490:16;4487:36;;;4519:1;4516;4509:12;4487:36;;4542:51;4585:7;4574:8;4563:9;4559:24;4542:51;:::i;:::-;4532:61;;;3714:885;;;;;;;;:::o;4604:247::-;4663:6;4716:2;4704:9;4695:7;4691:23;4687:32;4684:52;;;4732:1;4729;4722:12;4684:52;4771:9;4758:23;4790:31;4815:5;4790:31;:::i;4856:523::-;4942:6;4950;4958;5011:2;4999:9;4990:7;4986:23;4982:32;4979:52;;;5027:1;5024;5017:12;4979:52;5066:9;5053:23;5085:31;5110:5;5085:31;:::i;:::-;5135:5;-1:-1:-1;5187:2:22;5172:18;;5159:32;;-1:-1:-1;5242:2:22;5227:18;;5214:32;5269:18;5258:30;;5255:50;;;5301:1;5298;5291:12;5255:50;5324:49;5365:7;5356:6;5345:9;5341:22;5324:49;:::i;:::-;5314:59;;;4856:523;;;;;:::o;5384:388::-;5452:6;5460;5513:2;5501:9;5492:7;5488:23;5484:32;5481:52;;;5529:1;5526;5519:12;5481:52;5568:9;5555:23;5587:31;5612:5;5587:31;:::i;:::-;5637:5;-1:-1:-1;5694:2:22;5679:18;;5666:32;5707:33;5666:32;5707:33;:::i;:::-;5759:7;5749:17;;;5384:388;;;;;:::o;5777:743::-;5881:6;5889;5897;5905;5958:3;5946:9;5937:7;5933:23;5929:33;5926:53;;;5975:1;5972;5965:12;5926:53;6014:9;6001:23;6033:31;6058:5;6033:31;:::i;:::-;6083:5;-1:-1:-1;6135:2:22;6120:18;;6107:32;;-1:-1:-1;6190:2:22;6175:18;;6162:32;6213:18;6243:14;;;6240:34;;;6270:1;6267;6260:12;6240:34;6293:49;6334:7;6325:6;6314:9;6310:22;6293:49;:::i;:::-;6283:59;;6395:2;6384:9;6380:18;6367:32;6351:48;;6424:2;6414:8;6411:16;6408:36;;;6440:1;6437;6430:12;6408:36;;6463:51;6506:7;6495:8;6484:9;6480:24;6463:51;:::i;:::-;6453:61;;;5777:743;;;;;;;:::o;6525:388::-;6602:6;6610;6663:2;6651:9;6642:7;6638:23;6634:32;6631:52;;;6679:1;6676;6669:12;6631:52;6715:9;6702:23;6692:33;;6776:2;6765:9;6761:18;6748:32;6803:18;6795:6;6792:30;6789:50;;;6835:1;6832;6825:12;6789:50;6858:49;6899:7;6890:6;6879:9;6875:22;6858:49;:::i;:::-;6848:59;;;6525:388;;;;;:::o;6918:380::-;6997:1;6993:12;;;;7040;;;7061:61;;7115:4;7107:6;7103:17;7093:27;;7061:61;7168:2;7160:6;7157:14;7137:18;7134:38;7131:161;;7214:10;7209:3;7205:20;7202:1;7195:31;7249:4;7246:1;7239:15;7277:4;7274:1;7267:15;7131:161;;6918:380;;;:::o;7303:408::-;7505:2;7487:21;;;7544:2;7524:18;;;7517:30;7583:34;7578:2;7563:18;;7556:62;-1:-1:-1;;;7649:2:22;7634:18;;7627:42;7701:3;7686:19;;7303:408::o;11311:127::-;11372:10;11367:3;11363:20;11360:1;11353:31;11403:4;11400:1;11393:15;11427:4;11424:1;11417:15;11443:125;11483:4;11511:1;11508;11505:8;11502:34;;;11516:18;;:::i;:::-;-1:-1:-1;11553:9:22;;11443:125::o;11573:450::-;11794:6;11783:9;11776:25;11837:2;11832;11821:9;11817:18;11810:30;11757:4;11863:45;11904:2;11893:9;11889:18;11881:6;11863:45;:::i;:::-;11956:9;11948:6;11944:22;11939:2;11928:9;11924:18;11917:50;11984:33;12010:6;12002;11984:33;:::i;:::-;11976:41;11573:450;-1:-1:-1;;;;;;11573:450:22:o;12307:251::-;12377:6;12430:2;12418:9;12409:7;12405:23;12401:32;12398:52;;;12446:1;12443;12436:12;12398:52;12478:9;12472:16;12497:31;12522:5;12497:31;:::i;12563:732::-;-1:-1:-1;;;;;12906:15:22;;;12888:34;;12958:15;;;12953:2;12938:18;;12931:43;13010:15;;13005:2;12990:18;;12983:43;13057:2;13042:18;;13035:34;;;13106:3;13100;13085:19;;13078:32;;;12831:4;;13133:46;;13159:19;;13151:6;13133:46;:::i;:::-;13228:9;13220:6;13216:22;13210:3;13199:9;13195:19;13188:51;13256:33;13282:6;13274;13256:33;:::i;:::-;13248:41;12563:732;-1:-1:-1;;;;;;;;;12563:732:22:o;13708:128::-;13748:3;13779:1;13775:6;13772:1;13769:13;13766:39;;;13785:18;;:::i;:::-;-1:-1:-1;13821:9:22;;13708:128::o",
    "linkReferences": {}
  },
  "userdoc": {
    "version": 1,
    "kind": "user"
  },
  "devdoc": {
    "version": 1,
    "kind": "dev",
    "details": "Implementation of the {IERC777} interface. This implementation is agnostic to the way tokens are created. This means that a supply mechanism has to be added in a derived contract using {_mint}. Support for ERC20 is included in this contract, as specified by the EIP: both the ERC777 and ERC20 interfaces can be safely used when interacting with it. Both {IERC777-Sent} and {IERC20-Transfer} events are emitted on token movements. Additionally, the {IERC777-granularity} value is hard-coded to `1`, meaning that there are no special restrictions in the amount of tokens that created, moved, or destroyed. This makes integration with ERC20 applications seamless.",
    "methods": {
      "allowance(address,address)": {
        "details": "See {IERC20-allowance}. Note that operator and allowance concepts are orthogonal: operators may not have allowance, and accounts with allowance may not be operators themselves."
      },
      "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. Note that accounts cannot have allowance issued by their operators."
      },
      "authorizeOperator(address)": {
        "details": "See {IERC777-authorizeOperator}."
      },
      "balanceOf(address)": {
        "details": "Returns the amount of tokens owned by an account (`tokenHolder`)."
      },
      "burn(uint256,bytes)": {
        "details": "See {IERC777-burn}. Also emits a {IERC20-Transfer} event for ERC20 compatibility."
      },
      "constructor": {
        "details": "`defaultOperators` may be an empty array."
      },
      "decimals()": {
        "details": "See {ERC20-decimals}. Always returns 18, as per the [ERC777 EIP](https://eips.ethereum.org/EIPS/eip-777#backward-compatibility)."
      },
      "defaultOperators()": {
        "details": "See {IERC777-defaultOperators}."
      },
      "granularity()": {
        "details": "See {IERC777-granularity}. This implementation always returns `1`."
      },
      "isOperatorFor(address,address)": {
        "details": "See {IERC777-isOperatorFor}."
      },
      "name()": {
        "details": "See {IERC777-name}."
      },
      "operatorBurn(address,uint256,bytes,bytes)": {
        "details": "See {IERC777-operatorBurn}. Emits {Burned} and {IERC20-Transfer} events."
      },
      "operatorSend(address,address,uint256,bytes,bytes)": {
        "details": "See {IERC777-operatorSend}. Emits {Sent} and {IERC20-Transfer} events."
      },
      "revokeOperator(address)": {
        "details": "See {IERC777-revokeOperator}."
      },
      "send(address,uint256,bytes)": {
        "details": "See {IERC777-send}. Also emits a {IERC20-Transfer} event for ERC20 compatibility."
      },
      "symbol()": {
        "details": "See {IERC777-symbol}."
      },
      "totalSupply()": {
        "details": "See {IERC777-totalSupply}."
      },
      "transfer(address,uint256)": {
        "details": "See {IERC20-transfer}. Unlike `send`, `recipient` is _not_ required to implement the {IERC777Recipient} interface if it is a contract. Also emits a {Sent} event."
      },
      "transferFrom(address,address,uint256)": {
        "details": "See {IERC20-transferFrom}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Note that operator and allowance concepts are orthogonal: operators cannot call `transferFrom` (unless they have allowance), and accounts with allowance cannot call `operatorSend` (unless they are operators). Emits {Sent}, {IERC20-Transfer} and {IERC20-Approval} events."
      }
    }
  },
  "ast": {
    "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/lib/openzeppelin-contracts/contracts/token/ERC777/ERC777.sol",
    "exportedSymbols": {
      "Address": [
        2382
      ],
      "Context": [
        2404
      ],
      "ERC777": [
        1884
      ],
      "IERC1820Registry": [
        2494
      ],
      "IERC20": [
        768
      ],
      "IERC777": [
        2047
      ],
      "IERC777Recipient": [
        2067
      ],
      "IERC777Sender": [
        2087
      ]
    },
    "id": 1885,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 795,
        "literals": [
          "solidity",
          "^",
          "0.8",
          ".0"
        ],
        "nodeType": "PragmaDirective",
        "src": "107:23:4"
      },
      {
        "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/lib/openzeppelin-contracts/contracts/token/ERC777/IERC777.sol",
        "file": "./IERC777.sol",
        "id": 796,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 1885,
        "sourceUnit": 2048,
        "src": "132:23:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/lib/openzeppelin-contracts/contracts/token/ERC777/IERC777Recipient.sol",
        "file": "./IERC777Recipient.sol",
        "id": 797,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 1885,
        "sourceUnit": 2068,
        "src": "156:32:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/lib/openzeppelin-contracts/contracts/token/ERC777/IERC777Sender.sol",
        "file": "./IERC777Sender.sol",
        "id": 798,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 1885,
        "sourceUnit": 2088,
        "src": "189:29:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol",
        "file": "../ERC20/IERC20.sol",
        "id": 799,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 1885,
        "sourceUnit": 769,
        "src": "219:29:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/lib/openzeppelin-contracts/contracts/utils/Address.sol",
        "file": "../../utils/Address.sol",
        "id": 800,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 1885,
        "sourceUnit": 2383,
        "src": "249:33:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/lib/openzeppelin-contracts/contracts/utils/Context.sol",
        "file": "../../utils/Context.sol",
        "id": 801,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 1885,
        "sourceUnit": 2405,
        "src": "283:33:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/lib/openzeppelin-contracts/contracts/utils/introspection/IERC1820Registry.sol",
        "file": "../../utils/introspection/IERC1820Registry.sol",
        "id": 802,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 1885,
        "sourceUnit": 2495,
        "src": "317:56:4",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 804,
              "name": "Context",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 2404,
              "src": "1107:7:4"
            },
            "id": 805,
            "nodeType": "InheritanceSpecifier",
            "src": "1107:7:4"
          },
          {
            "baseName": {
              "id": 806,
              "name": "IERC777",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 2047,
              "src": "1116:7:4"
            },
            "id": 807,
            "nodeType": "InheritanceSpecifier",
            "src": "1116:7:4"
          },
          {
            "baseName": {
              "id": 808,
              "name": "IERC20",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 768,
              "src": "1125:6:4"
            },
            "id": 809,
            "nodeType": "InheritanceSpecifier",
            "src": "1125:6:4"
          }
        ],
        "canonicalName": "ERC777",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 803,
          "nodeType": "StructuredDocumentation",
          "src": "375:712:4",
          "text": " @dev Implementation of the {IERC777} interface.\n This implementation is agnostic to the way tokens are created. This means\n that a supply mechanism has to be added in a derived contract using {_mint}.\n Support for ERC20 is included in this contract, as specified by the EIP: both\n the ERC777 and ERC20 interfaces can be safely used when interacting with it.\n Both {IERC777-Sent} and {IERC20-Transfer} events are emitted on token\n movements.\n Additionally, the {IERC777-granularity} value is hard-coded to `1`, meaning that there\n are no special restrictions in the amount of tokens that created, moved, or\n destroyed. This makes integration with ERC20 applications seamless."
        },
        "fullyImplemented": true,
        "id": 1884,
        "linearizedBaseContracts": [
          1884,
          768,
          2047,
          2404
        ],
        "name": "ERC777",
        "nameLocation": "1097:6:4",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "global": false,
            "id": 812,
            "libraryName": {
              "id": 810,
              "name": "Address",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 2382,
              "src": "1144:7:4"
            },
            "nodeType": "UsingForDirective",
            "src": "1138:26:4",
            "typeName": {
              "id": 811,
              "name": "address",
              "nodeType": "ElementaryTypeName",
              "src": "1156:7:4",
              "stateMutability": "nonpayable",
              "typeDescriptions": {
                "typeIdentifier": "t_address",
                "typeString": "address"
              }
            }
          },
          {
            "constant": true,
            "id": 818,
            "mutability": "constant",
            "name": "_ERC1820_REGISTRY",
            "nameLocation": "1205:17:4",
            "nodeType": "VariableDeclaration",
            "scope": 1884,
            "src": "1170:115:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_contract$_IERC1820Registry_$2494",
              "typeString": "contract IERC1820Registry"
            },
            "typeName": {
              "id": 814,
              "nodeType": "UserDefinedTypeName",
              "pathNode": {
                "id": 813,
                "name": "IERC1820Registry",
                "nodeType": "IdentifierPath",
                "referencedDeclaration": 2494,
                "src": "1170:16:4"
              },
              "referencedDeclaration": 2494,
              "src": "1170:16:4",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC1820Registry_$2494",
                "typeString": "contract IERC1820Registry"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "307831383230613442373631384264453731446365386364633733614142364339353930356661443234",
                  "id": 816,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "number",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1242:42:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "value": "0x1820a4B7618BdE71Dce8cdc73aAB6C95905faD24"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                ],
                "id": 815,
                "name": "IERC1820Registry",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": 2494,
                "src": "1225:16:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_type$_t_contract$_IERC1820Registry_$2494_$",
                  "typeString": "type(contract IERC1820Registry)"
                }
              },
              "id": 817,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "typeConversion",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1225:60:4",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC1820Registry_$2494",
                "typeString": "contract IERC1820Registry"
              }
            },
            "visibility": "internal"
          },
          {
            "constant": false,
            "id": 822,
            "mutability": "mutable",
            "name": "_balances",
            "nameLocation": "1328:9:4",
            "nodeType": "VariableDeclaration",
            "scope": 1884,
            "src": "1292:45:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
              "typeString": "mapping(address => uint256)"
            },
            "typeName": {
              "id": 821,
              "keyType": {
                "id": 819,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1300:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1292:27:4",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                "typeString": "mapping(address => uint256)"
              },
              "valueType": {
                "id": 820,
                "name": "uint256",
                "nodeType": "ElementaryTypeName",
                "src": "1311:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 824,
            "mutability": "mutable",
            "name": "_totalSupply",
            "nameLocation": "1360:12:4",
            "nodeType": "VariableDeclaration",
            "scope": 1884,
            "src": "1344:28:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint256",
              "typeString": "uint256"
            },
            "typeName": {
              "id": 823,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "1344:7:4",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 826,
            "mutability": "mutable",
            "name": "_name",
            "nameLocation": "1394:5:4",
            "nodeType": "VariableDeclaration",
            "scope": 1884,
            "src": "1379:20:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 825,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1379:6:4",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 828,
            "mutability": "mutable",
            "name": "_symbol",
            "nameLocation": "1420:7:4",
            "nodeType": "VariableDeclaration",
            "scope": 1884,
            "src": "1405:22:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_string_storage",
              "typeString": "string"
            },
            "typeName": {
              "id": 827,
              "name": "string",
              "nodeType": "ElementaryTypeName",
              "src": "1405:6:4",
              "typeDescriptions": {
                "typeIdentifier": "t_string_storage_ptr",
                "typeString": "string"
              }
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 833,
            "mutability": "constant",
            "name": "_TOKENS_SENDER_INTERFACE_HASH",
            "nameLocation": "1459:29:4",
            "nodeType": "VariableDeclaration",
            "scope": 1884,
            "src": "1434:88:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 829,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1434:7:4",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "455243373737546f6b656e7353656e646572",
                  "id": 831,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1501:20:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe895",
                    "typeString": "literal_string \"ERC777TokensSender\""
                  },
                  "value": "ERC777TokensSender"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_29ddb589b1fb5fc7cf394961c1adf5f8c6454761adf795e67fe149f658abe895",
                    "typeString": "literal_string \"ERC777TokensSender\""
                  }
                ],
                "id": 830,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": -8,
                "src": "1491:9:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 832,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1491:31:4",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "private"
          },
          {
            "constant": true,
            "id": 838,
            "mutability": "constant",
            "name": "_TOKENS_RECIPIENT_INTERFACE_HASH",
            "nameLocation": "1553:32:4",
            "nodeType": "VariableDeclaration",
            "scope": 1884,
            "src": "1528:94:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_bytes32",
              "typeString": "bytes32"
            },
            "typeName": {
              "id": 834,
              "name": "bytes32",
              "nodeType": "ElementaryTypeName",
              "src": "1528:7:4",
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "value": {
              "arguments": [
                {
                  "hexValue": "455243373737546f6b656e73526563697069656e74",
                  "id": 836,
                  "isConstant": false,
                  "isLValue": false,
                  "isPure": true,
                  "kind": "string",
                  "lValueRequested": false,
                  "nodeType": "Literal",
                  "src": "1598:23:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_stringliteral_b281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b",
                    "typeString": "literal_string \"ERC777TokensRecipient\""
                  },
                  "value": "ERC777TokensRecipient"
                }
              ],
              "expression": {
                "argumentTypes": [
                  {
                    "typeIdentifier": "t_stringliteral_b281fc8c12954d22544db45de3159a39272895b169a852b314f9cc762e44c53b",
                    "typeString": "literal_string \"ERC777TokensRecipient\""
                  }
                ],
                "id": 835,
                "name": "keccak256",
                "nodeType": "Identifier",
                "overloadedDeclarations": [],
                "referencedDeclaration": -8,
                "src": "1588:9:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                  "typeString": "function (bytes memory) pure returns (bytes32)"
                }
              },
              "id": 837,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "functionCall",
              "lValueRequested": false,
              "names": [],
              "nodeType": "FunctionCall",
              "src": "1588:34:4",
              "tryCall": false,
              "typeDescriptions": {
                "typeIdentifier": "t_bytes32",
                "typeString": "bytes32"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 841,
            "mutability": "mutable",
            "name": "_defaultOperatorsArray",
            "nameLocation": "1739:22:4",
            "nodeType": "VariableDeclaration",
            "scope": 1884,
            "src": "1721:40:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_array$_t_address_$dyn_storage",
              "typeString": "address[]"
            },
            "typeName": {
              "baseType": {
                "id": 839,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1721:7:4",
                "stateMutability": "nonpayable",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "id": 840,
              "nodeType": "ArrayTypeName",
              "src": "1721:9:4",
              "typeDescriptions": {
                "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                "typeString": "address[]"
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 845,
            "mutability": "mutable",
            "name": "_defaultOperators",
            "nameLocation": "1888:17:4",
            "nodeType": "VariableDeclaration",
            "scope": 1884,
            "src": "1855:50:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
              "typeString": "mapping(address => bool)"
            },
            "typeName": {
              "id": 844,
              "keyType": {
                "id": 842,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "1863:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1855:24:4",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                "typeString": "mapping(address => bool)"
              },
              "valueType": {
                "id": 843,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "1874:4:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 851,
            "mutability": "mutable",
            "name": "_operators",
            "nameLocation": "2048:10:4",
            "nodeType": "VariableDeclaration",
            "scope": 1884,
            "src": "1995:63:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
              "typeString": "mapping(address => mapping(address => bool))"
            },
            "typeName": {
              "id": 850,
              "keyType": {
                "id": 846,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2003:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "1995:44:4",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                "typeString": "mapping(address => mapping(address => bool))"
              },
              "valueType": {
                "id": 849,
                "keyType": {
                  "id": 847,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "2022:7:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "2014:24:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                  "typeString": "mapping(address => bool)"
                },
                "valueType": {
                  "id": 848,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "2033:4:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 857,
            "mutability": "mutable",
            "name": "_revokedDefaultOperators",
            "nameLocation": "2117:24:4",
            "nodeType": "VariableDeclaration",
            "scope": 1884,
            "src": "2064:77:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
              "typeString": "mapping(address => mapping(address => bool))"
            },
            "typeName": {
              "id": 856,
              "keyType": {
                "id": 852,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2072:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2064:44:4",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                "typeString": "mapping(address => mapping(address => bool))"
              },
              "valueType": {
                "id": 855,
                "keyType": {
                  "id": 853,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "2091:7:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "2083:24:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                  "typeString": "mapping(address => bool)"
                },
                "valueType": {
                  "id": 854,
                  "name": "bool",
                  "nodeType": "ElementaryTypeName",
                  "src": "2102:4:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  }
                }
              }
            },
            "visibility": "private"
          },
          {
            "constant": false,
            "id": 863,
            "mutability": "mutable",
            "name": "_allowances",
            "nameLocation": "2228:11:4",
            "nodeType": "VariableDeclaration",
            "scope": 1884,
            "src": "2172:67:4",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
              "typeString": "mapping(address => mapping(address => uint256))"
            },
            "typeName": {
              "id": 862,
              "keyType": {
                "id": 858,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2180:7:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2172:47:4",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                "typeString": "mapping(address => mapping(address => uint256))"
              },
              "valueType": {
                "id": 861,
                "keyType": {
                  "id": 859,
                  "name": "address",
                  "nodeType": "ElementaryTypeName",
                  "src": "2199:7:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  }
                },
                "nodeType": "Mapping",
                "src": "2191:27:4",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                  "typeString": "mapping(address => uint256)"
                },
                "valueType": {
                  "id": 860,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2210:7:4",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                }
              }
            },
            "visibility": "private"
          },
          {
            "body": {
              "id": 939,
              "nodeType": "Block",
              "src": "2438:490:4",
              "statements": [
                {
                  "expression": {
                    "id": 876,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 874,
                      "name": "_name",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 826,
                      "src": "2448:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 875,
                      "name": "name_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 866,
                      "src": "2456:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "2448:13:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 877,
                  "nodeType": "ExpressionStatement",
                  "src": "2448:13:4"
                },
                {
                  "expression": {
                    "id": 880,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 878,
                      "name": "_symbol",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 828,
                      "src": "2471:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_storage",
                        "typeString": "string storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 879,
                      "name": "symbol_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 868,
                      "src": "2481:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_string_memory_ptr",
                        "typeString": "string memory"
                      }
                    },
                    "src": "2471:17:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "id": 881,
                  "nodeType": "ExpressionStatement",
                  "src": "2471:17:4"
                },
                {
                  "expression": {
                    "id": 884,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 882,
                      "name": "_defaultOperatorsArray",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 841,
                      "src": "2499:22:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_storage",
                        "typeString": "address[] storage ref"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 883,
                      "name": "defaultOperators_",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 871,
                      "src": "2524:17:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                        "typeString": "address[] memory"
                      }
                    },
                    "src": "2499:42:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                      "typeString": "address[] storage ref"
                    }
                  },
                  "id": 885,
                  "nodeType": "ExpressionStatement",
                  "src": "2499:42:4"
                },
                {
                  "body": {
                    "id": 905,
                    "nodeType": "Block",
                    "src": "2606:71:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 903,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "id": 897,
                              "name": "_defaultOperators",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 845,
                              "src": "2620:17:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 901,
                            "indexExpression": {
                              "baseExpression": {
                                "id": 898,
                                "name": "defaultOperators_",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 871,
                                "src": "2638:17:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 900,
                              "indexExpression": {
                                "id": 899,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 887,
                                "src": "2656:1:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "2638:20:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "2620:39:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "74727565",
                            "id": 902,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2662:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "2620:46:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 904,
                        "nodeType": "ExpressionStatement",
                        "src": "2620:46:4"
                      }
                    ]
                  },
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 893,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 890,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 887,
                      "src": "2571:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "expression": {
                        "id": 891,
                        "name": "defaultOperators_",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 871,
                        "src": "2575:17:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 892,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "src": "2575:24:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "2571:28:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 906,
                  "initializationExpression": {
                    "assignments": [
                      887
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 887,
                        "mutability": "mutable",
                        "name": "i",
                        "nameLocation": "2564:1:4",
                        "nodeType": "VariableDeclaration",
                        "scope": 906,
                        "src": "2556:9:4",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 886,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "2556:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "visibility": "internal"
                      }
                    ],
                    "id": 889,
                    "initialValue": {
                      "hexValue": "30",
                      "id": 888,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "2568:1:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "2556:13:4"
                  },
                  "loopExpression": {
                    "expression": {
                      "id": 895,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "2601:3:4",
                      "subExpression": {
                        "id": 894,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 887,
                        "src": "2601:1:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 896,
                    "nodeType": "ExpressionStatement",
                    "src": "2601:3:4"
                  },
                  "nodeType": "ForStatement",
                  "src": "2551:126:4"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 912,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "2768:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC777_$1884",
                              "typeString": "contract ERC777"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC777_$1884",
                              "typeString": "contract ERC777"
                            }
                          ],
                          "id": 911,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2760:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 910,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2760:7:4",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 913,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2760:13:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "455243373737546f6b656e",
                            "id": 915,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2785:13:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_ac7fbab5f54a3ca8194167523c6753bfeb96a445279294b6125b68cce2177054",
                              "typeString": "literal_string \"ERC777Token\""
                            },
                            "value": "ERC777Token"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_ac7fbab5f54a3ca8194167523c6753bfeb96a445279294b6125b68cce2177054",
                              "typeString": "literal_string \"ERC777Token\""
                            }
                          ],
                          "id": 914,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -8,
                          "src": "2775:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 916,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2775:24:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 919,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "2809:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC777_$1884",
                              "typeString": "contract ERC777"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC777_$1884",
                              "typeString": "contract ERC777"
                            }
                          ],
                          "id": 918,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2801:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 917,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2801:7:4",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 920,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2801:13:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 907,
                        "name": "_ERC1820_REGISTRY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 818,
                        "src": "2718:17:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC1820Registry_$2494",
                          "typeString": "contract IERC1820Registry"
                        }
                      },
                      "id": 909,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setInterfaceImplementer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2447,
                      "src": "2718:41:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,bytes32,address) external"
                      }
                    },
                    "id": 921,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2718:97:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 922,
                  "nodeType": "ExpressionStatement",
                  "src": "2718:97:4"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "id": 928,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "2875:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC777_$1884",
                              "typeString": "contract ERC777"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC777_$1884",
                              "typeString": "contract ERC777"
                            }
                          ],
                          "id": 927,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2867:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 926,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2867:7:4",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 929,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2867:13:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "4552433230546f6b656e",
                            "id": 931,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "string",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "2892:12:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_stringliteral_aea199e31a596269b42cdafd93407f14436db6e4cad65417994c2eb37381e05a",
                              "typeString": "literal_string \"ERC20Token\""
                            },
                            "value": "ERC20Token"
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_stringliteral_aea199e31a596269b42cdafd93407f14436db6e4cad65417994c2eb37381e05a",
                              "typeString": "literal_string \"ERC20Token\""
                            }
                          ],
                          "id": 930,
                          "name": "keccak256",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -8,
                          "src": "2882:9:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                            "typeString": "function (bytes memory) pure returns (bytes32)"
                          }
                        },
                        "id": 932,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2882:23:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "id": 935,
                            "name": "this",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -28,
                            "src": "2915:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_contract$_ERC777_$1884",
                              "typeString": "contract ERC777"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_contract$_ERC777_$1884",
                              "typeString": "contract ERC777"
                            }
                          ],
                          "id": 934,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "2907:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 933,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "2907:7:4",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 936,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "2907:13:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "expression": {
                        "id": 923,
                        "name": "_ERC1820_REGISTRY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 818,
                        "src": "2825:17:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC1820Registry_$2494",
                          "typeString": "contract IERC1820Registry"
                        }
                      },
                      "id": 925,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "setInterfaceImplementer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2447,
                      "src": "2825:41:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_bytes32_$_t_address_$returns$__$",
                        "typeString": "function (address,bytes32,address) external"
                      }
                    },
                    "id": 937,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "2825:96:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 938,
                  "nodeType": "ExpressionStatement",
                  "src": "2825:96:4"
                }
              ]
            },
            "documentation": {
              "id": 864,
              "nodeType": "StructuredDocumentation",
              "src": "2246:65:4",
              "text": " @dev `defaultOperators` may be an empty array."
            },
            "id": 940,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 872,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 866,
                  "mutability": "mutable",
                  "name": "name_",
                  "nameLocation": "2351:5:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 940,
                  "src": "2337:19:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 865,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2337:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 868,
                  "mutability": "mutable",
                  "name": "symbol_",
                  "nameLocation": "2380:7:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 940,
                  "src": "2366:21:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 867,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "2366:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 871,
                  "mutability": "mutable",
                  "name": "defaultOperators_",
                  "nameLocation": "2414:17:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 940,
                  "src": "2397:34:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 869,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "2397:7:4",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 870,
                    "nodeType": "ArrayTypeName",
                    "src": "2397:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "2327:110:4"
            },
            "returnParameters": {
              "id": 873,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2438:0:4"
            },
            "scope": 1884,
            "src": "2316:612:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              1933
            ],
            "body": {
              "id": 949,
              "nodeType": "Block",
              "src": "3051:29:4",
              "statements": [
                {
                  "expression": {
                    "id": 947,
                    "name": "_name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 826,
                    "src": "3068:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "functionReturnParameters": 946,
                  "id": 948,
                  "nodeType": "Return",
                  "src": "3061:12:4"
                }
              ]
            },
            "documentation": {
              "id": 941,
              "nodeType": "StructuredDocumentation",
              "src": "2934:43:4",
              "text": " @dev See {IERC777-name}."
            },
            "functionSelector": "06fdde03",
            "id": 950,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "name",
            "nameLocation": "2991:4:4",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 943,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3018:8:4"
            },
            "parameters": {
              "id": 942,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "2995:2:4"
            },
            "returnParameters": {
              "id": 946,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 945,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 950,
                  "src": "3036:13:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 944,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3036:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3035:15:4"
            },
            "scope": 1884,
            "src": "2982:98:4",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              1939
            ],
            "body": {
              "id": 959,
              "nodeType": "Block",
              "src": "3207:31:4",
              "statements": [
                {
                  "expression": {
                    "id": 957,
                    "name": "_symbol",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 828,
                    "src": "3224:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage",
                      "typeString": "string storage ref"
                    }
                  },
                  "functionReturnParameters": 956,
                  "id": 958,
                  "nodeType": "Return",
                  "src": "3217:14:4"
                }
              ]
            },
            "documentation": {
              "id": 951,
              "nodeType": "StructuredDocumentation",
              "src": "3086:45:4",
              "text": " @dev See {IERC777-symbol}."
            },
            "functionSelector": "95d89b41",
            "id": 960,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "symbol",
            "nameLocation": "3145:6:4",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 953,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3174:8:4"
            },
            "parameters": {
              "id": 952,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3151:2:4"
            },
            "returnParameters": {
              "id": 956,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 955,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 960,
                  "src": "3192:13:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 954,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "3192:6:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3191:15:4"
            },
            "scope": 1884,
            "src": "3136:102:4",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 968,
              "nodeType": "Block",
              "src": "3478:26:4",
              "statements": [
                {
                  "expression": {
                    "hexValue": "3138",
                    "id": 966,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3495:2:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_18_by_1",
                      "typeString": "int_const 18"
                    },
                    "value": "18"
                  },
                  "functionReturnParameters": 965,
                  "id": 967,
                  "nodeType": "Return",
                  "src": "3488:9:4"
                }
              ]
            },
            "documentation": {
              "id": 961,
              "nodeType": "StructuredDocumentation",
              "src": "3244:173:4",
              "text": " @dev See {ERC20-decimals}.\n Always returns 18, as per the\n [ERC777 EIP](https://eips.ethereum.org/EIPS/eip-777#backward-compatibility)."
            },
            "functionSelector": "313ce567",
            "id": 969,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "decimals",
            "nameLocation": "3431:8:4",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 962,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3439:2:4"
            },
            "returnParameters": {
              "id": 965,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 964,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 969,
                  "src": "3471:5:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint8",
                    "typeString": "uint8"
                  },
                  "typeName": {
                    "id": 963,
                    "name": "uint8",
                    "nodeType": "ElementaryTypeName",
                    "src": "3471:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint8",
                      "typeString": "uint8"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3470:7:4"
            },
            "scope": 1884,
            "src": "3422:82:4",
            "stateMutability": "pure",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              1945
            ],
            "body": {
              "id": 978,
              "nodeType": "Block",
              "src": "3689:25:4",
              "statements": [
                {
                  "expression": {
                    "hexValue": "31",
                    "id": 976,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "number",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "3706:1:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_rational_1_by_1",
                      "typeString": "int_const 1"
                    },
                    "value": "1"
                  },
                  "functionReturnParameters": 975,
                  "id": 977,
                  "nodeType": "Return",
                  "src": "3699:8:4"
                }
              ]
            },
            "documentation": {
              "id": 970,
              "nodeType": "StructuredDocumentation",
              "src": "3510:104:4",
              "text": " @dev See {IERC777-granularity}.\n This implementation always returns `1`."
            },
            "functionSelector": "556f0dc7",
            "id": 979,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "granularity",
            "nameLocation": "3628:11:4",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 972,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "3662:8:4"
            },
            "parameters": {
              "id": 971,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3639:2:4"
            },
            "returnParameters": {
              "id": 975,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 974,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 979,
                  "src": "3680:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 973,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3680:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3679:9:4"
            },
            "scope": 1884,
            "src": "3619:95:4",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              717,
              1951
            ],
            "body": {
              "id": 990,
              "nodeType": "Block",
              "src": "3862:36:4",
              "statements": [
                {
                  "expression": {
                    "id": 988,
                    "name": "_totalSupply",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 824,
                    "src": "3879:12:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 987,
                  "id": 989,
                  "nodeType": "Return",
                  "src": "3872:19:4"
                }
              ]
            },
            "documentation": {
              "id": 980,
              "nodeType": "StructuredDocumentation",
              "src": "3720:50:4",
              "text": " @dev See {IERC777-totalSupply}."
            },
            "functionSelector": "18160ddd",
            "id": 991,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "totalSupply",
            "nameLocation": "3784:11:4",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 984,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "id": 982,
                  "name": "IERC20",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 768,
                  "src": "3827:6:4"
                },
                {
                  "id": 983,
                  "name": "IERC777",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 2047,
                  "src": "3835:7:4"
                }
              ],
              "src": "3818:25:4"
            },
            "parameters": {
              "id": 981,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3795:2:4"
            },
            "returnParameters": {
              "id": 987,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 986,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 991,
                  "src": "3853:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 985,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3853:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "3852:9:4"
            },
            "scope": 1884,
            "src": "3775:123:4",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              725,
              1959
            ],
            "body": {
              "id": 1006,
              "nodeType": "Block",
              "src": "4102:46:4",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "id": 1002,
                      "name": "_balances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 822,
                      "src": "4119:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 1004,
                    "indexExpression": {
                      "id": 1003,
                      "name": "tokenHolder",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 994,
                      "src": "4129:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "4119:22:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1001,
                  "id": 1005,
                  "nodeType": "Return",
                  "src": "4112:29:4"
                }
              ]
            },
            "documentation": {
              "id": 992,
              "nodeType": "StructuredDocumentation",
              "src": "3904:89:4",
              "text": " @dev Returns the amount of tokens owned by an account (`tokenHolder`)."
            },
            "functionSelector": "70a08231",
            "id": 1007,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "balanceOf",
            "nameLocation": "4007:9:4",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 998,
              "nodeType": "OverrideSpecifier",
              "overrides": [
                {
                  "id": 996,
                  "name": "IERC20",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 768,
                  "src": "4067:6:4"
                },
                {
                  "id": 997,
                  "name": "IERC777",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 2047,
                  "src": "4075:7:4"
                }
              ],
              "src": "4058:25:4"
            },
            "parameters": {
              "id": 995,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 994,
                  "mutability": "mutable",
                  "name": "tokenHolder",
                  "nameLocation": "4025:11:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1007,
                  "src": "4017:19:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 993,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4017:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4016:21:4"
            },
            "returnParameters": {
              "id": 1001,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1000,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1007,
                  "src": "4093:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 999,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4093:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4092:9:4"
            },
            "scope": 1884,
            "src": "3998:150:4",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              1969
            ],
            "body": {
              "id": 1028,
              "nodeType": "Block",
              "src": "4400:71:4",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1019,
                          "name": "_msgSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2394,
                          "src": "4416:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 1020,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4416:12:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1021,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1010,
                        "src": "4430:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1022,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1012,
                        "src": "4441:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 1023,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1014,
                        "src": "4449:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "hexValue": "",
                        "id": 1024,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4455:2:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        "value": ""
                      },
                      {
                        "hexValue": "74727565",
                        "id": 1025,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4459:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1018,
                      "name": "_send",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1520,
                      "src": "4410:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bool_$returns$__$",
                        "typeString": "function (address,address,uint256,bytes memory,bytes memory,bool)"
                      }
                    },
                    "id": 1026,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4410:54:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1027,
                  "nodeType": "ExpressionStatement",
                  "src": "4410:54:4"
                }
              ]
            },
            "documentation": {
              "id": 1008,
              "nodeType": "StructuredDocumentation",
              "src": "4154:119:4",
              "text": " @dev See {IERC777-send}.\n Also emits a {IERC20-Transfer} event for ERC20 compatibility."
            },
            "functionSelector": "9bd9bbc6",
            "id": 1029,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "send",
            "nameLocation": "4287:4:4",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1016,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4391:8:4"
            },
            "parameters": {
              "id": 1015,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1010,
                  "mutability": "mutable",
                  "name": "recipient",
                  "nameLocation": "4309:9:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1029,
                  "src": "4301:17:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1009,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4301:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1012,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "4336:6:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1029,
                  "src": "4328:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1011,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4328:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1014,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "4365:4:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1029,
                  "src": "4352:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1013,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "4352:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4291:84:4"
            },
            "returnParameters": {
              "id": 1017,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4400:0:4"
            },
            "scope": 1884,
            "src": "4278:193:4",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              735
            ],
            "body": {
              "id": 1052,
              "nodeType": "Block",
              "src": "4794:91:4",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1041,
                          "name": "_msgSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2394,
                          "src": "4810:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 1042,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "4810:12:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1043,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1032,
                        "src": "4824:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1044,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1034,
                        "src": "4835:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "",
                        "id": 1045,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4843:2:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        "value": ""
                      },
                      {
                        "hexValue": "",
                        "id": 1046,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4847:2:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        "value": ""
                      },
                      {
                        "hexValue": "66616c7365",
                        "id": 1047,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "4851:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1040,
                      "name": "_send",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1520,
                      "src": "4804:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bool_$returns$__$",
                        "typeString": "function (address,address,uint256,bytes memory,bytes memory,bool)"
                      }
                    },
                    "id": 1048,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "4804:53:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1049,
                  "nodeType": "ExpressionStatement",
                  "src": "4804:53:4"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 1050,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "4874:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 1039,
                  "id": 1051,
                  "nodeType": "Return",
                  "src": "4867:11:4"
                }
              ]
            },
            "documentation": {
              "id": 1030,
              "nodeType": "StructuredDocumentation",
              "src": "4477:220:4",
              "text": " @dev See {IERC20-transfer}.\n Unlike `send`, `recipient` is _not_ required to implement the {IERC777Recipient}\n interface if it is a contract.\n Also emits a {Sent} event."
            },
            "functionSelector": "a9059cbb",
            "id": 1053,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transfer",
            "nameLocation": "4711:8:4",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1036,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "4770:8:4"
            },
            "parameters": {
              "id": 1035,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1032,
                  "mutability": "mutable",
                  "name": "recipient",
                  "nameLocation": "4728:9:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1053,
                  "src": "4720:17:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1031,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4720:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1034,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "4747:6:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1053,
                  "src": "4739:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1033,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "4739:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4719:35:4"
            },
            "returnParameters": {
              "id": 1039,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1038,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1053,
                  "src": "4788:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1037,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4788:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "4787:6:4"
            },
            "scope": 1884,
            "src": "4702:183:4",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              1977
            ],
            "body": {
              "id": 1070,
              "nodeType": "Block",
              "src": "5088:54:4",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1063,
                          "name": "_msgSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2394,
                          "src": "5104:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 1064,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5104:12:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1065,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1056,
                        "src": "5118:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 1066,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1058,
                        "src": "5126:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "hexValue": "",
                        "id": 1067,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5132:2:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        "value": ""
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        }
                      ],
                      "id": 1062,
                      "name": "_burn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1613,
                      "src": "5098:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,uint256,bytes memory,bytes memory)"
                      }
                    },
                    "id": 1068,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5098:37:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1069,
                  "nodeType": "ExpressionStatement",
                  "src": "5098:37:4"
                }
              ]
            },
            "documentation": {
              "id": 1054,
              "nodeType": "StructuredDocumentation",
              "src": "4891:119:4",
              "text": " @dev See {IERC777-burn}.\n Also emits a {IERC20-Transfer} event for ERC20 compatibility."
            },
            "functionSelector": "fe9d9303",
            "id": 1071,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "burn",
            "nameLocation": "5024:4:4",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1060,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5079:8:4"
            },
            "parameters": {
              "id": 1059,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1056,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "5037:6:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1071,
                  "src": "5029:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1055,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "5029:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1058,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "5058:4:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1071,
                  "src": "5045:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1057,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "5045:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5028:35:4"
            },
            "returnParameters": {
              "id": 1061,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5088:0:4"
            },
            "scope": 1884,
            "src": "5015:127:4",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              1987
            ],
            "body": {
              "id": 1104,
              "nodeType": "Block",
              "src": "5311:205:4",
              "statements": [
                {
                  "expression": {
                    "commonType": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "id": 1102,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "commonType": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "id": 1096,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "leftExpression": {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1084,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 1082,
                          "name": "operator",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1074,
                          "src": "5340:8:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "id": 1083,
                          "name": "tokenHolder",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1076,
                          "src": "5352:11:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "5340:23:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "nodeType": "BinaryOperation",
                      "operator": "||",
                      "rightExpression": {
                        "components": [
                          {
                            "commonType": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "id": 1094,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "leftExpression": {
                              "baseExpression": {
                                "id": 1085,
                                "name": "_defaultOperators",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 845,
                                "src": "5380:17:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                  "typeString": "mapping(address => bool)"
                                }
                              },
                              "id": 1087,
                              "indexExpression": {
                                "id": 1086,
                                "name": "operator",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1074,
                                "src": "5398:8:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "5380:27:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "nodeType": "BinaryOperation",
                            "operator": "&&",
                            "rightExpression": {
                              "id": 1093,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "UnaryOperation",
                              "operator": "!",
                              "prefix": true,
                              "src": "5411:48:4",
                              "subExpression": {
                                "baseExpression": {
                                  "baseExpression": {
                                    "id": 1088,
                                    "name": "_revokedDefaultOperators",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 857,
                                    "src": "5412:24:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                                      "typeString": "mapping(address => mapping(address => bool))"
                                    }
                                  },
                                  "id": 1090,
                                  "indexExpression": {
                                    "id": 1089,
                                    "name": "tokenHolder",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1076,
                                    "src": "5437:11:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "nodeType": "IndexAccess",
                                  "src": "5412:37:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                    "typeString": "mapping(address => bool)"
                                  }
                                },
                                "id": 1092,
                                "indexExpression": {
                                  "id": 1091,
                                  "name": "operator",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1074,
                                  "src": "5450:8:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "IndexAccess",
                                "src": "5412:47:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            "src": "5380:79:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          }
                        ],
                        "id": 1095,
                        "isConstant": false,
                        "isInlineArray": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "TupleExpression",
                        "src": "5379:81:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "src": "5340:120:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "||",
                    "rightExpression": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 1097,
                          "name": "_operators",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 851,
                          "src": "5476:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                            "typeString": "mapping(address => mapping(address => bool))"
                          }
                        },
                        "id": 1099,
                        "indexExpression": {
                          "id": 1098,
                          "name": "tokenHolder",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1076,
                          "src": "5487:11:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "5476:23:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 1101,
                      "indexExpression": {
                        "id": 1100,
                        "name": "operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1074,
                        "src": "5500:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "5476:33:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "5340:169:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1081,
                  "id": 1103,
                  "nodeType": "Return",
                  "src": "5321:188:4"
                }
              ]
            },
            "documentation": {
              "id": 1072,
              "nodeType": "StructuredDocumentation",
              "src": "5148:52:4",
              "text": " @dev See {IERC777-isOperatorFor}."
            },
            "functionSelector": "d95b6371",
            "id": 1105,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "isOperatorFor",
            "nameLocation": "5214:13:4",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1078,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5287:8:4"
            },
            "parameters": {
              "id": 1077,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1074,
                  "mutability": "mutable",
                  "name": "operator",
                  "nameLocation": "5236:8:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1105,
                  "src": "5228:16:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1073,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5228:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1076,
                  "mutability": "mutable",
                  "name": "tokenHolder",
                  "nameLocation": "5254:11:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1105,
                  "src": "5246:19:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1075,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5246:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5227:39:4"
            },
            "returnParameters": {
              "id": 1081,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1080,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1105,
                  "src": "5305:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1079,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "5305:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5304:6:4"
            },
            "scope": 1884,
            "src": "5205:311:4",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              1993
            ],
            "body": {
              "id": 1149,
              "nodeType": "Block",
              "src": "5652:343:4",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1116,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1113,
                            "name": "_msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2394,
                            "src": "5670:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 1114,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "5670:12:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "id": 1115,
                          "name": "operator",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1108,
                          "src": "5686:8:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "5670:24:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433737373a20617574686f72697a696e672073656c66206173206f70657261746f72",
                        "id": 1117,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "5696:38:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_4682b297c30e70ba17ae545f9c27f948e3607c0cc7dd469250dfcf8daa94218c",
                          "typeString": "literal_string \"ERC777: authorizing self as operator\""
                        },
                        "value": "ERC777: authorizing self as operator"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_4682b297c30e70ba17ae545f9c27f948e3607c0cc7dd469250dfcf8daa94218c",
                          "typeString": "literal_string \"ERC777: authorizing self as operator\""
                        }
                      ],
                      "id": 1112,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "5662:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1118,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5662:73:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1119,
                  "nodeType": "ExpressionStatement",
                  "src": "5662:73:4"
                },
                {
                  "condition": {
                    "baseExpression": {
                      "id": 1120,
                      "name": "_defaultOperators",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 845,
                      "src": "5750:17:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      }
                    },
                    "id": 1122,
                    "indexExpression": {
                      "id": 1121,
                      "name": "operator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1108,
                      "src": "5768:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "5750:27:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 1141,
                    "nodeType": "Block",
                    "src": "5865:66:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 1139,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 1132,
                                "name": "_operators",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 851,
                                "src": "5879:10:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                                  "typeString": "mapping(address => mapping(address => bool))"
                                }
                              },
                              "id": 1136,
                              "indexExpression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 1133,
                                  "name": "_msgSender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2394,
                                  "src": "5890:10:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                    "typeString": "function () view returns (address)"
                                  }
                                },
                                "id": 1134,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5890:12:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "5879:24:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 1137,
                            "indexExpression": {
                              "id": 1135,
                              "name": "operator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1108,
                              "src": "5904:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "5879:34:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "74727565",
                            "id": 1138,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "5916:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "5879:41:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1140,
                        "nodeType": "ExpressionStatement",
                        "src": "5879:41:4"
                      }
                    ]
                  },
                  "id": 1142,
                  "nodeType": "IfStatement",
                  "src": "5746:185:4",
                  "trueBody": {
                    "id": 1131,
                    "nodeType": "Block",
                    "src": "5779:80:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 1129,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "5793:55:4",
                          "subExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 1123,
                                "name": "_revokedDefaultOperators",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 857,
                                "src": "5800:24:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                                  "typeString": "mapping(address => mapping(address => bool))"
                                }
                              },
                              "id": 1126,
                              "indexExpression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 1124,
                                  "name": "_msgSender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2394,
                                  "src": "5825:10:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                    "typeString": "function () view returns (address)"
                                  }
                                },
                                "id": 1125,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "5825:12:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "5800:38:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 1128,
                            "indexExpression": {
                              "id": 1127,
                              "name": "operator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1108,
                              "src": "5839:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "5800:48:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1130,
                        "nodeType": "ExpressionStatement",
                        "src": "5793:55:4"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1144,
                        "name": "operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1108,
                        "src": "5965:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1145,
                          "name": "_msgSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2394,
                          "src": "5975:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 1146,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "5975:12:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1143,
                      "name": "AuthorizedOperator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1920,
                      "src": "5946:18:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 1147,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "5946:42:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1148,
                  "nodeType": "EmitStatement",
                  "src": "5941:47:4"
                }
              ]
            },
            "documentation": {
              "id": 1106,
              "nodeType": "StructuredDocumentation",
              "src": "5522:56:4",
              "text": " @dev See {IERC777-authorizeOperator}."
            },
            "functionSelector": "959b8c3f",
            "id": 1150,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "authorizeOperator",
            "nameLocation": "5592:17:4",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1110,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "5643:8:4"
            },
            "parameters": {
              "id": 1109,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1108,
                  "mutability": "mutable",
                  "name": "operator",
                  "nameLocation": "5618:8:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1150,
                  "src": "5610:16:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1107,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "5610:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "5609:18:4"
            },
            "returnParameters": {
              "id": 1111,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "5652:0:4"
            },
            "scope": 1884,
            "src": "5583:412:4",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              1999
            ],
            "body": {
              "id": 1194,
              "nodeType": "Block",
              "src": "6125:337:4",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1161,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 1158,
                          "name": "operator",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1153,
                          "src": "6143:8:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1159,
                            "name": "_msgSender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 2394,
                            "src": "6155:10:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                              "typeString": "function () view returns (address)"
                            }
                          },
                          "id": 1160,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6155:12:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "6143:24:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433737373a207265766f6b696e672073656c66206173206f70657261746f72",
                        "id": 1162,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "6169:35:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_67ce503bd3a359eb530c6f3a909afa9e71899e0352d883198e721fd5fceefab5",
                          "typeString": "literal_string \"ERC777: revoking self as operator\""
                        },
                        "value": "ERC777: revoking self as operator"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_67ce503bd3a359eb530c6f3a909afa9e71899e0352d883198e721fd5fceefab5",
                          "typeString": "literal_string \"ERC777: revoking self as operator\""
                        }
                      ],
                      "id": 1157,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6135:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1163,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6135:70:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1164,
                  "nodeType": "ExpressionStatement",
                  "src": "6135:70:4"
                },
                {
                  "condition": {
                    "baseExpression": {
                      "id": 1165,
                      "name": "_defaultOperators",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 845,
                      "src": "6220:17:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                        "typeString": "mapping(address => bool)"
                      }
                    },
                    "id": 1167,
                    "indexExpression": {
                      "id": 1166,
                      "name": "operator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1153,
                      "src": "6238:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "6220:27:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "id": 1186,
                    "nodeType": "Block",
                    "src": "6335:66:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 1184,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "UnaryOperation",
                          "operator": "delete",
                          "prefix": true,
                          "src": "6349:41:4",
                          "subExpression": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 1178,
                                "name": "_operators",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 851,
                                "src": "6356:10:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                                  "typeString": "mapping(address => mapping(address => bool))"
                                }
                              },
                              "id": 1181,
                              "indexExpression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 1179,
                                  "name": "_msgSender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2394,
                                  "src": "6367:10:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                    "typeString": "function () view returns (address)"
                                  }
                                },
                                "id": 1180,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6367:12:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6356:24:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 1183,
                            "indexExpression": {
                              "id": 1182,
                              "name": "operator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1153,
                              "src": "6381:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "6356:34:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1185,
                        "nodeType": "ExpressionStatement",
                        "src": "6349:41:4"
                      }
                    ]
                  },
                  "id": 1187,
                  "nodeType": "IfStatement",
                  "src": "6216:185:4",
                  "trueBody": {
                    "id": 1177,
                    "nodeType": "Block",
                    "src": "6249:80:4",
                    "statements": [
                      {
                        "expression": {
                          "id": 1175,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "baseExpression": {
                              "baseExpression": {
                                "id": 1168,
                                "name": "_revokedDefaultOperators",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 857,
                                "src": "6263:24:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_bool_$_$",
                                  "typeString": "mapping(address => mapping(address => bool))"
                                }
                              },
                              "id": 1172,
                              "indexExpression": {
                                "arguments": [],
                                "expression": {
                                  "argumentTypes": [],
                                  "id": 1169,
                                  "name": "_msgSender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 2394,
                                  "src": "6288:10:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                    "typeString": "function () view returns (address)"
                                  }
                                },
                                "id": 1170,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "6288:12:4",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "6263:38:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                                "typeString": "mapping(address => bool)"
                              }
                            },
                            "id": 1173,
                            "indexExpression": {
                              "id": 1171,
                              "name": "operator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1153,
                              "src": "6302:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "6263:48:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "hexValue": "74727565",
                            "id": 1174,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "bool",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "6314:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bool",
                              "typeString": "bool"
                            },
                            "value": "true"
                          },
                          "src": "6263:55:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1176,
                        "nodeType": "ExpressionStatement",
                        "src": "6263:55:4"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1189,
                        "name": "operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1153,
                        "src": "6432:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [],
                        "expression": {
                          "argumentTypes": [],
                          "id": 1190,
                          "name": "_msgSender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 2394,
                          "src": "6442:10:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                            "typeString": "function () view returns (address)"
                          }
                        },
                        "id": 1191,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6442:12:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1188,
                      "name": "RevokedOperator",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1927,
                      "src": "6416:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$returns$__$",
                        "typeString": "function (address,address)"
                      }
                    },
                    "id": 1192,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6416:39:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1193,
                  "nodeType": "EmitStatement",
                  "src": "6411:44:4"
                }
              ]
            },
            "documentation": {
              "id": 1151,
              "nodeType": "StructuredDocumentation",
              "src": "6001:53:4",
              "text": " @dev See {IERC777-revokeOperator}."
            },
            "functionSelector": "fad8b32a",
            "id": 1195,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "revokeOperator",
            "nameLocation": "6068:14:4",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1155,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6116:8:4"
            },
            "parameters": {
              "id": 1154,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1153,
                  "mutability": "mutable",
                  "name": "operator",
                  "nameLocation": "6091:8:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1195,
                  "src": "6083:16:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1152,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6083:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6082:18:4"
            },
            "returnParameters": {
              "id": 1156,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6125:0:4"
            },
            "scope": 1884,
            "src": "6059:403:4",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              2006
            ],
            "body": {
              "id": 1205,
              "nodeType": "Block",
              "src": "6612:46:4",
              "statements": [
                {
                  "expression": {
                    "id": 1203,
                    "name": "_defaultOperatorsArray",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 841,
                    "src": "6629:22:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage",
                      "typeString": "address[] storage ref"
                    }
                  },
                  "functionReturnParameters": 1202,
                  "id": 1204,
                  "nodeType": "Return",
                  "src": "6622:29:4"
                }
              ]
            },
            "documentation": {
              "id": 1196,
              "nodeType": "StructuredDocumentation",
              "src": "6468:55:4",
              "text": " @dev See {IERC777-defaultOperators}."
            },
            "functionSelector": "06e48538",
            "id": 1206,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "defaultOperators",
            "nameLocation": "6537:16:4",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1198,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6576:8:4"
            },
            "parameters": {
              "id": 1197,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6553:2:4"
            },
            "returnParameters": {
              "id": 1202,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1201,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1206,
                  "src": "6594:16:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1199,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "6594:7:4",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 1200,
                    "nodeType": "ArrayTypeName",
                    "src": "6594:9:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6593:18:4"
            },
            "scope": 1884,
            "src": "6528:130:4",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              2020
            ],
            "body": {
              "id": 1239,
              "nodeType": "Block",
              "src": "6966:177:4",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 1223,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2394,
                              "src": "6998:10:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 1224,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "6998:12:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 1225,
                            "name": "sender",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1209,
                            "src": "7012:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 1222,
                          "name": "isOperatorFor",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1105,
                          "src": "6984:13:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address,address) view returns (bool)"
                          }
                        },
                        "id": 1226,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "6984:35:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f7220666f7220686f6c646572",
                        "id": 1227,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7021:46:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d0e912496dc7a0050c7f3e14272d4929a90a242e3fdaef730410cdf35f965235",
                          "typeString": "literal_string \"ERC777: caller is not an operator for holder\""
                        },
                        "value": "ERC777: caller is not an operator for holder"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d0e912496dc7a0050c7f3e14272d4929a90a242e3fdaef730410cdf35f965235",
                          "typeString": "literal_string \"ERC777: caller is not an operator for holder\""
                        }
                      ],
                      "id": 1221,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "6976:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1228,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6976:92:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1229,
                  "nodeType": "ExpressionStatement",
                  "src": "6976:92:4"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1231,
                        "name": "sender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1209,
                        "src": "7084:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1232,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1211,
                        "src": "7092:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1233,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1213,
                        "src": "7103:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 1234,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1215,
                        "src": "7111:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 1235,
                        "name": "operatorData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1217,
                        "src": "7117:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "hexValue": "74727565",
                        "id": 1236,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7131:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1230,
                      "name": "_send",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1520,
                      "src": "7078:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bool_$returns$__$",
                        "typeString": "function (address,address,uint256,bytes memory,bytes memory,bool)"
                      }
                    },
                    "id": 1237,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7078:58:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1238,
                  "nodeType": "ExpressionStatement",
                  "src": "7078:58:4"
                }
              ]
            },
            "documentation": {
              "id": 1207,
              "nodeType": "StructuredDocumentation",
              "src": "6664:108:4",
              "text": " @dev See {IERC777-operatorSend}.\n Emits {Sent} and {IERC20-Transfer} events."
            },
            "functionSelector": "62ad1b83",
            "id": 1240,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "operatorSend",
            "nameLocation": "6786:12:4",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1219,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "6957:8:4"
            },
            "parameters": {
              "id": 1218,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1209,
                  "mutability": "mutable",
                  "name": "sender",
                  "nameLocation": "6816:6:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1240,
                  "src": "6808:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1208,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6808:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1211,
                  "mutability": "mutable",
                  "name": "recipient",
                  "nameLocation": "6840:9:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1240,
                  "src": "6832:17:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1210,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "6832:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1213,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "6867:6:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1240,
                  "src": "6859:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1212,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "6859:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1215,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "6896:4:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1240,
                  "src": "6883:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1214,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6883:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1217,
                  "mutability": "mutable",
                  "name": "operatorData",
                  "nameLocation": "6923:12:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1240,
                  "src": "6910:25:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1216,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "6910:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "6798:143:4"
            },
            "returnParameters": {
              "id": 1220,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6966:0:4"
            },
            "scope": 1884,
            "src": "6777:366:4",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              2032
            ],
            "body": {
              "id": 1269,
              "nodeType": "Block",
              "src": "7427:162:4",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 1255,
                              "name": "_msgSender",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 2394,
                              "src": "7459:10:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                                "typeString": "function () view returns (address)"
                              }
                            },
                            "id": 1256,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "7459:12:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "id": 1257,
                            "name": "account",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1243,
                            "src": "7473:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "id": 1254,
                          "name": "isOperatorFor",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1105,
                          "src": "7445:13:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_bool_$",
                            "typeString": "function (address,address) view returns (bool)"
                          }
                        },
                        "id": 1258,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "7445:36:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433737373a2063616c6c6572206973206e6f7420616e206f70657261746f7220666f7220686f6c646572",
                        "id": 1259,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7483:46:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_d0e912496dc7a0050c7f3e14272d4929a90a242e3fdaef730410cdf35f965235",
                          "typeString": "literal_string \"ERC777: caller is not an operator for holder\""
                        },
                        "value": "ERC777: caller is not an operator for holder"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_d0e912496dc7a0050c7f3e14272d4929a90a242e3fdaef730410cdf35f965235",
                          "typeString": "literal_string \"ERC777: caller is not an operator for holder\""
                        }
                      ],
                      "id": 1253,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7437:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1260,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7437:93:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1261,
                  "nodeType": "ExpressionStatement",
                  "src": "7437:93:4"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1263,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1243,
                        "src": "7546:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1264,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1245,
                        "src": "7555:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 1265,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1247,
                        "src": "7563:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 1266,
                        "name": "operatorData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1249,
                        "src": "7569:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1262,
                      "name": "_burn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1613,
                      "src": "7540:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,uint256,bytes memory,bytes memory)"
                      }
                    },
                    "id": 1267,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7540:42:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1268,
                  "nodeType": "ExpressionStatement",
                  "src": "7540:42:4"
                }
              ]
            },
            "documentation": {
              "id": 1241,
              "nodeType": "StructuredDocumentation",
              "src": "7149:110:4",
              "text": " @dev See {IERC777-operatorBurn}.\n Emits {Burned} and {IERC20-Transfer} events."
            },
            "functionSelector": "fc673c4f",
            "id": 1270,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "operatorBurn",
            "nameLocation": "7273:12:4",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1251,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "7418:8:4"
            },
            "parameters": {
              "id": 1250,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1243,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "7303:7:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1270,
                  "src": "7295:15:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1242,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7295:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1245,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "7328:6:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1270,
                  "src": "7320:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1244,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7320:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1247,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "7357:4:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1270,
                  "src": "7344:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1246,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7344:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1249,
                  "mutability": "mutable",
                  "name": "operatorData",
                  "nameLocation": "7384:12:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1270,
                  "src": "7371:25:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1248,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "7371:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7285:117:4"
            },
            "returnParameters": {
              "id": 1252,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7427:0:4"
            },
            "scope": 1884,
            "src": "7264:325:4",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              745
            ],
            "body": {
              "id": 1287,
              "nodeType": "Block",
              "src": "7927:52:4",
              "statements": [
                {
                  "expression": {
                    "baseExpression": {
                      "baseExpression": {
                        "id": 1281,
                        "name": "_allowances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 863,
                        "src": "7944:11:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                          "typeString": "mapping(address => mapping(address => uint256))"
                        }
                      },
                      "id": 1283,
                      "indexExpression": {
                        "id": 1282,
                        "name": "holder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1273,
                        "src": "7956:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "7944:19:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 1285,
                    "indexExpression": {
                      "id": 1284,
                      "name": "spender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1275,
                      "src": "7964:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7944:28:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1280,
                  "id": 1286,
                  "nodeType": "Return",
                  "src": "7937:35:4"
                }
              ]
            },
            "documentation": {
              "id": 1271,
              "nodeType": "StructuredDocumentation",
              "src": "7595:228:4",
              "text": " @dev See {IERC20-allowance}.\n Note that operator and allowance concepts are orthogonal: operators may\n not have allowance, and accounts with allowance may not be operators\n themselves."
            },
            "functionSelector": "dd62ed3e",
            "id": 1288,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "allowance",
            "nameLocation": "7837:9:4",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1277,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "7900:8:4"
            },
            "parameters": {
              "id": 1276,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1273,
                  "mutability": "mutable",
                  "name": "holder",
                  "nameLocation": "7855:6:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1288,
                  "src": "7847:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1272,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7847:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1275,
                  "mutability": "mutable",
                  "name": "spender",
                  "nameLocation": "7871:7:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1288,
                  "src": "7863:15:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1274,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "7863:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7846:33:4"
            },
            "returnParameters": {
              "id": 1280,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1279,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1288,
                  "src": "7918:7:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1278,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "7918:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "7917:9:4"
            },
            "scope": 1884,
            "src": "7828:151:4",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              755
            ],
            "body": {
              "id": 1312,
              "nodeType": "Block",
              "src": "8374:109:4",
              "statements": [
                {
                  "assignments": [
                    1300
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1300,
                      "mutability": "mutable",
                      "name": "holder",
                      "nameLocation": "8392:6:4",
                      "nodeType": "VariableDeclaration",
                      "scope": 1312,
                      "src": "8384:14:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1299,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "8384:7:4",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1303,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 1301,
                      "name": "_msgSender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2394,
                      "src": "8401:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 1302,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8401:12:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "8384:29:4"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1305,
                        "name": "holder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1300,
                        "src": "8432:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1306,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1291,
                        "src": "8440:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1307,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1293,
                        "src": "8449:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1304,
                      "name": "_approve",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1724,
                      "src": "8423:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 1308,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "8423:32:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1309,
                  "nodeType": "ExpressionStatement",
                  "src": "8423:32:4"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 1310,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "8472:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 1298,
                  "id": 1311,
                  "nodeType": "Return",
                  "src": "8465:11:4"
                }
              ]
            },
            "documentation": {
              "id": 1289,
              "nodeType": "StructuredDocumentation",
              "src": "7985:296:4",
              "text": " @dev See {IERC20-approve}.\n NOTE: If `value` is the maximum `uint256`, the allowance is not updated on\n `transferFrom`. This is semantically equivalent to an infinite approval.\n Note that accounts cannot have allowance issued by their operators."
            },
            "functionSelector": "095ea7b3",
            "id": 1313,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "approve",
            "nameLocation": "8295:7:4",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1295,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "8350:8:4"
            },
            "parameters": {
              "id": 1294,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1291,
                  "mutability": "mutable",
                  "name": "spender",
                  "nameLocation": "8311:7:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1313,
                  "src": "8303:15:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1290,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8303:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1293,
                  "mutability": "mutable",
                  "name": "value",
                  "nameLocation": "8328:5:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1313,
                  "src": "8320:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1292,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "8320:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8302:32:4"
            },
            "returnParameters": {
              "id": 1298,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1297,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1313,
                  "src": "8368:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1296,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "8368:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8367:6:4"
            },
            "scope": 1884,
            "src": "8286:197:4",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "baseFunctions": [
              767
            ],
            "body": {
              "id": 1348,
              "nodeType": "Block",
              "src": "9107:175:4",
              "statements": [
                {
                  "assignments": [
                    1327
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1327,
                      "mutability": "mutable",
                      "name": "spender",
                      "nameLocation": "9125:7:4",
                      "nodeType": "VariableDeclaration",
                      "scope": 1348,
                      "src": "9117:15:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1326,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "9117:7:4",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1330,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 1328,
                      "name": "_msgSender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2394,
                      "src": "9135:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 1329,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9135:12:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9117:30:4"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1332,
                        "name": "holder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1316,
                        "src": "9173:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1333,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1327,
                        "src": "9181:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1334,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1320,
                        "src": "9190:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1331,
                      "name": "_spendAllowance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1870,
                      "src": "9157:15:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 1335,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9157:40:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1336,
                  "nodeType": "ExpressionStatement",
                  "src": "9157:40:4"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1338,
                        "name": "holder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1316,
                        "src": "9213:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1339,
                        "name": "recipient",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1318,
                        "src": "9221:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1340,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1320,
                        "src": "9232:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "hexValue": "",
                        "id": 1341,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9240:2:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        "value": ""
                      },
                      {
                        "hexValue": "",
                        "id": 1342,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9244:2:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        "value": ""
                      },
                      {
                        "hexValue": "66616c7365",
                        "id": 1343,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9248:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "false"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        {
                          "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                          "typeString": "literal_string \"\""
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1337,
                      "name": "_send",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1520,
                      "src": "9207:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bool_$returns$__$",
                        "typeString": "function (address,address,uint256,bytes memory,bytes memory,bool)"
                      }
                    },
                    "id": 1344,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9207:47:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1345,
                  "nodeType": "ExpressionStatement",
                  "src": "9207:47:4"
                },
                {
                  "expression": {
                    "hexValue": "74727565",
                    "id": 1346,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": true,
                    "kind": "bool",
                    "lValueRequested": false,
                    "nodeType": "Literal",
                    "src": "9271:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    },
                    "value": "true"
                  },
                  "functionReturnParameters": 1325,
                  "id": 1347,
                  "nodeType": "Return",
                  "src": "9264:11:4"
                }
              ]
            },
            "documentation": {
              "id": 1314,
              "nodeType": "StructuredDocumentation",
              "src": "8489:471:4",
              "text": " @dev See {IERC20-transferFrom}.\n NOTE: Does not update the allowance if the current allowance\n is the maximum `uint256`.\n Note that operator and allowance concepts are orthogonal: operators cannot\n call `transferFrom` (unless they have allowance), and accounts with\n allowance cannot call `operatorSend` (unless they are operators).\n Emits {Sent}, {IERC20-Transfer} and {IERC20-Approval} events."
            },
            "functionSelector": "23b872dd",
            "id": 1349,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "transferFrom",
            "nameLocation": "8974:12:4",
            "nodeType": "FunctionDefinition",
            "overrides": {
              "id": 1322,
              "nodeType": "OverrideSpecifier",
              "overrides": [],
              "src": "9083:8:4"
            },
            "parameters": {
              "id": 1321,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1316,
                  "mutability": "mutable",
                  "name": "holder",
                  "nameLocation": "9004:6:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1349,
                  "src": "8996:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1315,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "8996:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1318,
                  "mutability": "mutable",
                  "name": "recipient",
                  "nameLocation": "9028:9:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1349,
                  "src": "9020:17:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1317,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9020:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1320,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "9055:6:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1349,
                  "src": "9047:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1319,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9047:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "8986:81:4"
            },
            "returnParameters": {
              "id": 1325,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1324,
                  "mutability": "mutable",
                  "name": "",
                  "nameLocation": "-1:-1:-1",
                  "nodeType": "VariableDeclaration",
                  "scope": 1349,
                  "src": "9101:4:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1323,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "9101:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9100:6:4"
            },
            "scope": 1884,
            "src": "8965:317:4",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1369,
              "nodeType": "Block",
              "src": "10005:69:4",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1362,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1352,
                        "src": "10021:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1363,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1354,
                        "src": "10030:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 1364,
                        "name": "userData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1356,
                        "src": "10038:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 1365,
                        "name": "operatorData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1358,
                        "src": "10048:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "hexValue": "74727565",
                        "id": 1366,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "bool",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10062:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        "value": "true"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1361,
                      "name": "_mint",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        1370,
                        1450
                      ],
                      "referencedDeclaration": 1450,
                      "src": "10015:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bool_$returns$__$",
                        "typeString": "function (address,uint256,bytes memory,bytes memory,bool)"
                      }
                    },
                    "id": 1367,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10015:52:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1368,
                  "nodeType": "ExpressionStatement",
                  "src": "10015:52:4"
                }
              ]
            },
            "documentation": {
              "id": 1350,
              "nodeType": "StructuredDocumentation",
              "src": "9288:559:4",
              "text": " @dev Creates `amount` tokens and assigns them to `account`, increasing\n the total supply.\n If a send hook is registered for `account`, the corresponding function\n will be called with `operator`, `data` and `operatorData`.\n See {IERC777Sender} and {IERC777Recipient}.\n Emits {Minted} and {IERC20-Transfer} events.\n Requirements\n - `account` cannot be the zero address.\n - if `account` is a contract, it must implement the {IERC777Recipient}\n interface."
            },
            "id": 1370,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_mint",
            "nameLocation": "9861:5:4",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1359,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1352,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "9884:7:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1370,
                  "src": "9876:15:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1351,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "9876:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1354,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "9909:6:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1370,
                  "src": "9901:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1353,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "9901:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1356,
                  "mutability": "mutable",
                  "name": "userData",
                  "nameLocation": "9938:8:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1370,
                  "src": "9925:21:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1355,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "9925:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1358,
                  "mutability": "mutable",
                  "name": "operatorData",
                  "nameLocation": "9969:12:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1370,
                  "src": "9956:25:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1357,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "9956:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "9866:121:4"
            },
            "returnParameters": {
              "id": 1360,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10005:0:4"
            },
            "scope": 1884,
            "src": "9852:222:4",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1449,
              "nodeType": "Block",
              "src": "10883:539:4",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1390,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 1385,
                          "name": "account",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1373,
                          "src": "10901:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 1388,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "10920:1:4",
                              "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": 1387,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "10912:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 1386,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "10912:7:4",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1389,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "10912:10:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "10901:21:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433737373a206d696e7420746f20746865207a65726f2061646472657373",
                        "id": 1391,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "10924:34:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8ce4f759423d0a519cbdf8529f47ad13e03ab9baec6702bc39e1fd5147c7e080",
                          "typeString": "literal_string \"ERC777: mint to the zero address\""
                        },
                        "value": "ERC777: mint to the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8ce4f759423d0a519cbdf8529f47ad13e03ab9baec6702bc39e1fd5147c7e080",
                          "typeString": "literal_string \"ERC777: mint to the zero address\""
                        }
                      ],
                      "id": 1384,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "10893:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1392,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10893:66:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1393,
                  "nodeType": "ExpressionStatement",
                  "src": "10893:66:4"
                },
                {
                  "assignments": [
                    1395
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1395,
                      "mutability": "mutable",
                      "name": "operator",
                      "nameLocation": "10978:8:4",
                      "nodeType": "VariableDeclaration",
                      "scope": 1449,
                      "src": "10970:16:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1394,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "10970:7:4",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1398,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 1396,
                      "name": "_msgSender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2394,
                      "src": "10989:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 1397,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "10989:12:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "10970:31:4"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1400,
                        "name": "operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1395,
                        "src": "11033:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 1403,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11051:1:4",
                            "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": 1402,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "11043:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 1401,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "11043:7:4",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1404,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11043:10:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1405,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1373,
                        "src": "11055:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1406,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1375,
                        "src": "11064:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1399,
                      "name": "_beforeTokenTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1883,
                      "src": "11012:20:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256)"
                      }
                    },
                    "id": 1407,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11012:59:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1408,
                  "nodeType": "ExpressionStatement",
                  "src": "11012:59:4"
                },
                {
                  "expression": {
                    "id": 1411,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 1409,
                      "name": "_totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 824,
                      "src": "11116:12:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 1410,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1375,
                      "src": "11132:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11116:22:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1412,
                  "nodeType": "ExpressionStatement",
                  "src": "11116:22:4"
                },
                {
                  "expression": {
                    "id": 1417,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1413,
                        "name": "_balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 822,
                        "src": "11148:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1415,
                      "indexExpression": {
                        "id": 1414,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1373,
                        "src": "11158:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "11148:18:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 1416,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1375,
                      "src": "11170:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "11148:28:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1418,
                  "nodeType": "ExpressionStatement",
                  "src": "11148:28:4"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1420,
                        "name": "operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1395,
                        "src": "11207:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 1423,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11225:1:4",
                            "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": 1422,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "11217:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 1421,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "11217:7:4",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1424,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11217:10:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1425,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1373,
                        "src": "11229:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1426,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1375,
                        "src": "11238:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 1427,
                        "name": "userData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1377,
                        "src": "11246:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 1428,
                        "name": "operatorData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1379,
                        "src": "11256:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 1429,
                        "name": "requireReceptionAck",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1381,
                        "src": "11270:19:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1419,
                      "name": "_callTokensReceived",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1827,
                      "src": "11187:19:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bool_$returns$__$",
                        "typeString": "function (address,address,address,uint256,bytes memory,bytes memory,bool)"
                      }
                    },
                    "id": 1430,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11187:103:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1431,
                  "nodeType": "ExpressionStatement",
                  "src": "11187:103:4"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1433,
                        "name": "operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1395,
                        "src": "11313:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1434,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1373,
                        "src": "11323:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1435,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1375,
                        "src": "11332:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 1436,
                        "name": "userData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1377,
                        "src": "11340:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 1437,
                        "name": "operatorData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1379,
                        "src": "11350:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1432,
                      "name": "Minted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1900,
                      "src": "11306:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,uint256,bytes memory,bytes memory)"
                      }
                    },
                    "id": 1438,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11306:57:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1439,
                  "nodeType": "EmitStatement",
                  "src": "11301:62:4"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 1443,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "11395:1:4",
                            "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": 1442,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "11387:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 1441,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "11387:7:4",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1444,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "11387:10:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1445,
                        "name": "account",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1373,
                        "src": "11399:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1446,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1375,
                        "src": "11408:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1440,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 702,
                      "src": "11378:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 1447,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "11378:37:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1448,
                  "nodeType": "EmitStatement",
                  "src": "11373:42:4"
                }
              ]
            },
            "documentation": {
              "id": 1371,
              "nodeType": "StructuredDocumentation",
              "src": "10080:611:4",
              "text": " @dev Creates `amount` tokens and assigns them to `account`, increasing\n the total supply.\n If `requireReceptionAck` is set to true, and if a send hook is\n registered for `account`, the corresponding function will be called with\n `operator`, `data` and `operatorData`.\n See {IERC777Sender} and {IERC777Recipient}.\n Emits {Minted} and {IERC20-Transfer} events.\n Requirements\n - `account` cannot be the zero address.\n - if `account` is a contract, it must implement the {IERC777Recipient}\n interface."
            },
            "id": 1450,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_mint",
            "nameLocation": "10705:5:4",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1382,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1373,
                  "mutability": "mutable",
                  "name": "account",
                  "nameLocation": "10728:7:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1450,
                  "src": "10720:15:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1372,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "10720:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1375,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "10753:6:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1450,
                  "src": "10745:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1374,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "10745:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1377,
                  "mutability": "mutable",
                  "name": "userData",
                  "nameLocation": "10782:8:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1450,
                  "src": "10769:21:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1376,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "10769:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1379,
                  "mutability": "mutable",
                  "name": "operatorData",
                  "nameLocation": "10813:12:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1450,
                  "src": "10800:25:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1378,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "10800:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1381,
                  "mutability": "mutable",
                  "name": "requireReceptionAck",
                  "nameLocation": "10840:19:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1450,
                  "src": "10835:24:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1380,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "10835:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "10710:155:4"
            },
            "returnParameters": {
              "id": 1383,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "10883:0:4"
            },
            "scope": 1884,
            "src": "10696:726:4",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1519,
              "nodeType": "Block",
              "src": "12102:454:4",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1472,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 1467,
                          "name": "from",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1453,
                          "src": "12120:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 1470,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "12136:1:4",
                              "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": 1469,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "12128:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 1468,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "12128:7:4",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1471,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12128:10:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "12120:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433737373a207472616e736665722066726f6d20746865207a65726f2061646472657373",
                        "id": 1473,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12140:40:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_e354b0408f2a1e89707ec9f6aaa5427ceb97704ace0785924c7421e8f577dc7a",
                          "typeString": "literal_string \"ERC777: transfer from the zero address\""
                        },
                        "value": "ERC777: transfer from the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_e354b0408f2a1e89707ec9f6aaa5427ceb97704ace0785924c7421e8f577dc7a",
                          "typeString": "literal_string \"ERC777: transfer from the zero address\""
                        }
                      ],
                      "id": 1466,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12112:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1474,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12112:69:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1475,
                  "nodeType": "ExpressionStatement",
                  "src": "12112:69:4"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1482,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 1477,
                          "name": "to",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1455,
                          "src": "12199:2:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 1480,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "12213:1:4",
                              "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": 1479,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "12205:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 1478,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "12205:7:4",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1481,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "12205:10:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "12199:16:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433737373a207472616e7366657220746f20746865207a65726f2061646472657373",
                        "id": 1483,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12217:38:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ad1e0a820fe2a50167f341463ad5f6754fad4cf77d809141bc408c516e69c59a",
                          "typeString": "literal_string \"ERC777: transfer to the zero address\""
                        },
                        "value": "ERC777: transfer to the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ad1e0a820fe2a50167f341463ad5f6754fad4cf77d809141bc408c516e69c59a",
                          "typeString": "literal_string \"ERC777: transfer to the zero address\""
                        }
                      ],
                      "id": 1476,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12191:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1484,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12191:65:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1485,
                  "nodeType": "ExpressionStatement",
                  "src": "12191:65:4"
                },
                {
                  "assignments": [
                    1487
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1487,
                      "mutability": "mutable",
                      "name": "operator",
                      "nameLocation": "12275:8:4",
                      "nodeType": "VariableDeclaration",
                      "scope": 1519,
                      "src": "12267:16:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1486,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "12267:7:4",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1490,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 1488,
                      "name": "_msgSender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2394,
                      "src": "12286:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 1489,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12286:12:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12267:31:4"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1492,
                        "name": "operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1487,
                        "src": "12327:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1493,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1453,
                        "src": "12337:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1494,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1455,
                        "src": "12343:2:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1495,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1457,
                        "src": "12347:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 1496,
                        "name": "userData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1459,
                        "src": "12355:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 1497,
                        "name": "operatorData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1461,
                        "src": "12365:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1491,
                      "name": "_callTokensToSend",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1769,
                      "src": "12309:17:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,address,uint256,bytes memory,bytes memory)"
                      }
                    },
                    "id": 1498,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12309:69:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1499,
                  "nodeType": "ExpressionStatement",
                  "src": "12309:69:4"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1501,
                        "name": "operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1487,
                        "src": "12395:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1502,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1453,
                        "src": "12405:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1503,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1455,
                        "src": "12411:2:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1504,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1457,
                        "src": "12415:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 1505,
                        "name": "userData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1459,
                        "src": "12423:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 1506,
                        "name": "operatorData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1461,
                        "src": "12433:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1500,
                      "name": "_move",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1679,
                      "src": "12389:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,address,uint256,bytes memory,bytes memory)"
                      }
                    },
                    "id": 1507,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12389:57:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1508,
                  "nodeType": "ExpressionStatement",
                  "src": "12389:57:4"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1510,
                        "name": "operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1487,
                        "src": "12477:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1511,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1453,
                        "src": "12487:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1512,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1455,
                        "src": "12493:2:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1513,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1457,
                        "src": "12497:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 1514,
                        "name": "userData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1459,
                        "src": "12505:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 1515,
                        "name": "operatorData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1461,
                        "src": "12515:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 1516,
                        "name": "requireReceptionAck",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1463,
                        "src": "12529:19:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      ],
                      "id": 1509,
                      "name": "_callTokensReceived",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1827,
                      "src": "12457:19:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$_t_bool_$returns$__$",
                        "typeString": "function (address,address,address,uint256,bytes memory,bytes memory,bool)"
                      }
                    },
                    "id": 1517,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12457:92:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1518,
                  "nodeType": "ExpressionStatement",
                  "src": "12457:92:4"
                }
              ]
            },
            "documentation": {
              "id": 1451,
              "nodeType": "StructuredDocumentation",
              "src": "11428:465:4",
              "text": " @dev Send tokens\n @param from address token holder address\n @param to address recipient address\n @param amount uint256 amount of tokens to transfer\n @param userData bytes extra information provided by the token holder (if any)\n @param operatorData bytes extra information provided by the operator (if any)\n @param requireReceptionAck if true, contract recipients are required to implement ERC777TokensRecipient"
            },
            "id": 1520,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_send",
            "nameLocation": "11907:5:4",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1464,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1453,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "11930:4:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1520,
                  "src": "11922:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1452,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11922:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1455,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "11952:2:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1520,
                  "src": "11944:10:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1454,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11944:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1457,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "11972:6:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1520,
                  "src": "11964:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1456,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "11964:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1459,
                  "mutability": "mutable",
                  "name": "userData",
                  "nameLocation": "12001:8:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1520,
                  "src": "11988:21:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1458,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "11988:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1461,
                  "mutability": "mutable",
                  "name": "operatorData",
                  "nameLocation": "12032:12:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1520,
                  "src": "12019:25:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1460,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "12019:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1463,
                  "mutability": "mutable",
                  "name": "requireReceptionAck",
                  "nameLocation": "12059:19:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1520,
                  "src": "12054:24:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1462,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "12054:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "11912:172:4"
            },
            "returnParameters": {
              "id": 1465,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12102:0:4"
            },
            "scope": 1884,
            "src": "11898:658:4",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1612,
              "nodeType": "Block",
              "src": "13007:665:4",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1538,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 1533,
                          "name": "from",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1523,
                          "src": "13025:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 1536,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "13041:1:4",
                              "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": 1535,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "13033:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 1534,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "13033:7:4",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1537,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13033:10:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "13025:18:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433737373a206275726e2066726f6d20746865207a65726f2061646472657373",
                        "id": 1539,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13045:36:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_37e8d125f24ef45023ef8033e82467f588cec434263b3a6b98bcdb3eca4b768c",
                          "typeString": "literal_string \"ERC777: burn from the zero address\""
                        },
                        "value": "ERC777: burn from the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_37e8d125f24ef45023ef8033e82467f588cec434263b3a6b98bcdb3eca4b768c",
                          "typeString": "literal_string \"ERC777: burn from the zero address\""
                        }
                      ],
                      "id": 1532,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "13017:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1540,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13017:65:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1541,
                  "nodeType": "ExpressionStatement",
                  "src": "13017:65:4"
                },
                {
                  "assignments": [
                    1543
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1543,
                      "mutability": "mutable",
                      "name": "operator",
                      "nameLocation": "13101:8:4",
                      "nodeType": "VariableDeclaration",
                      "scope": 1612,
                      "src": "13093:16:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1542,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "13093:7:4",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1546,
                  "initialValue": {
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 1544,
                      "name": "_msgSender",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2394,
                      "src": "13112:10:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$__$returns$_t_address_$",
                        "typeString": "function () view returns (address)"
                      }
                    },
                    "id": 1545,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13112:12:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13093:31:4"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1548,
                        "name": "operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1543,
                        "src": "13153:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1549,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1523,
                        "src": "13163:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 1552,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13177:1:4",
                            "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": 1551,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13169:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 1550,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "13169:7:4",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1553,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13169:10:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1554,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1525,
                        "src": "13181:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 1555,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1527,
                        "src": "13189:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 1556,
                        "name": "operatorData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1529,
                        "src": "13195:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1547,
                      "name": "_callTokensToSend",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1769,
                      "src": "13135:17:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,address,uint256,bytes memory,bytes memory)"
                      }
                    },
                    "id": 1557,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13135:73:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1558,
                  "nodeType": "ExpressionStatement",
                  "src": "13135:73:4"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1560,
                        "name": "operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1543,
                        "src": "13240:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1561,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1523,
                        "src": "13250:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 1564,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13264:1:4",
                            "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": 1563,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13256:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 1562,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "13256:7:4",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1565,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13256:10:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1566,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1525,
                        "src": "13268:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1559,
                      "name": "_beforeTokenTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1883,
                      "src": "13219:20:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256)"
                      }
                    },
                    "id": 1567,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13219:56:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1568,
                  "nodeType": "ExpressionStatement",
                  "src": "13219:56:4"
                },
                {
                  "assignments": [
                    1570
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1570,
                      "mutability": "mutable",
                      "name": "fromBalance",
                      "nameLocation": "13328:11:4",
                      "nodeType": "VariableDeclaration",
                      "scope": 1612,
                      "src": "13320:19:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1569,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13320:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1574,
                  "initialValue": {
                    "baseExpression": {
                      "id": 1571,
                      "name": "_balances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 822,
                      "src": "13342:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 1573,
                    "indexExpression": {
                      "id": 1572,
                      "name": "from",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1523,
                      "src": "13352:4:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "13342:15:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13320:37:4"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1578,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 1576,
                          "name": "fromBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1570,
                          "src": "13375:11:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "id": 1577,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1525,
                          "src": "13390:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13375:21:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433737373a206275726e20616d6f756e7420657863656564732062616c616e6365",
                        "id": 1579,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "13398:37:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_ecdeb627d2306b8b9bb34685df56bbf05cde6b7bc6e45e0248ca50c1b0bd3ebe",
                          "typeString": "literal_string \"ERC777: burn amount exceeds balance\""
                        },
                        "value": "ERC777: burn amount exceeds balance"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_ecdeb627d2306b8b9bb34685df56bbf05cde6b7bc6e45e0248ca50c1b0bd3ebe",
                          "typeString": "literal_string \"ERC777: burn amount exceeds balance\""
                        }
                      ],
                      "id": 1575,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "13367:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1580,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13367:69:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1581,
                  "nodeType": "ExpressionStatement",
                  "src": "13367:69:4"
                },
                {
                  "id": 1590,
                  "nodeType": "UncheckedBlock",
                  "src": "13446:73:4",
                  "statements": [
                    {
                      "expression": {
                        "id": 1588,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "baseExpression": {
                            "id": 1582,
                            "name": "_balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 822,
                            "src": "13470:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 1584,
                          "indexExpression": {
                            "id": 1583,
                            "name": "from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1523,
                            "src": "13480:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "13470:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1587,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1585,
                            "name": "fromBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1570,
                            "src": "13488:11:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 1586,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1525,
                            "src": "13502:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "13488:20:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13470:38:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1589,
                      "nodeType": "ExpressionStatement",
                      "src": "13470:38:4"
                    }
                  ]
                },
                {
                  "expression": {
                    "id": 1593,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "id": 1591,
                      "name": "_totalSupply",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 824,
                      "src": "13528:12:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "-=",
                    "rightHandSide": {
                      "id": 1592,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1525,
                      "src": "13544:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "13528:22:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1594,
                  "nodeType": "ExpressionStatement",
                  "src": "13528:22:4"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1596,
                        "name": "operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1543,
                        "src": "13573:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1597,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1523,
                        "src": "13583:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1598,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1525,
                        "src": "13589:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 1599,
                        "name": "data",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1527,
                        "src": "13597:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 1600,
                        "name": "operatorData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1529,
                        "src": "13603:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1595,
                      "name": "Burned",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1913,
                      "src": "13566:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,uint256,bytes memory,bytes memory)"
                      }
                    },
                    "id": 1601,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13566:50:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1602,
                  "nodeType": "EmitStatement",
                  "src": "13561:55:4"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1604,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1523,
                        "src": "13640:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "arguments": [
                          {
                            "hexValue": "30",
                            "id": 1607,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "13654:1:4",
                            "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": 1606,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "nodeType": "ElementaryTypeNameExpression",
                          "src": "13646:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_type$_t_address_$",
                            "typeString": "type(address)"
                          },
                          "typeName": {
                            "id": 1605,
                            "name": "address",
                            "nodeType": "ElementaryTypeName",
                            "src": "13646:7:4",
                            "typeDescriptions": {}
                          }
                        },
                        "id": 1608,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "typeConversion",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "13646:10:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1609,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1525,
                        "src": "13658:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1603,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 702,
                      "src": "13631:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 1610,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13631:34:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1611,
                  "nodeType": "EmitStatement",
                  "src": "13626:39:4"
                }
              ]
            },
            "documentation": {
              "id": 1521,
              "nodeType": "StructuredDocumentation",
              "src": "12562:294:4",
              "text": " @dev Burn tokens\n @param from address token holder address\n @param amount uint256 amount of tokens to burn\n @param data bytes extra information provided by the token holder\n @param operatorData bytes extra information provided by the operator (if any)"
            },
            "id": 1613,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_burn",
            "nameLocation": "12870:5:4",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1530,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1523,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "12893:4:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1613,
                  "src": "12885:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1522,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12885:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1525,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "12915:6:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1613,
                  "src": "12907:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1524,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12907:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1527,
                  "mutability": "mutable",
                  "name": "data",
                  "nameLocation": "12944:4:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1613,
                  "src": "12931:17:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1526,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "12931:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1529,
                  "mutability": "mutable",
                  "name": "operatorData",
                  "nameLocation": "12971:12:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1613,
                  "src": "12958:25:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1528,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "12958:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "12875:114:4"
            },
            "returnParameters": {
              "id": 1531,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13007:0:4"
            },
            "scope": 1884,
            "src": "12861:811:4",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1678,
              "nodeType": "Block",
              "src": "13865:424:4",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 1629,
                        "name": "operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1615,
                        "src": "13896:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1630,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1617,
                        "src": "13906:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1631,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1619,
                        "src": "13912:2:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1632,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1621,
                        "src": "13916:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1628,
                      "name": "_beforeTokenTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1883,
                      "src": "13875:20:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,address,uint256)"
                      }
                    },
                    "id": 1633,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13875:48:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1634,
                  "nodeType": "ExpressionStatement",
                  "src": "13875:48:4"
                },
                {
                  "assignments": [
                    1636
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1636,
                      "mutability": "mutable",
                      "name": "fromBalance",
                      "nameLocation": "13942:11:4",
                      "nodeType": "VariableDeclaration",
                      "scope": 1678,
                      "src": "13934:19:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1635,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "13934:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1640,
                  "initialValue": {
                    "baseExpression": {
                      "id": 1637,
                      "name": "_balances",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 822,
                      "src": "13956:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                        "typeString": "mapping(address => uint256)"
                      }
                    },
                    "id": 1639,
                    "indexExpression": {
                      "id": 1638,
                      "name": "from",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1617,
                      "src": "13966:4:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "13956:15:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13934:37:4"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1644,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 1642,
                          "name": "fromBalance",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1636,
                          "src": "13989:11:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "id": 1643,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1621,
                          "src": "14004:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "13989:21:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433737373a207472616e7366657220616d6f756e7420657863656564732062616c616e6365",
                        "id": 1645,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14012:41:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1f1c21f7056055b190ca6c77528b11af9437bed324def87929bb64fac4d57e6b",
                          "typeString": "literal_string \"ERC777: transfer amount exceeds balance\""
                        },
                        "value": "ERC777: transfer amount exceeds balance"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1f1c21f7056055b190ca6c77528b11af9437bed324def87929bb64fac4d57e6b",
                          "typeString": "literal_string \"ERC777: transfer amount exceeds balance\""
                        }
                      ],
                      "id": 1641,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "13981:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1646,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13981:73:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1647,
                  "nodeType": "ExpressionStatement",
                  "src": "13981:73:4"
                },
                {
                  "id": 1656,
                  "nodeType": "UncheckedBlock",
                  "src": "14064:73:4",
                  "statements": [
                    {
                      "expression": {
                        "id": 1654,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftHandSide": {
                          "baseExpression": {
                            "id": 1648,
                            "name": "_balances",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 822,
                            "src": "14088:9:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                              "typeString": "mapping(address => uint256)"
                            }
                          },
                          "id": 1650,
                          "indexExpression": {
                            "id": 1649,
                            "name": "from",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1617,
                            "src": "14098:4:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": true,
                          "nodeType": "IndexAccess",
                          "src": "14088:15:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "Assignment",
                        "operator": "=",
                        "rightHandSide": {
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1653,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "id": 1651,
                            "name": "fromBalance",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1636,
                            "src": "14106:11:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "-",
                          "rightExpression": {
                            "id": 1652,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1621,
                            "src": "14120:6:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "14106:20:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "14088:38:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1655,
                      "nodeType": "ExpressionStatement",
                      "src": "14088:38:4"
                    }
                  ]
                },
                {
                  "expression": {
                    "id": 1661,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "id": 1657,
                        "name": "_balances",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 822,
                        "src": "14146:9:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1659,
                      "indexExpression": {
                        "id": 1658,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1619,
                        "src": "14156:2:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14146:13:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "+=",
                    "rightHandSide": {
                      "id": 1660,
                      "name": "amount",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1621,
                      "src": "14163:6:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14146:23:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1662,
                  "nodeType": "ExpressionStatement",
                  "src": "14146:23:4"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1664,
                        "name": "operator",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1615,
                        "src": "14190:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1665,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1617,
                        "src": "14200:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1666,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1619,
                        "src": "14206:2:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1667,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1621,
                        "src": "14210:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "id": 1668,
                        "name": "userData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1623,
                        "src": "14218:8:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      },
                      {
                        "id": 1669,
                        "name": "operatorData",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1625,
                        "src": "14228:12:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        },
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1663,
                      "name": "Sent",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2046,
                      "src": "14185:4:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                        "typeString": "function (address,address,address,uint256,bytes memory,bytes memory)"
                      }
                    },
                    "id": 1670,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14185:56:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1671,
                  "nodeType": "EmitStatement",
                  "src": "14180:61:4"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1673,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1617,
                        "src": "14265:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1674,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1619,
                        "src": "14271:2:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1675,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1621,
                        "src": "14275:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1672,
                      "name": "Transfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 702,
                      "src": "14256:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 1676,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14256:26:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1677,
                  "nodeType": "EmitStatement",
                  "src": "14251:31:4"
                }
              ]
            },
            "id": 1679,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_move",
            "nameLocation": "13687:5:4",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1626,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1615,
                  "mutability": "mutable",
                  "name": "operator",
                  "nameLocation": "13710:8:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1679,
                  "src": "13702:16:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1614,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13702:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1617,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "13736:4:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1679,
                  "src": "13728:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1616,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13728:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1619,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "13758:2:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1679,
                  "src": "13750:10:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1618,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "13750:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1621,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "13778:6:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1679,
                  "src": "13770:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1620,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "13770:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1623,
                  "mutability": "mutable",
                  "name": "userData",
                  "nameLocation": "13807:8:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1679,
                  "src": "13794:21:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1622,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "13794:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1625,
                  "mutability": "mutable",
                  "name": "operatorData",
                  "nameLocation": "13838:12:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1679,
                  "src": "13825:25:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1624,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "13825:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "13692:164:4"
            },
            "returnParameters": {
              "id": 1627,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "13865:0:4"
            },
            "scope": 1884,
            "src": "13678:611:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1723,
              "nodeType": "Block",
              "src": "14540:260:4",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1695,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 1690,
                          "name": "holder",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1682,
                          "src": "14558:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 1693,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14576:1:4",
                              "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": 1692,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "14568:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 1691,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "14568:7:4",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1694,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14568:10:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "14558:20:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433737373a20617070726f76652066726f6d20746865207a65726f2061646472657373",
                        "id": 1696,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14580:39:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_0e27915827f7e9aa1f9e706fa48897705bd51fdbb8c4e17f0dcc074873455ca7",
                          "typeString": "literal_string \"ERC777: approve from the zero address\""
                        },
                        "value": "ERC777: approve from the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_0e27915827f7e9aa1f9e706fa48897705bd51fdbb8c4e17f0dcc074873455ca7",
                          "typeString": "literal_string \"ERC777: approve from the zero address\""
                        }
                      ],
                      "id": 1689,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "14550:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1697,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14550:70:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1698,
                  "nodeType": "ExpressionStatement",
                  "src": "14550:70:4"
                },
                {
                  "expression": {
                    "arguments": [
                      {
                        "commonType": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        "id": 1705,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "id": 1700,
                          "name": "spender",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1684,
                          "src": "14638:7:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "arguments": [
                            {
                              "hexValue": "30",
                              "id": 1703,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14657:1:4",
                              "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": 1702,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "14649:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_address_$",
                              "typeString": "type(address)"
                            },
                            "typeName": {
                              "id": 1701,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "14649:7:4",
                              "typeDescriptions": {}
                            }
                          },
                          "id": 1704,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "typeConversion",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14649:10:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "src": "14638:21:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "hexValue": "4552433737373a20617070726f766520746f20746865207a65726f2061646472657373",
                        "id": 1706,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14661:37:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_f96aab14690ac2986315360e71dcbe877ff7fb69d13c692db6f39f8c2c01f20d",
                          "typeString": "literal_string \"ERC777: approve to the zero address\""
                        },
                        "value": "ERC777: approve to the zero address"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_f96aab14690ac2986315360e71dcbe877ff7fb69d13c692db6f39f8c2c01f20d",
                          "typeString": "literal_string \"ERC777: approve to the zero address\""
                        }
                      ],
                      "id": 1699,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "14630:7:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1707,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14630:69:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1708,
                  "nodeType": "ExpressionStatement",
                  "src": "14630:69:4"
                },
                {
                  "expression": {
                    "id": 1715,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "baseExpression": {
                        "baseExpression": {
                          "id": 1709,
                          "name": "_allowances",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 863,
                          "src": "14710:11:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$",
                            "typeString": "mapping(address => mapping(address => uint256))"
                          }
                        },
                        "id": 1712,
                        "indexExpression": {
                          "id": 1710,
                          "name": "holder",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1682,
                          "src": "14722:6:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "14710:19:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_uint256_$",
                          "typeString": "mapping(address => uint256)"
                        }
                      },
                      "id": 1713,
                      "indexExpression": {
                        "id": 1711,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1684,
                        "src": "14730:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "14710:28:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "id": 1714,
                      "name": "value",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1686,
                      "src": "14741:5:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "14710:36:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1716,
                  "nodeType": "ExpressionStatement",
                  "src": "14710:36:4"
                },
                {
                  "eventCall": {
                    "arguments": [
                      {
                        "id": 1718,
                        "name": "holder",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1682,
                        "src": "14770:6:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1719,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1684,
                        "src": "14778:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1720,
                        "name": "value",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1686,
                        "src": "14787:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1717,
                      "name": "Approval",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 711,
                      "src": "14761:8:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,address,uint256)"
                      }
                    },
                    "id": 1721,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14761:32:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1722,
                  "nodeType": "EmitStatement",
                  "src": "14756:37:4"
                }
              ]
            },
            "documentation": {
              "id": 1680,
              "nodeType": "StructuredDocumentation",
              "src": "14295:127:4",
              "text": " @dev See {ERC20-_approve}.\n Note that accounts cannot have allowance issued by their operators."
            },
            "id": 1724,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_approve",
            "nameLocation": "14436:8:4",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1687,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1682,
                  "mutability": "mutable",
                  "name": "holder",
                  "nameLocation": "14462:6:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1724,
                  "src": "14454:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1681,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14454:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1684,
                  "mutability": "mutable",
                  "name": "spender",
                  "nameLocation": "14486:7:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1724,
                  "src": "14478:15:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1683,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "14478:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1686,
                  "mutability": "mutable",
                  "name": "value",
                  "nameLocation": "14511:5:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1724,
                  "src": "14503:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1685,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "14503:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "14444:78:4"
            },
            "returnParameters": {
              "id": 1688,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "14540:0:4"
            },
            "scope": 1884,
            "src": "14427:373:4",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1768,
              "nodeType": "Block",
              "src": "15472:273:4",
              "statements": [
                {
                  "assignments": [
                    1741
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1741,
                      "mutability": "mutable",
                      "name": "implementer",
                      "nameLocation": "15490:11:4",
                      "nodeType": "VariableDeclaration",
                      "scope": 1768,
                      "src": "15482:19:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1740,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "15482:7:4",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1747,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1744,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1729,
                        "src": "15546:4:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1745,
                        "name": "_TOKENS_SENDER_INTERFACE_HASH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 833,
                        "src": "15552:29:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 1742,
                        "name": "_ERC1820_REGISTRY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 818,
                        "src": "15504:17:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC1820Registry_$2494",
                          "typeString": "contract IERC1820Registry"
                        }
                      },
                      "id": 1743,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getInterfaceImplementer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2457,
                      "src": "15504:41:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (address,bytes32) view external returns (address)"
                      }
                    },
                    "id": 1746,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15504:78:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "15482:100:4"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1753,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1748,
                      "name": "implementer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1741,
                      "src": "15596:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 1751,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "15619:1:4",
                          "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": 1750,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "15611:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 1749,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "15611:7:4",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 1752,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15611:10:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "15596:25:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1767,
                  "nodeType": "IfStatement",
                  "src": "15592:147:4",
                  "trueBody": {
                    "id": 1766,
                    "nodeType": "Block",
                    "src": "15623:116:4",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1758,
                              "name": "operator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1727,
                              "src": "15677:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1759,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1729,
                              "src": "15687:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1760,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1731,
                              "src": "15693:2:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1761,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1733,
                              "src": "15697:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 1762,
                              "name": "userData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1735,
                              "src": "15705:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 1763,
                              "name": "operatorData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1737,
                              "src": "15715:12:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 1755,
                                  "name": "implementer",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1741,
                                  "src": "15651:11:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 1754,
                                "name": "IERC777Sender",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2087,
                                "src": "15637:13:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC777Sender_$2087_$",
                                  "typeString": "type(contract IERC777Sender)"
                                }
                              },
                              "id": 1756,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15637:26:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC777Sender_$2087",
                                "typeString": "contract IERC777Sender"
                              }
                            },
                            "id": 1757,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "tokensToSend",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2086,
                            "src": "15637:39:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,address,uint256,bytes memory,bytes memory) external"
                            }
                          },
                          "id": 1764,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15637:91:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1765,
                        "nodeType": "ExpressionStatement",
                        "src": "15637:91:4"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 1725,
              "nodeType": "StructuredDocumentation",
              "src": "14806:462:4",
              "text": " @dev Call from.tokensToSend() if the interface is registered\n @param operator address operator requesting the transfer\n @param from address token holder address\n @param to address recipient address\n @param amount uint256 amount of tokens to transfer\n @param userData bytes extra information provided by the token holder (if any)\n @param operatorData bytes extra information provided by the operator (if any)"
            },
            "id": 1769,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_callTokensToSend",
            "nameLocation": "15282:17:4",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1738,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1727,
                  "mutability": "mutable",
                  "name": "operator",
                  "nameLocation": "15317:8:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1769,
                  "src": "15309:16:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1726,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15309:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1729,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "15343:4:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1769,
                  "src": "15335:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1728,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15335:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1731,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "15365:2:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1769,
                  "src": "15357:10:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1730,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "15357:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1733,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "15385:6:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1769,
                  "src": "15377:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1732,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "15377:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1735,
                  "mutability": "mutable",
                  "name": "userData",
                  "nameLocation": "15414:8:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1769,
                  "src": "15401:21:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1734,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "15401:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1737,
                  "mutability": "mutable",
                  "name": "operatorData",
                  "nameLocation": "15445:12:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1769,
                  "src": "15432:25:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1736,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "15432:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "15299:164:4"
            },
            "returnParameters": {
              "id": 1739,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "15472:0:4"
            },
            "scope": 1884,
            "src": "15273:472:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1826,
              "nodeType": "Block",
              "src": "16669:441:4",
              "statements": [
                {
                  "assignments": [
                    1788
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1788,
                      "mutability": "mutable",
                      "name": "implementer",
                      "nameLocation": "16687:11:4",
                      "nodeType": "VariableDeclaration",
                      "scope": 1826,
                      "src": "16679:19:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      },
                      "typeName": {
                        "id": 1787,
                        "name": "address",
                        "nodeType": "ElementaryTypeName",
                        "src": "16679:7:4",
                        "stateMutability": "nonpayable",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1794,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1791,
                        "name": "to",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1776,
                        "src": "16743:2:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1792,
                        "name": "_TOKENS_RECIPIENT_INTERFACE_HASH",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 838,
                        "src": "16747:32:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      ],
                      "expression": {
                        "id": 1789,
                        "name": "_ERC1820_REGISTRY",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 818,
                        "src": "16701:17:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_contract$_IERC1820Registry_$2494",
                          "typeString": "contract IERC1820Registry"
                        }
                      },
                      "id": 1790,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "getInterfaceImplementer",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2457,
                      "src": "16701:41:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_external_view$_t_address_$_t_bytes32_$returns$_t_address_$",
                        "typeString": "function (address,bytes32) view external returns (address)"
                      }
                    },
                    "id": 1793,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "16701:79:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "16679:101:4"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1800,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1795,
                      "name": "implementer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1788,
                      "src": "16794:11:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "arguments": [
                        {
                          "hexValue": "30",
                          "id": 1798,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "16817:1:4",
                          "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": 1797,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "16809:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 1796,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "16809:7:4",
                          "typeDescriptions": {}
                        }
                      },
                      "id": 1799,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "16809:10:4",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "src": "16794:25:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": {
                    "condition": {
                      "id": 1814,
                      "name": "requireReceptionAck",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1784,
                      "src": "16952:19:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "id": 1824,
                    "nodeType": "IfStatement",
                    "src": "16948:156:4",
                    "trueBody": {
                      "id": 1823,
                      "nodeType": "Block",
                      "src": "16973:131:4",
                      "statements": [
                        {
                          "expression": {
                            "arguments": [
                              {
                                "id": 1819,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "nodeType": "UnaryOperation",
                                "operator": "!",
                                "prefix": true,
                                "src": "16995:16:4",
                                "subExpression": {
                                  "arguments": [],
                                  "expression": {
                                    "argumentTypes": [],
                                    "expression": {
                                      "id": 1816,
                                      "name": "to",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1776,
                                      "src": "16996:2:4",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address",
                                        "typeString": "address"
                                      }
                                    },
                                    "id": 1817,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "isContract",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2105,
                                    "src": "16996:13:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_view$_t_address_$returns$_t_bool_$bound_to$_t_address_$",
                                      "typeString": "function (address) view returns (bool)"
                                    }
                                  },
                                  "id": 1818,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "16996:15:4",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  }
                                },
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              {
                                "hexValue": "4552433737373a20746f6b656e20726563697069656e7420636f6e747261637420686173206e6f20696d706c656d656e74657220666f7220455243373737546f6b656e73526563697069656e74",
                                "id": 1820,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "string",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "17013:79:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_stringliteral_9ee9d43e266ccfb7408c78038627d2c5b376a4a82e9fcfbfea2a9c63dc07fa80",
                                  "typeString": "literal_string \"ERC777: token recipient contract has no implementer for ERC777TokensRecipient\""
                                },
                                "value": "ERC777: token recipient contract has no implementer for ERC777TokensRecipient"
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                },
                                {
                                  "typeIdentifier": "t_stringliteral_9ee9d43e266ccfb7408c78038627d2c5b376a4a82e9fcfbfea2a9c63dc07fa80",
                                  "typeString": "literal_string \"ERC777: token recipient contract has no implementer for ERC777TokensRecipient\""
                                }
                              ],
                              "id": 1815,
                              "name": "require",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [
                                -18,
                                -18
                              ],
                              "referencedDeclaration": -18,
                              "src": "16987:7:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                "typeString": "function (bool,string memory) pure"
                              }
                            },
                            "id": 1821,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "16987:106:4",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_tuple$__$",
                              "typeString": "tuple()"
                            }
                          },
                          "id": 1822,
                          "nodeType": "ExpressionStatement",
                          "src": "16987:106:4"
                        }
                      ]
                    }
                  },
                  "id": 1825,
                  "nodeType": "IfStatement",
                  "src": "16790:314:4",
                  "trueBody": {
                    "id": 1813,
                    "nodeType": "Block",
                    "src": "16821:121:4",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "id": 1805,
                              "name": "operator",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1772,
                              "src": "16880:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1806,
                              "name": "from",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1774,
                              "src": "16890:4:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1807,
                              "name": "to",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1776,
                              "src": "16896:2:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "id": 1808,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1778,
                              "src": "16900:6:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "id": 1809,
                              "name": "userData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1780,
                              "src": "16908:8:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            },
                            {
                              "id": 1810,
                              "name": "operatorData",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1782,
                              "src": "16918:12:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              },
                              {
                                "typeIdentifier": "t_bytes_memory_ptr",
                                "typeString": "bytes memory"
                              }
                            ],
                            "expression": {
                              "arguments": [
                                {
                                  "id": 1802,
                                  "name": "implementer",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1788,
                                  "src": "16852:11:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 1801,
                                "name": "IERC777Recipient",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 2067,
                                "src": "16835:16:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC777Recipient_$2067_$",
                                  "typeString": "type(contract IERC777Recipient)"
                                }
                              },
                              "id": 1803,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "16835:29:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC777Recipient_$2067",
                                "typeString": "contract IERC777Recipient"
                              }
                            },
                            "id": 1804,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "tokensReceived",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2066,
                            "src": "16835:44:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_external_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$_t_bytes_memory_ptr_$_t_bytes_memory_ptr_$returns$__$",
                              "typeString": "function (address,address,address,uint256,bytes memory,bytes memory) external"
                            }
                          },
                          "id": 1811,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "16835:96:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1812,
                        "nodeType": "ExpressionStatement",
                        "src": "16835:96:4"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 1770,
              "nodeType": "StructuredDocumentation",
              "src": "15751:678:4",
              "text": " @dev Call to.tokensReceived() if the interface is registered. Reverts if the recipient is a contract but\n tokensReceived() was not registered for the recipient\n @param operator address operator requesting the transfer\n @param from address token holder address\n @param to address recipient address\n @param amount uint256 amount of tokens to transfer\n @param userData bytes extra information provided by the token holder (if any)\n @param operatorData bytes extra information provided by the operator (if any)\n @param requireReceptionAck if true, contract recipients are required to implement ERC777TokensRecipient"
            },
            "id": 1827,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_callTokensReceived",
            "nameLocation": "16443:19:4",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1785,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1772,
                  "mutability": "mutable",
                  "name": "operator",
                  "nameLocation": "16480:8:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1827,
                  "src": "16472:16:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1771,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16472:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1774,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "16506:4:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1827,
                  "src": "16498:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1773,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16498:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1776,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "16528:2:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1827,
                  "src": "16520:10:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1775,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16520:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1778,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "16548:6:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1827,
                  "src": "16540:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1777,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16540:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1780,
                  "mutability": "mutable",
                  "name": "userData",
                  "nameLocation": "16577:8:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1827,
                  "src": "16564:21:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1779,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "16564:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1782,
                  "mutability": "mutable",
                  "name": "operatorData",
                  "nameLocation": "16608:12:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1827,
                  "src": "16595:25:4",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes_memory_ptr",
                    "typeString": "bytes"
                  },
                  "typeName": {
                    "id": 1781,
                    "name": "bytes",
                    "nodeType": "ElementaryTypeName",
                    "src": "16595:5:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes_storage_ptr",
                      "typeString": "bytes"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1784,
                  "mutability": "mutable",
                  "name": "requireReceptionAck",
                  "nameLocation": "16635:19:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1827,
                  "src": "16630:24:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1783,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "16630:4:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "16462:198:4"
            },
            "returnParameters": {
              "id": 1786,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "16669:0:4"
            },
            "scope": 1884,
            "src": "16434:676:4",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "private"
          },
          {
            "body": {
              "id": 1869,
              "nodeType": "Block",
              "src": "17511:322:4",
              "statements": [
                {
                  "assignments": [
                    1838
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1838,
                      "mutability": "mutable",
                      "name": "currentAllowance",
                      "nameLocation": "17529:16:4",
                      "nodeType": "VariableDeclaration",
                      "scope": 1869,
                      "src": "17521:24:4",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1837,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "17521:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "visibility": "internal"
                    }
                  ],
                  "id": 1843,
                  "initialValue": {
                    "arguments": [
                      {
                        "id": 1840,
                        "name": "owner",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1830,
                        "src": "17558:5:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 1841,
                        "name": "spender",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1832,
                        "src": "17565:7:4",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1839,
                      "name": "allowance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1288,
                      "src": "17548:9:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$",
                        "typeString": "function (address,address) view returns (uint256)"
                      }
                    },
                    "id": 1842,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17548:25:4",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17521:52:4"
                },
                {
                  "condition": {
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1850,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "id": 1844,
                      "name": "currentAllowance",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1838,
                      "src": "17587:16:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "expression": {
                        "arguments": [
                          {
                            "id": 1847,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "ElementaryTypeNameExpression",
                            "src": "17612:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            },
                            "typeName": {
                              "id": 1846,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "17612:7:4",
                              "typeDescriptions": {}
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_type$_t_uint256_$",
                              "typeString": "type(uint256)"
                            }
                          ],
                          "id": 1845,
                          "name": "type",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -27,
                          "src": "17607:4:4",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_metatype_pure$__$returns$__$",
                            "typeString": "function () pure"
                          }
                        },
                        "id": 1848,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "17607:13:4",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_meta_type_t_uint256",
                          "typeString": "type(uint256)"
                        }
                      },
                      "id": 1849,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "lValueRequested": false,
                      "memberName": "max",
                      "nodeType": "MemberAccess",
                      "src": "17607:17:4",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "17587:37:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1868,
                  "nodeType": "IfStatement",
                  "src": "17583:244:4",
                  "trueBody": {
                    "id": 1867,
                    "nodeType": "Block",
                    "src": "17626:201:4",
                    "statements": [
                      {
                        "expression": {
                          "arguments": [
                            {
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1854,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "id": 1852,
                                "name": "currentAllowance",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1838,
                                "src": "17648:16:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">=",
                              "rightExpression": {
                                "id": 1853,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1834,
                                "src": "17668:6:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "17648:26:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "hexValue": "4552433737373a20696e73756666696369656e7420616c6c6f77616e6365",
                              "id": 1855,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "17676:32:4",
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_43a72b1be6b1964d60860b54d1c331016464b9d17c1d10dbea6a002344132abb",
                                "typeString": "literal_string \"ERC777: insufficient allowance\""
                              },
                              "value": "ERC777: insufficient allowance"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_43a72b1be6b1964d60860b54d1c331016464b9d17c1d10dbea6a002344132abb",
                                "typeString": "literal_string \"ERC777: insufficient allowance\""
                              }
                            ],
                            "id": 1851,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "17640:7:4",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1856,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17640:69:4",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1857,
                        "nodeType": "ExpressionStatement",
                        "src": "17640:69:4"
                      },
                      {
                        "id": 1866,
                        "nodeType": "UncheckedBlock",
                        "src": "17723:94:4",
                        "statements": [
                          {
                            "expression": {
                              "arguments": [
                                {
                                  "id": 1859,
                                  "name": "owner",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1830,
                                  "src": "17760:5:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "id": 1860,
                                  "name": "spender",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1832,
                                  "src": "17767:7:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                },
                                {
                                  "commonType": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  },
                                  "id": 1863,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "leftExpression": {
                                    "id": 1861,
                                    "name": "currentAllowance",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1838,
                                    "src": "17776:16:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "nodeType": "BinaryOperation",
                                  "operator": "-",
                                  "rightExpression": {
                                    "id": 1862,
                                    "name": "amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1834,
                                    "src": "17795:6:4",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "src": "17776:25:4",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  },
                                  {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                ],
                                "id": 1858,
                                "name": "_approve",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1724,
                                "src": "17751:8:4",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$",
                                  "typeString": "function (address,address,uint256)"
                                }
                              },
                              "id": 1864,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "17751:51:4",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_tuple$__$",
                                "typeString": "tuple()"
                              }
                            },
                            "id": 1865,
                            "nodeType": "ExpressionStatement",
                            "src": "17751:51:4"
                          }
                        ]
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 1828,
              "nodeType": "StructuredDocumentation",
              "src": "17116:270:4",
              "text": " @dev Updates `owner` s allowance for `spender` based on spent `amount`.\n Does not update the allowance amount in case of infinite allowance.\n Revert if not enough allowance is available.\n Might emit an {Approval} event."
            },
            "id": 1870,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_spendAllowance",
            "nameLocation": "17400:15:4",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1835,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1830,
                  "mutability": "mutable",
                  "name": "owner",
                  "nameLocation": "17433:5:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1870,
                  "src": "17425:13:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1829,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17425:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1832,
                  "mutability": "mutable",
                  "name": "spender",
                  "nameLocation": "17456:7:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1870,
                  "src": "17448:15:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1831,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "17448:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1834,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "17481:6:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1870,
                  "src": "17473:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1833,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "17473:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "17415:78:4"
            },
            "returnParameters": {
              "id": 1836,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17511:0:4"
            },
            "scope": 1884,
            "src": "17391:442:4",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1882,
              "nodeType": "Block",
              "src": "18606:2:4",
              "statements": []
            },
            "documentation": {
              "id": 1871,
              "nodeType": "StructuredDocumentation",
              "src": "17839:617:4",
              "text": " @dev Hook that is called before any token transfer. This includes\n calls to {send}, {transfer}, {operatorSend}, minting and burning.\n Calling conditions:\n - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens\n will be to transferred to `to`.\n - when `from` is zero, `amount` tokens will be minted for `to`.\n - when `to` is zero, `amount` of ``from``'s tokens will be burned.\n - `from` and `to` are never both zero.\n To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]."
            },
            "id": 1883,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_beforeTokenTransfer",
            "nameLocation": "18470:20:4",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 1880,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1873,
                  "mutability": "mutable",
                  "name": "operator",
                  "nameLocation": "18508:8:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1883,
                  "src": "18500:16:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1872,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18500:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1875,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "18534:4:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1883,
                  "src": "18526:12:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1874,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18526:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1877,
                  "mutability": "mutable",
                  "name": "to",
                  "nameLocation": "18556:2:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1883,
                  "src": "18548:10:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1876,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "18548:7:4",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1879,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "18576:6:4",
                  "nodeType": "VariableDeclaration",
                  "scope": 1883,
                  "src": "18568:14:4",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1878,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "18568:7:4",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "18490:98:4"
            },
            "returnParameters": {
              "id": 1881,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "18606:0:4"
            },
            "scope": 1884,
            "src": "18461:147:4",
            "stateMutability": "nonpayable",
            "virtual": true,
            "visibility": "internal"
          }
        ],
        "scope": 1885,
        "src": "1088:17522:4",
        "usedErrors": []
      }
    ],
    "src": "107:18504:4"
  }
}