{
  "abi": [
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "name",
          "type": "string"
        },
        {
          "internalType": "string",
          "name": "symbol",
          "type": "string"
        },
        {
          "internalType": "contract Association",
          "name": "association",
          "type": "address"
        },
        {
          "internalType": "contract ERC20",
          "name": "tokenToPurchaseIn",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "price",
          "type": "uint64"
        },
        {
          "internalType": "string",
          "name": "tokenURI",
          "type": "string"
        }
      ],
      "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": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "association",
          "type": "address"
        }
      ],
      "name": "SetAssociation",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "uint64",
          "name": "price",
          "type": "uint64"
        }
      ],
      "name": "SetPrice",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "SetTokenToPurchaseIn",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "string",
          "name": "tokenURI",
          "type": "string"
        }
      ],
      "name": "SetTokenURI",
      "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": "owner",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        }
      ],
      "name": "allowance",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "name": "approve",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "association",
      "outputs": [
        {
          "internalType": "contract Association",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "balanceOf",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract Association",
          "name": "someAssociation",
          "type": "address"
        }
      ],
      "name": "belongsTo",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "amount",
          "type": "uint64"
        }
      ],
      "name": "burnFrom",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "decimals",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "subtractedValue",
          "type": "uint256"
        }
      ],
      "name": "decreaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "spender",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "addedValue",
          "type": "uint256"
        }
      ],
      "name": "increaseAllowance",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "mint",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "name",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "price",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract Association",
          "name": "_association",
          "type": "address"
        }
      ],
      "name": "setAssociation",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_price",
          "type": "uint64"
        }
      ],
      "name": "setPrice",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "contract ERC20",
          "name": "_tokenToPurchaseIn",
          "type": "address"
        }
      ],
      "name": "setTokenToPurchaseIn",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "string",
          "name": "_tokenURI",
          "type": "string"
        }
      ],
      "name": "setTokenURI",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "symbol",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokenToPurchaseIn",
      "outputs": [
        {
          "internalType": "contract ERC20",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "tokenURI",
      "outputs": [
        {
          "internalType": "string",
          "name": "",
          "type": "string"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "totalSupply",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transfer",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "from",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "to",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        }
      ],
      "name": "transferFrom",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": {
    "object": "0x60806040523480156200001157600080fd5b5060405162001d0838038062001d08833981016040819052620000349162000325565b8585858585856200004533620000ff565b600380546001600160a01b0319166001600160a01b03851617905560018054600160a01b600160e01b031916600160a01b6001600160401b0385160217905580516200009990600290602084019062000199565b50620000a5846200014f565b620000b033620000ff565b50508351620000c9925060079150602085019062000199565b508051620000df90600890602084019062000199565b505050620000f333620000ff60201b60201c565b50505050505062000436565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fd644dc7fcd33e8f50b196f5d8efabdaea1758e024467b0c26ca395105c4becfb90600090a250565b828054620001a790620003fa565b90600052602060002090601f016020900481019282620001cb576000855562000216565b82601f10620001e657805160ff191683800117855562000216565b8280016001018555821562000216579182015b8281111562000216578251825591602001919060010190620001f9565b506200022492915062000228565b5090565b5b8082111562000224576000815560010162000229565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200026757600080fd5b81516001600160401b03808211156200028457620002846200023f565b604051601f8301601f19908116603f01168101908282118183101715620002af57620002af6200023f565b81604052838152602092508683858801011115620002cc57600080fd5b600091505b83821015620002f05785820183015181830184015290820190620002d1565b83821115620003025760008385830101525b9695505050505050565b6001600160a01b03811681146200032257600080fd5b50565b60008060008060008060c087890312156200033f57600080fd5b86516001600160401b03808211156200035757600080fd5b620003658a838b0162000255565b975060208901519150808211156200037c57600080fd5b6200038a8a838b0162000255565b9650604089015191506200039e826200030c565b6060890151919550620003b1826200030c565b60808901519194508082168214620003c857600080fd5b60a089015191935080821115620003de57600080fd5b50620003ed89828a0162000255565b9150509295509295509295565b600181811c908216806200040f57607f821691505b6020821081036200043057634e487b7160e01b600052602260045260246000fd5b50919050565b6118c280620004466000396000f3fe608060405234801561001057600080fd5b50600436106101735760003560e01c8063715018a6116100de578063a457c2d711610097578063dd62ed3e11610071578063dd62ed3e14610341578063e0df5b6f14610354578063eda6032e14610367578063f2fde38b1461037a57600080fd5b8063a457c2d714610308578063a9059cbb1461031b578063c1eccbe01461032e57600080fd5b8063715018a61461028d57806374062f4d146102955780638662d3ae146102a85780638da5cb5b146102bb57806395d89b41146102cc578063a035b1fe146102d457600080fd5b806323b872dd1161013057806323b872dd14610214578063313ce5671461022757806339509351146102365780633c130d901461024957806340c10f191461025157806370a082311461026457600080fd5b8063050d4f781461017857806306fdde03146101a2578063079d0980146101b7578063095ea7b3146101ca57806318160ddd146101ed578063229c2048146101ff575b600080fd5b6001546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b6101aa61038d565b60405161019991906114fd565b600354610185906001600160a01b031681565b6101dd6101d8366004611567565b61041f565b6040519015158152602001610199565b6006545b604051908152602001610199565b61021261020d3660046115b0565b61046f565b005b6101dd6102223660046115d2565b6105a3565b60405160128152602001610199565b6101dd610244366004611567565b610697565b6101aa6106b9565b61021261025f366004611567565b610747565b6101f1610272366004611613565b6001600160a01b031660009081526004602052604090205490565b610212610831565b6102126102a3366004611613565b610867565b6101dd6102b6366004611613565b61089d565b6000546001600160a01b0316610185565b6101aa610926565b6001546102ef90600160a01b900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610199565b6101dd610316366004611567565b610935565b6101dd610329366004611567565b6109bb565b61021261033c366004611630565b610aae565b6101f161034f366004611665565b610b9e565b6102126103623660046116b4565b610bc9565b610212610375366004611613565b610cf3565b610212610388366004611613565b610e19565b60606007805461039c90611765565b80601f01602080910402602001604051908101604052809291908181526020018280546103c890611765565b80156104155780601f106103ea57610100808354040283529160200191610415565b820191906000526020600020905b8154815290600101906020018083116103f857829003601f168201915b5050505050905090565b60405162461bcd60e51b815260206004820152601e60248201527f4c6963656e73653a20617070726f7665206e6f7420737570706f72746564000060448201526000906064015b60405180910390fd5b6001546001600160a01b031661048457600080fd5b6000546001600160a01b031633148061051a57506001546001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610505919061179f565b6001600160a01b0316336001600160a01b0316145b8061052f57506001546001600160a01b031633145b61054b5760405162461bcd60e51b8152600401610466906117bc565b6001805467ffffffffffffffff60a01b1916600160a01b67ffffffffffffffff8416908102919091179091556040517ff88bffa611823165fbf8a5b30329c5759a3d2e8f25548ccf875a76d09905cf4a90600090a250565b6001546000906001600160a01b03166105bb57600080fd5b6000546001600160a01b031633148061065157506001546001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610618573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063c919061179f565b6001600160a01b0316336001600160a01b0316145b8061066657506001546001600160a01b031633145b6106825760405162461bcd60e51b8152600401610466906117bc565b61068d848484610eb1565b5060019392505050565b60003361068d8185856106aa8383610b9e565b6106b4919061182f565b611080565b600280546106c690611765565b80601f01602080910402602001604051908101604052809291908181526020018280546106f290611765565b801561073f5780601f106107145761010080835404028352916020019161073f565b820191906000526020600020905b81548152906001019060200180831161072257829003601f168201915b505050505081565b6001546001600160a01b031661075c57600080fd5b6000546001600160a01b03163314806107f257506001546001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107dd919061179f565b6001600160a01b0316336001600160a01b0316145b8061080757506001546001600160a01b031633145b6108235760405162461bcd60e51b8152600401610466906117bc565b61082d82826111a5565b5050565b6000546001600160a01b0316331461085b5760405162461bcd60e51b815260040161046690611847565b6108656000611284565b565b6000546001600160a01b031633146108915760405162461bcd60e51b815260040161046690611847565b61089a816112d4565b50565b6001546000906001600160a01b03838116911614801561092057506040516321887c3d60e01b81523060048201526001600160a01b038316906321887c3d90602401602060405180830381865afa1580156108fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610920919061187c565b92915050565b60606008805461039c90611765565b600033816109438286610b9e565b9050838110156109a35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610466565b6109b08286868403611080565b506001949350505050565b6001546000906001600160a01b03166109d357600080fd5b6000546001600160a01b0316331480610a6957506001546001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a54919061179f565b6001600160a01b0316336001600160a01b0316145b80610a7e57506001546001600160a01b031633145b610a9a5760405162461bcd60e51b8152600401610466906117bc565b610aa5338484610eb1565b50600192915050565b6001546001600160a01b0316610ac357600080fd5b6000546001600160a01b0316331480610b5957506001546001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b44919061179f565b6001600160a01b0316336001600160a01b0316145b80610b6e57506001546001600160a01b031633145b610b8a5760405162461bcd60e51b8152600401610466906117bc565b61082d828267ffffffffffffffff1661131e565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b6001546001600160a01b0316610bde57600080fd5b6000546001600160a01b0316331480610c7457506001546001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5f919061179f565b6001600160a01b0316336001600160a01b0316145b80610c8957506001546001600160a01b031633145b610ca55760405162461bcd60e51b8152600401610466906117bc565b8051610cb8906002906020840190611464565b507f9d3b637080c93cf84785a8e847e7c45118d18988dfbaf8acb02b53fcbb14dacb81604051610ce891906114fd565b60405180910390a150565b6001546001600160a01b0316610d0857600080fd5b6000546001600160a01b0316331480610d9e57506001546001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d89919061179f565b6001600160a01b0316336001600160a01b0316145b80610db357506001546001600160a01b031633145b610dcf5760405162461bcd60e51b8152600401610466906117bc565b600380546001600160a01b0319166001600160a01b0383169081179091556040517fc3450b42414279d313db34d948a7a39227cc9c9e2acf2228eba16179d628f66f90600090a250565b6000546001600160a01b03163314610e435760405162461bcd60e51b815260040161046690611847565b6001600160a01b038116610ea85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610466565b61089a81611284565b6001600160a01b038316610f155760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610466565b6001600160a01b038216610f775760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610466565b6001600160a01b03831660009081526004602052604090205481811015610fef5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610466565b6001600160a01b0380851660009081526004602052604080822085850390559185168152908120805484929061102690849061182f565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161107291815260200190565b60405180910390a350505050565b6001600160a01b0383166110e25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610466565b6001600160a01b0382166111435760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610466565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0382166111fb5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610466565b806006600082825461120d919061182f565b90915550506001600160a01b0382166000908152600460205260408120805483929061123a90849061182f565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fd644dc7fcd33e8f50b196f5d8efabdaea1758e024467b0c26ca395105c4becfb90600090a250565b6001600160a01b03821661137e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610466565b6001600160a01b038216600090815260046020526040902054818110156113f25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610466565b6001600160a01b038316600090815260046020526040812083830390556006805484929061142190849061189e565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611198565b82805461147090611765565b90600052602060002090601f01602090048101928261149257600085556114d8565b82601f106114ab57805160ff19168380011785556114d8565b828001600101855582156114d8579182015b828111156114d85782518255916020019190600101906114bd565b506114e49291506114e8565b5090565b5b808211156114e457600081556001016114e9565b600060208083528351808285015260005b8181101561152a5785810183015185820160400152820161150e565b8181111561153c576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461089a57600080fd5b6000806040838503121561157a57600080fd5b823561158581611552565b946020939093013593505050565b803567ffffffffffffffff811681146115ab57600080fd5b919050565b6000602082840312156115c257600080fd5b6115cb82611593565b9392505050565b6000806000606084860312156115e757600080fd5b83356115f281611552565b9250602084013561160281611552565b929592945050506040919091013590565b60006020828403121561162557600080fd5b81356115cb81611552565b6000806040838503121561164357600080fd5b823561164e81611552565b915061165c60208401611593565b90509250929050565b6000806040838503121561167857600080fd5b823561168381611552565b9150602083013561169381611552565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156116c657600080fd5b813567ffffffffffffffff808211156116de57600080fd5b818401915084601f8301126116f257600080fd5b8135818111156117045761170461169e565b604051601f8201601f19908116603f0116810190838211818310171561172c5761172c61169e565b8160405282815287602084870101111561174557600080fd5b826020860160208301376000928101602001929092525095945050505050565b600181811c9082168061177957607f821691505b60208210810361179957634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156117b157600080fd5b81516115cb81611552565b6020808252603f908201527f4d656d6265723a2063616c6c6572206973206e6f7420746865206f776e65722c60408201527f206173736f63696174696f6e2c206173736f63696174696f6e206f776e657200606082015260800190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561184257611842611819565b500190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561188e57600080fd5b815180151581146115cb57600080fd5b6000828210156118b0576118b0611819565b50039056fea164736f6c634300080d000a",
    "sourceMap": "746:536:11:-:0;;;801:340;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1076:4;1082:6;1013:11;1026:17;1045:5;1052:8;921:32:0;719:10:9;921:18:0;:32::i;:::-;1244:17:18;:38;;-1:-1:-1;;;;;;1244:38:18;-1:-1:-1;;;;;1244:38:18;;;;;-1:-1:-1;1292:14:18;;-1:-1:-1;;;;;;;;1292:14:18;-1:-1:-1;;;;;;;;1292:14:18;;;;;;1316:20;;;;-1:-1:-1;;1316:20:18;;;;;:::i;:::-;-1:-1:-1;1346:29:18;1362:12;1346:15;:29::i;:::-;1385:30;1404:10;1385:18;:30::i;:::-;-1:-1:-1;;2044:13:1;;;;-1:-1:-1;2044:5:1;;-1:-1:-1;2044:13:1;;;;;:::i;:::-;-1:-1:-1;2067:17:1;;;;:7;;:17;;;;;:::i;:::-;;1978:113;;1104:30:11::2;1123:10;1104:18;;;:30;;:::i;:::-;801:340:::0;;;;;;746:536;;2270:187:0;2343:16;2362:6;;-1:-1:-1;;;;;2378:17:0;;;-1:-1:-1;;;;;;2378:17:0;;;;;;2410:40;;2362:6;;;;;;;2410:40;;2343:16;2410:40;2333:124;2270:187;:::o;2189:165:15:-;2262:12;:30;;-1:-1:-1;;;;;;2262:30:15;-1:-1:-1;;;;;2262:30:15;;;;;;;;2307:40;;;;-1:-1:-1;;2307:40:15;2189:165;:::o;746:536:11:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;746:536:11;;;-1:-1:-1;746:536:11;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;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:885;200:5;253:3;246:4;238:6;234:17;230:27;220:55;;271:1;268;261:12;220:55;294:13;;-1:-1:-1;;;;;356:10:22;;;353:36;;;369:18;;:::i;:::-;444:2;438:9;412:2;498:13;;-1:-1:-1;;494:22:22;;;518:2;490:31;486:40;474:53;;;542:18;;;562:22;;;539:46;536:72;;;588:18;;:::i;:::-;628:10;624:2;617:22;663:2;655:6;648:18;685:4;675:14;;730:3;725:2;720;712:6;708:15;704:24;701:33;698:53;;;747:1;744;737:12;698:53;769:1;760:10;;779:133;793:2;790:1;787:9;779:133;;;881:14;;;877:23;;871:30;850:14;;;846:23;;839:63;804:10;;;;779:133;;;930:2;927:1;924:9;921:80;;;989:1;984:2;979;971:6;967:15;963:24;956:35;921:80;1019:6;146:885;-1:-1:-1;;;;;;146:885:22:o;1036:144::-;-1:-1:-1;;;;;1124:31:22;;1114:42;;1104:70;;1170:1;1167;1160:12;1104:70;1036:144;:::o;1185:1247::-;1362:6;1370;1378;1386;1394;1402;1455:3;1443:9;1434:7;1430:23;1426:33;1423:53;;;1472:1;1469;1462:12;1423:53;1499:16;;-1:-1:-1;;;;;1564:14:22;;;1561:34;;;1591:1;1588;1581:12;1561:34;1614:61;1667:7;1658:6;1647:9;1643:22;1614:61;:::i;:::-;1604:71;;1721:2;1710:9;1706:18;1700:25;1684:41;;1750:2;1740:8;1737:16;1734:36;;;1766:1;1763;1756:12;1734:36;1789:63;1844:7;1833:8;1822:9;1818:24;1789:63;:::i;:::-;1779:73;;1895:2;1884:9;1880:18;1874:25;1861:38;;1908:44;1946:5;1908:44;:::i;:::-;2021:2;2006:18;;2000:25;1971:5;;-1:-1:-1;2034:46:22;2000:25;2034:46;:::i;:::-;2151:3;2136:19;;2130:26;2099:7;;-1:-1:-1;2187:16:22;;;2175:29;;2165:57;;2218:1;2215;2208:12;2165:57;2294:3;2279:19;;2273:26;2241:7;;-1:-1:-1;2311:16:22;;;2308:36;;;2340:1;2337;2330:12;2308:36;;2363:63;2418:7;2407:8;2396:9;2392:24;2363:63;:::i;:::-;2353:73;;;1185:1247;;;;;;;;:::o;2437:380::-;2516:1;2512:12;;;;2559;;;2580:61;;2634:4;2626:6;2622:17;2612:27;;2580:61;2687:2;2679:6;2676:14;2656:18;2653:38;2650:161;;2733:10;2728:3;2724:20;2721:1;2714:31;2768:4;2765:1;2758:15;2796:4;2793:1;2786:15;2650:161;;2437:380;;;:::o;:::-;746:536:11;;;;;;",
    "linkReferences": {}
  },
  "deployedBytecode": {
    "object": "0x608060405234801561001057600080fd5b50600436106101735760003560e01c8063715018a6116100de578063a457c2d711610097578063dd62ed3e11610071578063dd62ed3e14610341578063e0df5b6f14610354578063eda6032e14610367578063f2fde38b1461037a57600080fd5b8063a457c2d714610308578063a9059cbb1461031b578063c1eccbe01461032e57600080fd5b8063715018a61461028d57806374062f4d146102955780638662d3ae146102a85780638da5cb5b146102bb57806395d89b41146102cc578063a035b1fe146102d457600080fd5b806323b872dd1161013057806323b872dd14610214578063313ce5671461022757806339509351146102365780633c130d901461024957806340c10f191461025157806370a082311461026457600080fd5b8063050d4f781461017857806306fdde03146101a2578063079d0980146101b7578063095ea7b3146101ca57806318160ddd146101ed578063229c2048146101ff575b600080fd5b6001546001600160a01b03165b6040516001600160a01b0390911681526020015b60405180910390f35b6101aa61038d565b60405161019991906114fd565b600354610185906001600160a01b031681565b6101dd6101d8366004611567565b61041f565b6040519015158152602001610199565b6006545b604051908152602001610199565b61021261020d3660046115b0565b61046f565b005b6101dd6102223660046115d2565b6105a3565b60405160128152602001610199565b6101dd610244366004611567565b610697565b6101aa6106b9565b61021261025f366004611567565b610747565b6101f1610272366004611613565b6001600160a01b031660009081526004602052604090205490565b610212610831565b6102126102a3366004611613565b610867565b6101dd6102b6366004611613565b61089d565b6000546001600160a01b0316610185565b6101aa610926565b6001546102ef90600160a01b900467ffffffffffffffff1681565b60405167ffffffffffffffff9091168152602001610199565b6101dd610316366004611567565b610935565b6101dd610329366004611567565b6109bb565b61021261033c366004611630565b610aae565b6101f161034f366004611665565b610b9e565b6102126103623660046116b4565b610bc9565b610212610375366004611613565b610cf3565b610212610388366004611613565b610e19565b60606007805461039c90611765565b80601f01602080910402602001604051908101604052809291908181526020018280546103c890611765565b80156104155780601f106103ea57610100808354040283529160200191610415565b820191906000526020600020905b8154815290600101906020018083116103f857829003601f168201915b5050505050905090565b60405162461bcd60e51b815260206004820152601e60248201527f4c6963656e73653a20617070726f7665206e6f7420737570706f72746564000060448201526000906064015b60405180910390fd5b6001546001600160a01b031661048457600080fd5b6000546001600160a01b031633148061051a57506001546001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104e1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610505919061179f565b6001600160a01b0316336001600160a01b0316145b8061052f57506001546001600160a01b031633145b61054b5760405162461bcd60e51b8152600401610466906117bc565b6001805467ffffffffffffffff60a01b1916600160a01b67ffffffffffffffff8416908102919091179091556040517ff88bffa611823165fbf8a5b30329c5759a3d2e8f25548ccf875a76d09905cf4a90600090a250565b6001546000906001600160a01b03166105bb57600080fd5b6000546001600160a01b031633148061065157506001546001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610618573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063c919061179f565b6001600160a01b0316336001600160a01b0316145b8061066657506001546001600160a01b031633145b6106825760405162461bcd60e51b8152600401610466906117bc565b61068d848484610eb1565b5060019392505050565b60003361068d8185856106aa8383610b9e565b6106b4919061182f565b611080565b600280546106c690611765565b80601f01602080910402602001604051908101604052809291908181526020018280546106f290611765565b801561073f5780601f106107145761010080835404028352916020019161073f565b820191906000526020600020905b81548152906001019060200180831161072257829003601f168201915b505050505081565b6001546001600160a01b031661075c57600080fd5b6000546001600160a01b03163314806107f257506001546001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107dd919061179f565b6001600160a01b0316336001600160a01b0316145b8061080757506001546001600160a01b031633145b6108235760405162461bcd60e51b8152600401610466906117bc565b61082d82826111a5565b5050565b6000546001600160a01b0316331461085b5760405162461bcd60e51b815260040161046690611847565b6108656000611284565b565b6000546001600160a01b031633146108915760405162461bcd60e51b815260040161046690611847565b61089a816112d4565b50565b6001546000906001600160a01b03838116911614801561092057506040516321887c3d60e01b81523060048201526001600160a01b038316906321887c3d90602401602060405180830381865afa1580156108fc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610920919061187c565b92915050565b60606008805461039c90611765565b600033816109438286610b9e565b9050838110156109a35760405162461bcd60e51b815260206004820152602560248201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604482015264207a65726f60d81b6064820152608401610466565b6109b08286868403611080565b506001949350505050565b6001546000906001600160a01b03166109d357600080fd5b6000546001600160a01b0316331480610a6957506001546001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a30573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a54919061179f565b6001600160a01b0316336001600160a01b0316145b80610a7e57506001546001600160a01b031633145b610a9a5760405162461bcd60e51b8152600401610466906117bc565b610aa5338484610eb1565b50600192915050565b6001546001600160a01b0316610ac357600080fd5b6000546001600160a01b0316331480610b5957506001546001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b20573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b44919061179f565b6001600160a01b0316336001600160a01b0316145b80610b6e57506001546001600160a01b031633145b610b8a5760405162461bcd60e51b8152600401610466906117bc565b61082d828267ffffffffffffffff1661131e565b6001600160a01b03918216600090815260056020908152604080832093909416825291909152205490565b6001546001600160a01b0316610bde57600080fd5b6000546001600160a01b0316331480610c7457506001546001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c3b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5f919061179f565b6001600160a01b0316336001600160a01b0316145b80610c8957506001546001600160a01b031633145b610ca55760405162461bcd60e51b8152600401610466906117bc565b8051610cb8906002906020840190611464565b507f9d3b637080c93cf84785a8e847e7c45118d18988dfbaf8acb02b53fcbb14dacb81604051610ce891906114fd565b60405180910390a150565b6001546001600160a01b0316610d0857600080fd5b6000546001600160a01b0316331480610d9e57506001546001600160a01b03166001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d89919061179f565b6001600160a01b0316336001600160a01b0316145b80610db357506001546001600160a01b031633145b610dcf5760405162461bcd60e51b8152600401610466906117bc565b600380546001600160a01b0319166001600160a01b0383169081179091556040517fc3450b42414279d313db34d948a7a39227cc9c9e2acf2228eba16179d628f66f90600090a250565b6000546001600160a01b03163314610e435760405162461bcd60e51b815260040161046690611847565b6001600160a01b038116610ea85760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610466565b61089a81611284565b6001600160a01b038316610f155760405162461bcd60e51b815260206004820152602560248201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604482015264647265737360d81b6064820152608401610466565b6001600160a01b038216610f775760405162461bcd60e51b815260206004820152602360248201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260448201526265737360e81b6064820152608401610466565b6001600160a01b03831660009081526004602052604090205481811015610fef5760405162461bcd60e51b815260206004820152602660248201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604482015265616c616e636560d01b6064820152608401610466565b6001600160a01b0380851660009081526004602052604080822085850390559185168152908120805484929061102690849061182f565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161107291815260200190565b60405180910390a350505050565b6001600160a01b0383166110e25760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610466565b6001600160a01b0382166111435760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610466565b6001600160a01b0383811660008181526005602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0382166111fb5760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401610466565b806006600082825461120d919061182f565b90915550506001600160a01b0382166000908152600460205260408120805483929061123a90849061182f565b90915550506040518181526001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9060200160405180910390a35050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b600180546001600160a01b0319166001600160a01b0383169081179091556040517fd644dc7fcd33e8f50b196f5d8efabdaea1758e024467b0c26ca395105c4becfb90600090a250565b6001600160a01b03821661137e5760405162461bcd60e51b815260206004820152602160248201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736044820152607360f81b6064820152608401610466565b6001600160a01b038216600090815260046020526040902054818110156113f25760405162461bcd60e51b815260206004820152602260248201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604482015261636560f01b6064820152608401610466565b6001600160a01b038316600090815260046020526040812083830390556006805484929061142190849061189e565b90915550506040518281526000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001611198565b82805461147090611765565b90600052602060002090601f01602090048101928261149257600085556114d8565b82601f106114ab57805160ff19168380011785556114d8565b828001600101855582156114d8579182015b828111156114d85782518255916020019190600101906114bd565b506114e49291506114e8565b5090565b5b808211156114e457600081556001016114e9565b600060208083528351808285015260005b8181101561152a5785810183015185820160400152820161150e565b8181111561153c576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b038116811461089a57600080fd5b6000806040838503121561157a57600080fd5b823561158581611552565b946020939093013593505050565b803567ffffffffffffffff811681146115ab57600080fd5b919050565b6000602082840312156115c257600080fd5b6115cb82611593565b9392505050565b6000806000606084860312156115e757600080fd5b83356115f281611552565b9250602084013561160281611552565b929592945050506040919091013590565b60006020828403121561162557600080fd5b81356115cb81611552565b6000806040838503121561164357600080fd5b823561164e81611552565b915061165c60208401611593565b90509250929050565b6000806040838503121561167857600080fd5b823561168381611552565b9150602083013561169381611552565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156116c657600080fd5b813567ffffffffffffffff808211156116de57600080fd5b818401915084601f8301126116f257600080fd5b8135818111156117045761170461169e565b604051601f8201601f19908116603f0116810190838211818310171561172c5761172c61169e565b8160405282815287602084870101111561174557600080fd5b826020860160208301376000928101602001929092525095945050505050565b600181811c9082168061177957607f821691505b60208210810361179957634e487b7160e01b600052602260045260246000fd5b50919050565b6000602082840312156117b157600080fd5b81516115cb81611552565b6020808252603f908201527f4d656d6265723a2063616c6c6572206973206e6f7420746865206f776e65722c60408201527f206173736f63696174696f6e2c206173736f63696174696f6e206f776e657200606082015260800190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561184257611842611819565b500190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60006020828403121561188e57600080fd5b815180151581146115cb57600080fd5b6000828210156118b0576118b0611819565b50039056fea164736f6c634300080d000a",
    "sourceMap": "746:536:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2412:93:15;2486:12;;-1:-1:-1;;;;;2486:12:15;2412:93;;;-1:-1:-1;;;;;198:32:22;;;180:51;;168:2;153:18;2412:93:15;;;;;;;;2156:98:1;;;:::i;:::-;;;;;;;:::i;547:30:18:-;;;;;-1:-1:-1;;;;;547:30:18;;;976:171:16;;;;;;:::i;:::-;;:::i;:::-;;;1686:14:22;;1679:22;1661:41;;1649:2;1634:18;976:171:16;1521:187:22;3244:106:1;3331:12;;3244:106;;;1859:25:22;;;1847:2;1832:18;3244:106:1;1713:177:22;1747:133:18;;;;;;:::i;:::-;;:::i;:::-;;750:220:16;;;;;;:::i;:::-;;:::i;3093:91:1:-;;;3175:2;2863:36:22;;2851:2;2836:18;3093:91:1;2721:184:22;5873:234:1;;;;;;:::i;:::-;;:::i;463:22:18:-;;;:::i;418:106:16:-;;;;;;:::i;:::-;;:::i;3408:125:1:-;;;;;;:::i;:::-;-1:-1:-1;;;;;3508:18:1;3482:7;3508:18;;;:9;:18;;;;;;;3408:125;1668:101:0;;;:::i;1428:121:18:-;;;;;;:::i;:::-;;:::i;2511:203:15:-;;;;;;:::i;:::-;;:::i;1036:85:0:-;1082:7;1108:6;-1:-1:-1;;;;;1108:6:0;1036:85;;2367:102:1;;;:::i;366:19:18:-;;;;;-1:-1:-1;;;366:19:18;;;;;;;;;3816:18:22;3804:31;;;3786:50;;3774:2;3759:18;366:19:18;3642:200:22;6594:427:1;;;;;;:::i;:::-;;:::i;530:214:16:-;;;;;;:::i;:::-;;:::i;1147:133:11:-;;;;;;:::i;:::-;;:::i;3976:149:1:-;;;;;;:::i;:::-;;:::i;1555:186:18:-;;;;;;:::i;:::-;;:::i;1886:241::-;;;;;;:::i;:::-;;:::i;1918:198:0:-;;;;;;:::i;:::-;;:::i;2156:98:1:-;2210:13;2242:5;2235:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2156:98;:::o;976:171:16:-;1100:40;;-1:-1:-1;;;1100:40:16;;6475:2:22;1100:40:16;;;6457:21:22;6514:2;6494:18;;;6487:30;6553:32;6533:18;;;6526:60;1080:4:16;;6603:18:22;;1100:40:16;;;;;;;;1747:133:18;1708:12:15;;-1:-1:-1;;;;;1708:12:15;1692:44;;;;;;1082:7:0;1108:6;-1:-1:-1;;;;;1108:6:0;1767:10:15;:21;;:76;;-1:-1:-1;2486:12:15;;-1:-1:-1;;;;;2486:12:15;-1:-1:-1;;;;;1822:19:15;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1808:35:15;:10;-1:-1:-1;;;;;1808:35:15;;1767:76;:132;;;-1:-1:-1;2486:12:15;;-1:-1:-1;;;;;2486:12:15;1863:10;:36;1767:132;1746:242;;;;-1:-1:-1;;;1746:242:15;;;;;;;:::i;:::-;1828:5:18::1;:14:::0;;-1:-1:-1;;;;1828:14:18::1;-1:-1:-1::0;;;1828:14:18::1;::::0;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;1857:16:::1;::::0;::::1;::::0;-1:-1:-1;;1857:16:18::1;1747:133:::0;:::o;750:220:16:-;1708:12:15;;899:4:16;;-1:-1:-1;;;;;1708:12:15;1692:44;;;;;;1082:7:0;1108:6;-1:-1:-1;;;;;1108:6:0;1767:10:15;:21;;:76;;-1:-1:-1;2486:12:15;;-1:-1:-1;;;;;2486:12:15;-1:-1:-1;;;;;1822:19:15;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1808:35:15;:10;-1:-1:-1;;;;;1808:35:15;;1767:76;:132;;;-1:-1:-1;2486:12:15;;-1:-1:-1;;;;;2486:12:15;1863:10;:36;1767:132;1746:242;;;;-1:-1:-1;;;1746:242:15;;;;;;;:::i;:::-;915:27:16::1;925:4;931:2;935:6;915:9;:27::i;:::-;-1:-1:-1::0;959:4:16::1;750:220:::0;;;;;:::o;5873:234:1:-;5961:4;719:10:9;6015:64:1;719:10:9;6031:7:1;6068:10;6040:25;719:10:9;6031:7:1;6040:9;:25::i;:::-;:38;;;;:::i;:::-;6015:8;:64::i;463:22:18:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;418:106:16:-;1708:12:15;;-1:-1:-1;;;;;1708:12:15;1692:44;;;;;;1082:7:0;1108:6;-1:-1:-1;;;;;1108:6:0;1767:10:15;:21;;:76;;-1:-1:-1;2486:12:15;;-1:-1:-1;;;;;2486:12:15;-1:-1:-1;;;;;1822:19:15;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1808:35:15;:10;-1:-1:-1;;;;;1808:35:15;;1767:76;:132;;;-1:-1:-1;2486:12:15;;-1:-1:-1;;;;;2486:12:15;1863:10;:36;1767:132;1746:242;;;;-1:-1:-1;;;1746:242:15;;;;;;;:::i;:::-;500:17:16::1;506:2;510:6;500:5;:17::i;:::-;418:106:::0;;:::o;1668:101:0:-;1082:7;1108:6;-1:-1:-1;;;;;1108:6:0;719:10:9;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;;;;;;:::i;:::-;1732:30:::1;1759:1;1732:18;:30::i;:::-;1668:101::o:0;1428:121:18:-;1082:7:0;1108:6;-1:-1:-1;;;;;1108:6:0;719:10:9;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;;;;;;:::i;:::-;1513:29:18::1;1529:12;1513:15;:29::i;:::-;1428:121:::0;:::o;2511:203:15:-;2666:12;;2620:4;;-1:-1:-1;;;;;2647:31:15;;;2666:12;;2647:31;:60;;;;-1:-1:-1;2682:25:15;;-1:-1:-1;;;2682:25:15;;2702:4;2682:25;;;180:51:22;-1:-1:-1;;;;;2682:19:15;;;;;153:18:22;;2682:25:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2640:67;2511:203;-1:-1:-1;;2511:203:15:o;2367:102:1:-;2423:13;2455:7;2448:14;;;;;:::i;6594:427::-;6687:4;719:10:9;6687:4:1;6768:25;719:10:9;6785:7:1;6768:9;:25::i;:::-;6741:52;;6831:15;6811:16;:35;;6803:85;;;;-1:-1:-1;;;6803:85:1;;8653:2:22;6803:85:1;;;8635:21:22;8692:2;8672:18;;;8665:30;8731:34;8711:18;;;8704:62;-1:-1:-1;;;8782:18:22;;;8775:35;8827:19;;6803:85:1;8451:401:22;6803:85:1;6922:60;6931:5;6938:7;6966:15;6947:16;:34;6922:8;:60::i;:::-;-1:-1:-1;7010:4:1;;6594:427;-1:-1:-1;;;;6594:427:1:o;530:214:16:-;1708:12:15;;663:4:16;;-1:-1:-1;;;;;1708:12:15;1692:44;;;;;;1082:7:0;1108:6;-1:-1:-1;;;;;1108:6:0;1767:10:15;:21;;:76;;-1:-1:-1;2486:12:15;;-1:-1:-1;;;;;2486:12:15;-1:-1:-1;;;;;1822:19:15;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1808:35:15;:10;-1:-1:-1;;;;;1808:35:15;;1767:76;:132;;;-1:-1:-1;2486:12:15;;-1:-1:-1;;;;;2486:12:15;1863:10;:36;1767:132;1746:242;;;;-1:-1:-1;;;1746:242:15;;;;;;;:::i;:::-;683:33:16::1;693:10;705:2;709:6;683:9;:33::i;:::-;-1:-1:-1::0;733:4:16::1;530:214:::0;;;;:::o;1147:133:11:-;1708:12:15;;-1:-1:-1;;;;;1708:12:15;1692:44;;;;;;1082:7:0;1108:6;-1:-1:-1;;;;;1108:6:0;1767:10:15;:21;;:76;;-1:-1:-1;2486:12:15;;-1:-1:-1;;;;;2486:12:15;-1:-1:-1;;;;;1822:19:15;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1808:35:15;:10;-1:-1:-1;;;;;1808:35:15;;1767:76;:132;;;-1:-1:-1;2486:12:15;;-1:-1:-1;;;;;2486:12:15;1863:10;:36;1767:132;1746:242;;;;-1:-1:-1;;;1746:242:15;;;;;;;:::i;:::-;1254:19:11::1;1260:4;1266:6;1254:19;;:5;:19::i;3976:149:1:-:0;-1:-1:-1;;;;;4091:18:1;;;4065:7;4091:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;3976:149::o;1555:186:18:-;1708:12:15;;-1:-1:-1;;;;;1708:12:15;1692:44;;;;;;1082:7:0;1108:6;-1:-1:-1;;;;;1108:6:0;1767:10:15;:21;;:76;;-1:-1:-1;2486:12:15;;-1:-1:-1;;;;;2486:12:15;-1:-1:-1;;;;;1822:19:15;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1808:35:15;:10;-1:-1:-1;;;;;1808:35:15;;1767:76;:132;;;-1:-1:-1;2486:12:15;;-1:-1:-1;;;;;2486:12:15;1863:10;:36;1767:132;1746:242;;;;-1:-1:-1;;;1746:242:15;;;;;;;:::i;:::-;1677:20:18;;::::1;::::0;:8:::1;::::0;:20:::1;::::0;::::1;::::0;::::1;:::i;:::-;;1712:22;1724:9;1712:22;;;;;;:::i;:::-;;;;;;;;1555:186:::0;:::o;1886:241::-;1708:12:15;;-1:-1:-1;;;;;1708:12:15;1692:44;;;;;;1082:7:0;1108:6;-1:-1:-1;;;;;1108:6:0;1767:10:15;:21;;:76;;-1:-1:-1;2486:12:15;;-1:-1:-1;;;;;2486:12:15;-1:-1:-1;;;;;1822:19:15;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1808:35:15;:10;-1:-1:-1;;;;;1808:35:15;;1767:76;:132;;;-1:-1:-1;2486:12:15;;-1:-1:-1;;;;;2486:12:15;1863:10;:36;1767:132;1746:242;;;;-1:-1:-1;;;1746:242:15;;;;;;;:::i;:::-;2018:17:18::1;:38:::0;;-1:-1:-1;;;;;;2018:38:18::1;-1:-1:-1::0;;;;;2018:38:18;::::1;::::0;;::::1;::::0;;;2071:49:::1;::::0;::::1;::::0;-1:-1:-1;;2071:49:18::1;1886:241:::0;:::o;1918:198:0:-;1082:7;1108:6;-1:-1:-1;;;;;1108:6:0;719:10:9;1248:23:0;1240:68;;;;-1:-1:-1;;;1240:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;2006:22:0;::::1;1998:73;;;::::0;-1:-1:-1;;;1998:73:0;;9059:2:22;1998:73:0::1;::::0;::::1;9041:21:22::0;9098:2;9078:18;;;9071:30;9137:34;9117:18;;;9110:62;-1:-1:-1;;;9188:18:22;;;9181:36;9234:19;;1998:73:0::1;8857:402:22::0;1998:73:0::1;2081:28;2100:8;2081:18;:28::i;7484:651:1:-:0;-1:-1:-1;;;;;7610:18:1;;7602:68;;;;-1:-1:-1;;;7602:68:1;;9466:2:22;7602:68:1;;;9448:21:22;9505:2;9485:18;;;9478:30;9544:34;9524:18;;;9517:62;-1:-1:-1;;;9595:18:22;;;9588:35;9640:19;;7602:68:1;9264:401:22;7602:68:1;-1:-1:-1;;;;;7688:16:1;;7680:64;;;;-1:-1:-1;;;7680:64:1;;9872:2:22;7680:64:1;;;9854:21:22;9911:2;9891:18;;;9884:30;9950:34;9930:18;;;9923:62;-1:-1:-1;;;10001:18:22;;;9994:33;10044:19;;7680:64:1;9670:399:22;7680:64:1;-1:-1:-1;;;;;7826:15:1;;7804:19;7826:15;;;:9;:15;;;;;;7859:21;;;;7851:72;;;;-1:-1:-1;;;7851:72:1;;10276:2:22;7851:72:1;;;10258:21:22;10315:2;10295:18;;;10288:30;10354:34;10334:18;;;10327:62;-1:-1:-1;;;10405:18:22;;;10398:36;10451:19;;7851:72:1;10074:402:22;7851:72:1;-1:-1:-1;;;;;7957:15:1;;;;;;;:9;:15;;;;;;7975:20;;;7957:38;;8015:13;;;;;;;;:23;;7989:6;;7957:15;8015:23;;7989:6;;8015:23;:::i;:::-;;;;;;;;8069:2;-1:-1:-1;;;;;8054:26:1;8063:4;-1:-1:-1;;;;;8054:26:1;;8073:6;8054:26;;;;1859:25:22;;1847:2;1832:18;;1713:177;8054:26:1;;;;;;;;7592:543;7484:651;;;:::o;10119:370::-;-1:-1:-1;;;;;10250:19:1;;10242:68;;;;-1:-1:-1;;;10242:68:1;;10683:2:22;10242:68:1;;;10665:21:22;10722:2;10702:18;;;10695:30;10761:34;10741:18;;;10734:62;-1:-1:-1;;;10812:18:22;;;10805:34;10856:19;;10242:68:1;10481:400:22;10242:68:1;-1:-1:-1;;;;;10328:21:1;;10320:68;;;;-1:-1:-1;;;10320:68:1;;11088:2:22;10320:68:1;;;11070:21:22;11127:2;11107:18;;;11100:30;11166:34;11146:18;;;11139:62;-1:-1:-1;;;11217:18:22;;;11210:32;11259:19;;10320:68:1;10886:398:22;10320:68:1;-1:-1:-1;;;;;10399:18:1;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;10450:32;;1859:25:22;;;10450:32:1;;1832:18:22;10450:32:1;;;;;;;;10119:370;;;:::o;8411:389::-;-1:-1:-1;;;;;8494:21:1;;8486:65;;;;-1:-1:-1;;;8486:65:1;;11491:2:22;8486:65:1;;;11473:21:22;11530:2;11510:18;;;11503:30;11569:33;11549:18;;;11542:61;11620:18;;8486:65:1;11289:355:22;8486:65:1;8638:6;8622:12;;:22;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;8654:18:1;;;;;;:9;:18;;;;;:28;;8676:6;;8654:18;:28;;8676:6;;8654:28;:::i;:::-;;;;-1:-1:-1;;8697:37:1;;1859:25:22;;;-1:-1:-1;;;;;8697:37:1;;;8714:1;;8697:37;;1847:2:22;1832:18;8697:37:1;;;;;;;418:106:16;;:::o;2270:187:0:-;2343:16;2362:6;;-1:-1:-1;;;;;2378:17:0;;;-1:-1:-1;;;;;;2378:17:0;;;;;;2410:40;;2362:6;;;;;;;2410:40;;2343:16;2410:40;2333:124;2270:187;:::o;2189:165:15:-;2262:12;:30;;-1:-1:-1;;;;;;2262:30:15;-1:-1:-1;;;;;2262:30:15;;;;;;;;2307:40;;;;-1:-1:-1;;2307:40:15;2189:165;:::o;9120:576:1:-;-1:-1:-1;;;;;9203:21:1;;9195:67;;;;-1:-1:-1;;;9195:67:1;;11851:2:22;9195:67:1;;;11833:21:22;11890:2;11870:18;;;11863:30;11929:34;11909:18;;;11902:62;-1:-1:-1;;;11980:18:22;;;11973:31;12021:19;;9195:67:1;11649:397:22;9195:67:1;-1:-1:-1;;;;;9358:18:1;;9333:22;9358:18;;;:9;:18;;;;;;9394:24;;;;9386:71;;;;-1:-1:-1;;;9386:71:1;;12253:2:22;9386:71:1;;;12235:21:22;12292:2;12272:18;;;12265:30;12331:34;12311:18;;;12304:62;-1:-1:-1;;;12382:18:22;;;12375:32;12424:19;;9386:71:1;12051:398:22;9386:71:1;-1:-1:-1;;;;;9491:18:1;;;;;;:9;:18;;;;;9512:23;;;9491:44;;9555:12;:22;;9529:6;;9491:18;9555:22;;9529:6;;9555:22;:::i;:::-;;;;-1:-1:-1;;9593:37:1;;1859:25:22;;;9619:1:1;;-1:-1:-1;;;;;9593:37:1;;;;;1847:2:22;1832:18;9593:37:1;1713:177:22;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;242:597:22;354:4;383:2;412;401:9;394:21;444:6;438:13;487:6;482:2;471:9;467:18;460:34;512:1;522:140;536:6;533:1;530:13;522:140;;;631:14;;;627:23;;621:30;597:17;;;616:2;593:26;586:66;551:10;;522:140;;;680:6;677:1;674:13;671:91;;;750:1;745:2;736:6;725:9;721:22;717:31;710:42;671:91;-1:-1:-1;823:2:22;802:15;-1:-1:-1;;798:29:22;783:45;;;;830:2;779:54;;242:597;-1:-1:-1;;;242:597:22:o;1065:131::-;-1:-1:-1;;;;;1140:31:22;;1130:42;;1120:70;;1186:1;1183;1176:12;1201:315;1269:6;1277;1330:2;1318:9;1309:7;1305:23;1301:32;1298:52;;;1346:1;1343;1336:12;1298:52;1385:9;1372:23;1404:31;1429:5;1404:31;:::i;:::-;1454:5;1506:2;1491:18;;;;1478:32;;-1:-1:-1;;;1201:315:22:o;1895:171::-;1962:20;;2022:18;2011:30;;2001:41;;1991:69;;2056:1;2053;2046:12;1991:69;1895:171;;;:::o;2071:184::-;2129:6;2182:2;2170:9;2161:7;2157:23;2153:32;2150:52;;;2198:1;2195;2188:12;2150:52;2221:28;2239:9;2221:28;:::i;:::-;2211:38;2071:184;-1:-1:-1;;;2071:184:22:o;2260:456::-;2337:6;2345;2353;2406:2;2394:9;2385:7;2381:23;2377:32;2374:52;;;2422:1;2419;2412:12;2374:52;2461:9;2448:23;2480:31;2505:5;2480:31;:::i;:::-;2530:5;-1:-1:-1;2587:2:22;2572:18;;2559:32;2600:33;2559:32;2600:33;:::i;:::-;2260:456;;2652:7;;-1:-1:-1;;;2706:2:22;2691:18;;;;2678:32;;2260:456::o;2910:247::-;2969:6;3022:2;3010:9;3001:7;2997:23;2993:32;2990:52;;;3038:1;3035;3028:12;2990:52;3077:9;3064:23;3096:31;3121:5;3096:31;:::i;3847:319::-;3914:6;3922;3975:2;3963:9;3954:7;3950:23;3946:32;3943:52;;;3991:1;3988;3981:12;3943:52;4030:9;4017:23;4049:31;4074:5;4049:31;:::i;:::-;4099:5;-1:-1:-1;4123:37:22;4156:2;4141:18;;4123:37;:::i;:::-;4113:47;;3847:319;;;;;:::o;4171:388::-;4239:6;4247;4300:2;4288:9;4279:7;4275:23;4271:32;4268:52;;;4316:1;4313;4306:12;4268:52;4355:9;4342:23;4374:31;4399:5;4374:31;:::i;:::-;4424:5;-1:-1:-1;4481:2:22;4466:18;;4453:32;4494:33;4453:32;4494:33;:::i;:::-;4546:7;4536:17;;;4171:388;;;;;:::o;4564:127::-;4625:10;4620:3;4616:20;4613:1;4606:31;4656:4;4653:1;4646:15;4680:4;4677:1;4670:15;4696:922;4765:6;4818:2;4806:9;4797:7;4793:23;4789:32;4786:52;;;4834:1;4831;4824:12;4786:52;4874:9;4861:23;4903:18;4944:2;4936:6;4933:14;4930:34;;;4960:1;4957;4950:12;4930:34;4998:6;4987:9;4983:22;4973:32;;5043:7;5036:4;5032:2;5028:13;5024:27;5014:55;;5065:1;5062;5055:12;5014:55;5101:2;5088:16;5123:2;5119;5116:10;5113:36;;;5129:18;;:::i;:::-;5204:2;5198:9;5172:2;5258:13;;-1:-1:-1;;5254:22:22;;;5278:2;5250:31;5246:40;5234:53;;;5302:18;;;5322:22;;;5299:46;5296:72;;;5348:18;;:::i;:::-;5388:10;5384:2;5377:22;5423:2;5415:6;5408:18;5463:7;5458:2;5453;5449;5445:11;5441:20;5438:33;5435:53;;;5484:1;5481;5474:12;5435:53;5540:2;5535;5531;5527:11;5522:2;5514:6;5510:15;5497:46;5585:1;5563:15;;;5580:2;5559:24;5552:35;;;;-1:-1:-1;5567:6:22;4696:922;-1:-1:-1;;;;;4696:922:22:o;5888:380::-;5967:1;5963:12;;;;6010;;;6031:61;;6085:4;6077:6;6073:17;6063:27;;6031:61;6138:2;6130:6;6127:14;6107:18;6104:38;6101:161;;6184:10;6179:3;6175:20;6172:1;6165:31;6219:4;6216:1;6209:15;6247:4;6244:1;6237:15;6101:161;;5888:380;;;:::o;6632:251::-;6702:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:52;;;6771:1;6768;6761:12;6723:52;6803:9;6797:16;6822:31;6847:5;6822:31;:::i;6888:427::-;7090:2;7072:21;;;7129:2;7109:18;;;7102:30;7168:34;7163:2;7148:18;;7141:62;7239:33;7234:2;7219:18;;7212:61;7305:3;7290:19;;6888:427::o;7320:127::-;7381:10;7376:3;7372:20;7369:1;7362:31;7412:4;7409:1;7402:15;7436:4;7433:1;7426:15;7452:128;7492:3;7523:1;7519:6;7516:1;7513:13;7510:39;;;7529:18;;:::i;:::-;-1:-1:-1;7565:9:22;;7452:128::o;7585:356::-;7787:2;7769:21;;;7806:18;;;7799:30;7865:34;7860:2;7845:18;;7838:62;7932:2;7917:18;;7585:356::o;8169:277::-;8236:6;8289:2;8277:9;8268:7;8264:23;8260:32;8257:52;;;8305:1;8302;8295:12;8257:52;8337:9;8331:16;8390:5;8383:13;8376:21;8369:5;8366:32;8356:60;;8412:1;8409;8402:12;12454:125;12494:4;12522:1;12519;12516:8;12513:34;;;12527:18;;:::i;:::-;-1:-1:-1;12564:9:22;;12454:125::o",
    "linkReferences": {}
  },
  "userdoc": {
    "version": 1,
    "kind": "user"
  },
  "devdoc": {
    "version": 1,
    "kind": "dev",
    "details": "A potentially burnable token that represents software available for sale",
    "methods": {
      "allowance(address,address)": {
        "details": "See {IERC20-allowance}."
      },
      "association()": {
        "details": "Returns the association"
      },
      "balanceOf(address)": {
        "details": "See {IERC20-balanceOf}."
      },
      "decimals()": {
        "details": "Returns the number of decimals used to get its user representation. For example, if `decimals` equals `2`, a balance of `505` tokens should be displayed to a user as `5.05` (`505 / 10 ** 2`). Tokens usually opt for a value of 18, imitating the relationship between Ether and Wei. This is the value {ERC20} uses, unless this function is overridden; NOTE: This information is only used for _display_ purposes: it in no way affects any of the arithmetic of the contract, including {IERC20-balanceOf} and {IERC20-transfer}."
      },
      "decreaseAllowance(address,uint256)": {
        "details": "Atomically decreases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address. - `spender` must have allowance for the caller of at least `subtractedValue`."
      },
      "increaseAllowance(address,uint256)": {
        "details": "Atomically increases the allowance granted to `spender` by the caller. This is an alternative to {approve} that can be used as a mitigation for problems described in {IERC20-approve}. Emits an {Approval} event indicating the updated allowance. Requirements: - `spender` cannot be the zero address."
      },
      "name()": {
        "details": "Returns the name of the token."
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "renounceOwnership()": {
        "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner."
      },
      "symbol()": {
        "details": "Returns the symbol of the token, usually a shorter version of the name."
      },
      "totalSupply()": {
        "details": "See {IERC20-totalSupply}."
      },
      "transfer(address,uint256)": {
        "details": "See {IERC20-transfer}. Requirements: - `to` cannot be the zero address. - the caller must have a balance of at least `amount`."
      },
      "transferFrom(address,address,uint256)": {
        "details": "See {IERC20-transferFrom}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. NOTE: Does not update the allowance if the current allowance is the maximum `uint256`. Requirements: - `from` and `to` cannot be the zero address. - `from` must have a balance of at least `amount`. - the caller must have allowance for ``from``'s tokens of at least `amount`."
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      }
    }
  },
  "ast": {
    "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/src/contracts/App.sol",
    "exportedSymbols": {
      "App": [
        2539
      ],
      "AppBurnable": [
        2593
      ],
      "Association": [
        4902
      ],
      "Context": [
        2404
      ],
      "ERC20": [
        690
      ],
      "FungibleLicense": [
        5132
      ],
      "IERC20": [
        768
      ],
      "IERC20Metadata": [
        793
      ],
      "Listing": [
        5373
      ],
      "Member": [
        5043
      ],
      "Ownable": [
        104
      ]
    },
    "id": 2594,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 2496,
        "literals": [
          "solidity",
          "0.8",
          ".13"
        ],
        "nodeType": "PragmaDirective",
        "src": "32:23:11"
      },
      {
        "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/lib/openzeppelin-contracts/contracts/token/ERC20/ERC20.sol",
        "file": "openzeppelin-contracts/contracts/token/ERC20/ERC20.sol",
        "id": 2497,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 2594,
        "sourceUnit": 691,
        "src": "57:64:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/src/contracts/lib/Association.sol",
        "file": "./lib/Association.sol",
        "id": 2498,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 2594,
        "sourceUnit": 5044,
        "src": "123:31:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/src/contracts/lib/Listing.sol",
        "file": "./lib/Listing.sol",
        "id": 2499,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 2594,
        "sourceUnit": 5374,
        "src": "155:27:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "/Users/evanconrad/dev/src/strangemoodfoundation/strangemood-eth/src/contracts/lib/License.sol",
        "file": "./lib/License.sol",
        "id": 2500,
        "nameLocation": "-1:-1:-1",
        "nodeType": "ImportDirective",
        "scope": 2594,
        "sourceUnit": 5133,
        "src": "183:27:11",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 2502,
              "name": "Listing",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 5373,
              "src": "289:7:11"
            },
            "id": 2503,
            "nodeType": "InheritanceSpecifier",
            "src": "289:7:11"
          },
          {
            "baseName": {
              "id": 2504,
              "name": "FungibleLicense",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 5132,
              "src": "298:15:11"
            },
            "id": 2505,
            "nodeType": "InheritanceSpecifier",
            "src": "298:15:11"
          }
        ],
        "canonicalName": "App",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 2501,
          "nodeType": "StructuredDocumentation",
          "src": "212:61:11",
          "text": "@dev A token that represents software available for sale"
        },
        "fullyImplemented": true,
        "id": 2539,
        "linearizedBaseContracts": [
          2539,
          5132,
          690,
          793,
          768,
          5373,
          5043,
          104,
          2404
        ],
        "name": "App",
        "nameLocation": "282:3:11",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 2537,
              "nodeType": "Block",
              "src": "613:47:11",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 2533,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "642:3:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2534,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "642:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2532,
                      "name": "_transferOwnership",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 103,
                      "src": "623:18:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 2535,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "623:30:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2536,
                  "nodeType": "ExpressionStatement",
                  "src": "623:30:11"
                }
              ]
            },
            "id": 2538,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 2522,
                    "name": "association",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2512,
                    "src": "532:11:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Association_$4902",
                      "typeString": "contract Association"
                    }
                  },
                  {
                    "id": 2523,
                    "name": "tokenToPurchaseIn",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2515,
                    "src": "545:17:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$690",
                      "typeString": "contract ERC20"
                    }
                  },
                  {
                    "id": 2524,
                    "name": "price",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2517,
                    "src": "564:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  {
                    "id": 2525,
                    "name": "tokenURI",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2519,
                    "src": "571:8:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  }
                ],
                "id": 2526,
                "kind": "baseConstructorSpecifier",
                "modifierName": {
                  "id": 2521,
                  "name": "Listing",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 5373,
                  "src": "524:7:11"
                },
                "nodeType": "ModifierInvocation",
                "src": "524:56:11"
              },
              {
                "arguments": [
                  {
                    "id": 2528,
                    "name": "name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2507,
                    "src": "595:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "id": 2529,
                    "name": "symbol",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2509,
                    "src": "601:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  }
                ],
                "id": 2530,
                "kind": "baseConstructorSpecifier",
                "modifierName": {
                  "id": 2527,
                  "name": "ERC20",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 690,
                  "src": "589:5:11"
                },
                "nodeType": "ModifierInvocation",
                "src": "589:19:11"
              }
            ],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2520,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2507,
                  "mutability": "mutable",
                  "name": "name",
                  "nameLocation": "355:4:11",
                  "nodeType": "VariableDeclaration",
                  "scope": 2538,
                  "src": "341:18:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2506,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "341:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2509,
                  "mutability": "mutable",
                  "name": "symbol",
                  "nameLocation": "383:6:11",
                  "nodeType": "VariableDeclaration",
                  "scope": 2538,
                  "src": "369:20:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2508,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "369:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2512,
                  "mutability": "mutable",
                  "name": "association",
                  "nameLocation": "411:11:11",
                  "nodeType": "VariableDeclaration",
                  "scope": 2538,
                  "src": "399:23:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Association_$4902",
                    "typeString": "contract Association"
                  },
                  "typeName": {
                    "id": 2511,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 2510,
                      "name": "Association",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 4902,
                      "src": "399:11:11"
                    },
                    "referencedDeclaration": 4902,
                    "src": "399:11:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Association_$4902",
                      "typeString": "contract Association"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2515,
                  "mutability": "mutable",
                  "name": "tokenToPurchaseIn",
                  "nameLocation": "438:17:11",
                  "nodeType": "VariableDeclaration",
                  "scope": 2538,
                  "src": "432:23:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$690",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "id": 2514,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 2513,
                      "name": "ERC20",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 690,
                      "src": "432:5:11"
                    },
                    "referencedDeclaration": 690,
                    "src": "432:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$690",
                      "typeString": "contract ERC20"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2517,
                  "mutability": "mutable",
                  "name": "price",
                  "nameLocation": "472:5:11",
                  "nodeType": "VariableDeclaration",
                  "scope": 2538,
                  "src": "465:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 2516,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "465:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2519,
                  "mutability": "mutable",
                  "name": "tokenURI",
                  "nameLocation": "501:8:11",
                  "nodeType": "VariableDeclaration",
                  "scope": 2538,
                  "src": "487:22:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2518,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "487:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "331:184:11"
            },
            "returnParameters": {
              "id": 2531,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "613:0:11"
            },
            "scope": 2539,
            "src": "320:340:11",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 2594,
        "src": "273:389:11",
        "usedErrors": []
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "baseName": {
              "id": 2541,
              "name": "Listing",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 5373,
              "src": "770:7:11"
            },
            "id": 2542,
            "nodeType": "InheritanceSpecifier",
            "src": "770:7:11"
          },
          {
            "baseName": {
              "id": 2543,
              "name": "FungibleLicense",
              "nodeType": "IdentifierPath",
              "referencedDeclaration": 5132,
              "src": "779:15:11"
            },
            "id": 2544,
            "nodeType": "InheritanceSpecifier",
            "src": "779:15:11"
          }
        ],
        "canonicalName": "AppBurnable",
        "contractDependencies": [],
        "contractKind": "contract",
        "documentation": {
          "id": 2540,
          "nodeType": "StructuredDocumentation",
          "src": "664:82:11",
          "text": "@dev A potentially burnable token that represents software available for sale"
        },
        "fullyImplemented": true,
        "id": 2593,
        "linearizedBaseContracts": [
          2593,
          5132,
          690,
          793,
          768,
          5373,
          5043,
          104,
          2404
        ],
        "name": "AppBurnable",
        "nameLocation": "755:11:11",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "body": {
              "id": 2576,
              "nodeType": "Block",
              "src": "1094:47:11",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "expression": {
                          "id": 2572,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "1123:3:11",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 2573,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "src": "1123:10:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 2571,
                      "name": "_transferOwnership",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 103,
                      "src": "1104:18:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$returns$__$",
                        "typeString": "function (address)"
                      }
                    },
                    "id": 2574,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1104:30:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2575,
                  "nodeType": "ExpressionStatement",
                  "src": "1104:30:11"
                }
              ]
            },
            "id": 2577,
            "implemented": true,
            "kind": "constructor",
            "modifiers": [
              {
                "arguments": [
                  {
                    "id": 2561,
                    "name": "association",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2551,
                    "src": "1013:11:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Association_$4902",
                      "typeString": "contract Association"
                    }
                  },
                  {
                    "id": 2562,
                    "name": "tokenToPurchaseIn",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2554,
                    "src": "1026:17:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$690",
                      "typeString": "contract ERC20"
                    }
                  },
                  {
                    "id": 2563,
                    "name": "price",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2556,
                    "src": "1045:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  {
                    "id": 2564,
                    "name": "tokenURI",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2558,
                    "src": "1052:8:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  }
                ],
                "id": 2565,
                "kind": "baseConstructorSpecifier",
                "modifierName": {
                  "id": 2560,
                  "name": "Listing",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 5373,
                  "src": "1005:7:11"
                },
                "nodeType": "ModifierInvocation",
                "src": "1005:56:11"
              },
              {
                "arguments": [
                  {
                    "id": 2567,
                    "name": "name",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2546,
                    "src": "1076:4:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  },
                  {
                    "id": 2568,
                    "name": "symbol",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 2548,
                    "src": "1082:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_memory_ptr",
                      "typeString": "string memory"
                    }
                  }
                ],
                "id": 2569,
                "kind": "baseConstructorSpecifier",
                "modifierName": {
                  "id": 2566,
                  "name": "ERC20",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 690,
                  "src": "1070:5:11"
                },
                "nodeType": "ModifierInvocation",
                "src": "1070:19:11"
              }
            ],
            "name": "",
            "nameLocation": "-1:-1:-1",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2559,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2546,
                  "mutability": "mutable",
                  "name": "name",
                  "nameLocation": "836:4:11",
                  "nodeType": "VariableDeclaration",
                  "scope": 2577,
                  "src": "822:18:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2545,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "822:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2548,
                  "mutability": "mutable",
                  "name": "symbol",
                  "nameLocation": "864:6:11",
                  "nodeType": "VariableDeclaration",
                  "scope": 2577,
                  "src": "850:20:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2547,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "850:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2551,
                  "mutability": "mutable",
                  "name": "association",
                  "nameLocation": "892:11:11",
                  "nodeType": "VariableDeclaration",
                  "scope": 2577,
                  "src": "880:23:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_Association_$4902",
                    "typeString": "contract Association"
                  },
                  "typeName": {
                    "id": 2550,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 2549,
                      "name": "Association",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 4902,
                      "src": "880:11:11"
                    },
                    "referencedDeclaration": 4902,
                    "src": "880:11:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_Association_$4902",
                      "typeString": "contract Association"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2554,
                  "mutability": "mutable",
                  "name": "tokenToPurchaseIn",
                  "nameLocation": "919:17:11",
                  "nodeType": "VariableDeclaration",
                  "scope": 2577,
                  "src": "913:23:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_contract$_ERC20_$690",
                    "typeString": "contract ERC20"
                  },
                  "typeName": {
                    "id": 2553,
                    "nodeType": "UserDefinedTypeName",
                    "pathNode": {
                      "id": 2552,
                      "name": "ERC20",
                      "nodeType": "IdentifierPath",
                      "referencedDeclaration": 690,
                      "src": "913:5:11"
                    },
                    "referencedDeclaration": 690,
                    "src": "913:5:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_contract$_ERC20_$690",
                      "typeString": "contract ERC20"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2556,
                  "mutability": "mutable",
                  "name": "price",
                  "nameLocation": "953:5:11",
                  "nodeType": "VariableDeclaration",
                  "scope": 2577,
                  "src": "946:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 2555,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "946:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2558,
                  "mutability": "mutable",
                  "name": "tokenURI",
                  "nameLocation": "982:8:11",
                  "nodeType": "VariableDeclaration",
                  "scope": 2577,
                  "src": "968:22:11",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_string_memory_ptr",
                    "typeString": "string"
                  },
                  "typeName": {
                    "id": 2557,
                    "name": "string",
                    "nodeType": "ElementaryTypeName",
                    "src": "968:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_string_storage_ptr",
                      "typeString": "string"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "812:184:11"
            },
            "returnParameters": {
              "id": 2570,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1094:0:11"
            },
            "scope": 2593,
            "src": "801:340:11",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 2591,
              "nodeType": "Block",
              "src": "1244:36:11",
              "statements": [
                {
                  "expression": {
                    "arguments": [
                      {
                        "id": 2587,
                        "name": "from",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2579,
                        "src": "1260:4:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "id": 2588,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 2581,
                        "src": "1266:6:11",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 2586,
                      "name": "_burn",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 579,
                      "src": "1254:5:11",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (address,uint256)"
                      }
                    },
                    "id": 2589,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "1254:19:11",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 2590,
                  "nodeType": "ExpressionStatement",
                  "src": "1254:19:11"
                }
              ]
            },
            "functionSelector": "c1eccbe0",
            "id": 2592,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "id": 2584,
                "kind": "modifierInvocation",
                "modifierName": {
                  "id": 2583,
                  "name": "onlyOwnerOrAssociation",
                  "nodeType": "IdentifierPath",
                  "referencedDeclaration": 4952,
                  "src": "1217:22:11"
                },
                "nodeType": "ModifierInvocation",
                "src": "1217:22:11"
              }
            ],
            "name": "burnFrom",
            "nameLocation": "1156:8:11",
            "nodeType": "FunctionDefinition",
            "parameters": {
              "id": 2582,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 2579,
                  "mutability": "mutable",
                  "name": "from",
                  "nameLocation": "1173:4:11",
                  "nodeType": "VariableDeclaration",
                  "scope": 2592,
                  "src": "1165:12:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 2578,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1165:7:11",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 2581,
                  "mutability": "mutable",
                  "name": "amount",
                  "nameLocation": "1186:6:11",
                  "nodeType": "VariableDeclaration",
                  "scope": 2592,
                  "src": "1179:13:11",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 2580,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "1179:6:11",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "visibility": "internal"
                }
              ],
              "src": "1164:29:11"
            },
            "returnParameters": {
              "id": 2585,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "1244:0:11"
            },
            "scope": 2593,
            "src": "1147:133:11",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          }
        ],
        "scope": 2594,
        "src": "746:536:11",
        "usedErrors": []
      }
    ],
    "src": "32:1251:11"
  }
}