{
  "contractName": "StorageManager",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "agreementReference",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "AgreementFundsDeposited",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "agreementReference",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "AgreementFundsPayout",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "agreementReference",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "AgreementFundsWithdrawn",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "agreementReference",
          "type": "bytes32"
        }
      ],
      "name": "AgreementStopped",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "provider",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "period",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "uint128",
          "name": "price",
          "type": "uint128"
        }
      ],
      "name": "BillingPlanSet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "provider",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes32[]",
          "name": "message",
          "type": "bytes32[]"
        }
      ],
      "name": "MessageEmitted",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32[]",
          "name": "dataReference",
          "type": "bytes32[]"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "agreementCreator",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "provider",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "size",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "billingPeriod",
          "type": "uint64"
        },
        {
          "indexed": false,
          "internalType": "uint128",
          "name": "billingPrice",
          "type": "uint128"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "availableFunds",
          "type": "uint256"
        }
      ],
      "name": "NewAgreement",
      "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": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Paused",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "provider",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "capacity",
          "type": "uint64"
        }
      ],
      "name": "TotalCapacitySet",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "Unpaused",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "isWhitelistedProvider",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "isWhitelistedToken",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "offerRegistry",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "utilizedCapacity",
          "type": "uint64"
        },
        {
          "internalType": "uint64",
          "name": "totalCapacity",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "paused",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "isWhiteListed",
          "type": "bool"
        }
      ],
      "name": "setWhitelistedTokens",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "providerAddress",
          "type": "address"
        },
        {
          "internalType": "bool",
          "name": "isWhiteListed",
          "type": "bool"
        }
      ],
      "name": "setWhitelistedProvider",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "capacity",
          "type": "uint64"
        },
        {
          "internalType": "uint64[][]",
          "name": "billingPeriods",
          "type": "uint64[][]"
        },
        {
          "internalType": "uint128[][]",
          "name": "billingPrices",
          "type": "uint128[][]"
        },
        {
          "internalType": "address[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "bytes32[]",
          "name": "message",
          "type": "bytes32[]"
        }
      ],
      "name": "setOffer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "capacity",
          "type": "uint64"
        }
      ],
      "name": "setTotalCapacity",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "terminateOffer",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64[][]",
          "name": "billingPeriods",
          "type": "uint64[][]"
        },
        {
          "internalType": "uint128[][]",
          "name": "billingPrices",
          "type": "uint128[][]"
        },
        {
          "internalType": "address[]",
          "name": "tokens",
          "type": "address[]"
        }
      ],
      "name": "setBillingPlans",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32[]",
          "name": "message",
          "type": "bytes32[]"
        }
      ],
      "name": "emitMessage",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32[]",
          "name": "dataReference",
          "type": "bytes32[]"
        },
        {
          "internalType": "address",
          "name": "provider",
          "type": "address"
        },
        {
          "internalType": "uint64",
          "name": "size",
          "type": "uint64"
        },
        {
          "internalType": "uint64",
          "name": "billingPeriod",
          "type": "uint64"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes32[][]",
          "name": "dataReferencesOfAgreementToPayOut",
          "type": "bytes32[][]"
        },
        {
          "internalType": "address[]",
          "name": "creatorsOfAgreementToPayOut",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "tokenOfAgreementsToPayOut",
          "type": "address"
        }
      ],
      "name": "newAgreement",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        },
        {
          "internalType": "uint256",
          "name": "amount",
          "type": "uint256"
        },
        {
          "internalType": "bytes32[]",
          "name": "dataReference",
          "type": "bytes32[]"
        },
        {
          "internalType": "address",
          "name": "provider",
          "type": "address"
        }
      ],
      "name": "depositFunds",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32[]",
          "name": "dataReference",
          "type": "bytes32[]"
        },
        {
          "internalType": "address",
          "name": "provider",
          "type": "address"
        },
        {
          "internalType": "address[]",
          "name": "tokens",
          "type": "address[]"
        },
        {
          "internalType": "uint256[]",
          "name": "amounts",
          "type": "uint256[]"
        }
      ],
      "name": "withdrawFunds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32[][]",
          "name": "dataReferencesOfAgreementToPayOut",
          "type": "bytes32[][]"
        },
        {
          "internalType": "address[]",
          "name": "creatorsOfAgreementToPayOut",
          "type": "address[]"
        },
        {
          "internalType": "address",
          "name": "tokensOfAgreementsToPayOut",
          "type": "address"
        },
        {
          "internalType": "address payable",
          "name": "provider",
          "type": "address"
        }
      ],
      "name": "payoutFunds",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "storer",
          "type": "address"
        }
      ],
      "name": "hasUtilizedCapacity",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "pause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "unpause",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32[]",
          "name": "dataReference",
          "type": "bytes32[]"
        },
        {
          "internalType": "address",
          "name": "creator",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "token",
          "type": "address"
        }
      ],
      "name": "getAgreementReference",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    }
  ],
  "metadata": "{\"compiler\":{\"version\":\"0.6.12+commit.27d51765\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"agreementReference\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"AgreementFundsDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"agreementReference\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"AgreementFundsPayout\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"agreementReference\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"AgreementFundsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"agreementReference\",\"type\":\"bytes32\"}],\"name\":\"AgreementStopped\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"period\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"price\",\"type\":\"uint128\"}],\"name\":\"BillingPlanSet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"message\",\"type\":\"bytes32[]\"}],\"name\":\"MessageEmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"bytes32[]\",\"name\":\"dataReference\",\"type\":\"bytes32[]\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"agreementCreator\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"size\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"billingPeriod\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint128\",\"name\":\"billingPrice\",\"type\":\"uint128\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"availableFunds\",\"type\":\"uint256\"}],\"name\":\"NewAgreement\",\"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\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Paused\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"capacity\",\"type\":\"uint64\"}],\"name\":\"TotalCapacitySet\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"Unpaused\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[]\",\"name\":\"dataReference\",\"type\":\"bytes32[]\"},{\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"depositFunds\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"message\",\"type\":\"bytes32[]\"}],\"name\":\"emitMessage\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"dataReference\",\"type\":\"bytes32[]\"},{\"internalType\":\"address\",\"name\":\"creator\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"}],\"name\":\"getAgreementReference\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"storer\",\"type\":\"address\"}],\"name\":\"hasUtilizedCapacity\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isWhitelistedProvider\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"isWhitelistedToken\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"dataReference\",\"type\":\"bytes32[]\"},{\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"size\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"billingPeriod\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"bytes32[][]\",\"name\":\"dataReferencesOfAgreementToPayOut\",\"type\":\"bytes32[][]\"},{\"internalType\":\"address[]\",\"name\":\"creatorsOfAgreementToPayOut\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"tokenOfAgreementsToPayOut\",\"type\":\"address\"}],\"name\":\"newAgreement\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"name\":\"offerRegistry\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"utilizedCapacity\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"totalCapacity\",\"type\":\"uint64\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"paused\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[][]\",\"name\":\"dataReferencesOfAgreementToPayOut\",\"type\":\"bytes32[][]\"},{\"internalType\":\"address[]\",\"name\":\"creatorsOfAgreementToPayOut\",\"type\":\"address[]\"},{\"internalType\":\"address\",\"name\":\"tokensOfAgreementsToPayOut\",\"type\":\"address\"},{\"internalType\":\"address payable\",\"name\":\"provider\",\"type\":\"address\"}],\"name\":\"payoutFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64[][]\",\"name\":\"billingPeriods\",\"type\":\"uint64[][]\"},{\"internalType\":\"uint128[][]\",\"name\":\"billingPrices\",\"type\":\"uint128[][]\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"}],\"name\":\"setBillingPlans\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"capacity\",\"type\":\"uint64\"},{\"internalType\":\"uint64[][]\",\"name\":\"billingPeriods\",\"type\":\"uint64[][]\"},{\"internalType\":\"uint128[][]\",\"name\":\"billingPrices\",\"type\":\"uint128[][]\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"bytes32[]\",\"name\":\"message\",\"type\":\"bytes32[]\"}],\"name\":\"setOffer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"capacity\",\"type\":\"uint64\"}],\"name\":\"setTotalCapacity\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"providerAddress\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isWhiteListed\",\"type\":\"bool\"}],\"name\":\"setWhitelistedProvider\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"token\",\"type\":\"address\"},{\"internalType\":\"bool\",\"name\":\"isWhiteListed\",\"type\":\"bool\"}],\"name\":\"setWhitelistedTokens\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"terminateOffer\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unpause\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32[]\",\"name\":\"dataReference\",\"type\":\"bytes32[]\"},{\"internalType\":\"address\",\"name\":\"provider\",\"type\":\"address\"},{\"internalType\":\"address[]\",\"name\":\"tokens\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"withdrawFunds\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"author\":\"Rinke Hendriksen <rinke@iovlabs.org>Adam Uhlir <adam@iovlabs.org>\",\"kind\":\"dev\",\"methods\":{\"depositFunds(address,uint256,bytes32[],address)\":{\"details\":\"- depositing funds to Agreement that is linked to terminated Offer is not possible - depositing funds to Agreement that already is expired (eq. ran out of funds at some point) is not possible. Call NewAgreement instead. The data needs to be re-provided though. - if the token is not the native currency, then the contract must be first be given allowance to transfer tokens in it's posession.\",\"params\":{\"dataReference\":\"data reference where should be deposited funds.\",\"provider\":\"the address of the provider of the Offer.\"}},\"emitMessage(bytes32[])\":{\"params\":{\"message\":\"the Provider may send a message (e.g. his nodeID). Message should be structured such that the first two bits specify the message type, followed with the message). 0x01 == nodeID\"}},\"getAgreementReference(bytes32[],address,address)\":{\"params\":{\"creator\":\"the creator of the agreement\",\"dataReference\":\"the dataReference of the agreement\",\"token\":\"the token, which is used as a means of payment for the agreement.\"}},\"newAgreement(bytes32[],address,uint64,uint64,address,uint256,bytes32[][],address[],address)\":{\"details\":\"- The to-be-pinned data reference's size in MB (rounded up) must be equal in size to param size. - Provider can reject to pin data reference when it exceeds specified size. - The ownership of Agreement is enforced with agreementReference structure which is calculated as: hash(msg.sender, dataReference) - if the token is not the native currency, then the contract must be first be given allowance to transfer tokens in it's posession. Contains execution of the transferFrom on external token contract before all the stage changes are performed. As a result if a token will perform a callback to the StorageManager, it may lead to a reentrancy attack. Hence additional attention should be paid while reviewing this method of a token before whitelisting.\",\"params\":{\"amount\":\"if token is set, this is the amount of tokens that is transfered\",\"billingPeriod\":\"the chosen period for billing.\",\"creatorsOfAgreementToPayOut\":\"the creators of agreements which must be payed out. Pass this when there is no capacity. The order should match the order of dataReferenceOfAgreementToPayOut and tokensOfAgreementToPayOut\",\"dataReference\":\"the reference to an Data Source, can be several things.\",\"dataReferencesOfAgreementToPayOut\":\"the data references of agreements which must be payed out. Pass this when there is no capacity. Order should equal order of creatorsOfAgreementToPayOut and tokensOfAgreementToPayOut\",\"provider\":\"the provider from which is proposed to take a Offer.\",\"size\":\"the size of the to-be-pinned file in MB (rounded up).\",\"token\":\"the token in which you want to make the agreement. By convention: address(0) is the native currency\",\"tokenOfAgreementsToPayOut\":\"the token address of agreements which must be payed out. Pass this when there is no capacity.\"}},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"pause()\":{\"details\":\"Called by a pauser to pause, triggers stopped state.\"},\"paused()\":{\"details\":\"Returns true if the contract is paused, and false otherwise.\"},\"payoutFunds(bytes32[][],address[],address,address)\":{\"details\":\"- Provider must call an expired agreement themselves as soon as the agreement is expired, to add back the capacity to their Offer. - Payout can be triggered by other events as well. Like in newAgreement call with either existing agreement or when other Agreements are passed to the agreementsReferencesToBePayedOut array.\",\"params\":{\"creatorsOfAgreementToPayOut\":\"the creators that made the agreement to pay\",\"dataReferencesOfAgreementToPayOut\":\"the data references of the agreement to pay\",\"tokensOfAgreementsToPayOut\":\"the tokens of the agreement to pay out\"}},\"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.\"},\"setBillingPlans(uint64[][],uint128[][],address[])\":{\"details\":\"- setting the price to 0 means that a particular period is not offered, which can be used to remove a period from the offer. - make sure that any period * prices does not cause an overflow, as this can never be accepted and hence is pointless. - the length of tokens array must always be one shorter than the length of the boundaries array (otherwise you get an array index out of bounds error) - make sure that the length of billingPeriods and billingPrices is of equal length. If billingPeriods is longer than prices => array index out of bounds error. If prices longer than period => the prices in higher indeces won't be considered\",\"params\":{\"billingPeriods\":\"the offered periods. Length must be equal to billingPrices. The first index of the multi dem array corresponds with the address in tokens at the same index\",\"billingPrices\":\"the prices for the offered periods. Each entry at index corresponds to the same index at periods. 0 means that the particular period is not offered. The first index of the multi dem array corresponds with the address in tokens at the same index\"}},\"setOffer(uint64,uint64[][],uint128[][],address[],bytes32[])\":{\"details\":\"- Use this function when initiating an Offer or when the users wants to change more than one parameter at once. - make sure that any period * prices does not cause an overflow, as this can never be accepted (REF_MAX_PRICE) and hence is pointless - only whitelisted tokens are allowed to make an offer for - if there are two tokens, and two billingPrice/periods pairs per token, then boundaries[0] == 1. This makes the first two billingPeriod/prices pairs to apply to the first token ([tokens[0]]) and the second pairs to the second token. - make sure that the length of billingPeriods and billingPrices is of equal length. If billingPeriods is longer than prices => array index out of bounds error. If prices longer than period => the prices in higher indeces won't be considered\",\"params\":{\"billingPeriods\":\"the offered periods. Length must be equal to the length of billingPrices. The first index of the multi dem array corresponds with the address in tokens at the same index\",\"billingPrices\":\"the prices for the offered periods. Each entry at index corresponds to the same index at periods. The first index of the multi dem array corresponds with the address in tokens at the same index\",\"capacity\":\"the amount of MB offered. If already active before and set to 0, existing contracts can't be prolonged / re-started, no new contracts can be started.\",\"message\":\"the Provider may include a message (e.g. his nodeID).  Message should be structured such that the first two bits specify the message type, followed with the message). 0x01 == nodeID\",\"tokens\":\"the tokens for which an offer is made. By convention, address(0) is the native currency.\"}},\"setTotalCapacity(uint64)\":{\"params\":{\"capacity\":\"the new capacity\"}},\"setWhitelistedProvider(address,bool)\":{\"params\":{\"isWhiteListed\":\"whether you want to whitelist the provider or put it from the whitelist.\",\"providerAddress\":\"the providerAddress from whom you want to set the whitelisted\"}},\"setWhitelistedTokens(address,bool)\":{\"params\":{\"isWhiteListed\":\"whether you want to whitelist the token or put it from the whitelist.\",\"token\":\"the token from whom you want to set the whitelisted\"}},\"terminateOffer()\":{\"details\":\"no new Agreement can be created and no existing Agreement can be prolonged. All existing Agreement are still valid for the amount of periods still deposited.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"unpause()\":{\"details\":\"Called by a pauser to unpause, returns to normal state.\"},\"withdrawFunds(bytes32[],address,address[],uint256[])\":{\"details\":\"- if amount is zero then all withdrawable funds are transferred (eq. all available funds minus funds for still non-payed out periods and current period) - if Agreement is terminated Consumer can withdraw all remaining funds - if the token is not the native currency, then the contract must be first be given allowance to transfer tokens in it's posession.\",\"params\":{\"amounts\":\"the value you want to withdraw for each token\",\"dataReference\":\"the data reference of agreement to be funds withdrawn from\",\"provider\":\"the address of the provider of the Offer.\",\"tokens\":\"the tokens in which to withdraw. By convention, address(0) is the native currency.\"}}},\"title\":\"StorageManager\",\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"depositFunds(address,uint256,bytes32[],address)\":{\"notice\":\">> FOR CONSUMERdeposits new funds to the Agreement.\"},\"emitMessage(bytes32[])\":{\"notice\":\">> FOR PROVIDER\"},\"getAgreementReference(bytes32[],address,address)\":{\"notice\":\"get the agreementReference. the agreementReference consists of the hash of the dataReference, msg.sender and the tokenAdddress, to allow: - multiple people to register an agreement for the same file - one person to register multiple agreements for the same file, but with different tokens - link the token to the agreement, such that we do the accounting properly\"},\"newAgreement(bytes32[],address,uint64,uint64,address,uint256,bytes32[][],address[],address)\":{\"notice\":\">> FOR CONSUMERnew Agreement for given Offer\"},\"payoutFunds(bytes32[][],address[],address,address)\":{\"notice\":\">> FOR PROVIDERpayout already earned funds of one or more Agreement\"},\"setBillingPlans(uint64[][],uint128[][],address[])\":{\"notice\":\">> FOR PROVIDERset the billing plans for an Offer.\"},\"setOffer(uint64,uint64[][],uint128[][],address[],bytes32[])\":{\"notice\":\">> FOR PROVIDERset the totalCapacity and billingPlans of a Offer.\"},\"setTotalCapacity(uint64)\":{\"notice\":\">> FOR PROVIDERsets total capacity of Offer.\"},\"setWhitelistedProvider(address,bool)\":{\"notice\":\"whitelist a provider or remove the provider from whitelist\"},\"setWhitelistedTokens(address,bool)\":{\"notice\":\"whitelist a token or remove the token from whitelist\"},\"terminateOffer()\":{\"notice\":\">> FOR PROVIDERstops the Offer. It sets the totalCapacity to 0 which indicates terminated Offer.\"},\"withdrawFunds(bytes32[],address,address[],uint256[])\":{\"notice\":\">> FOR CONSUMERwithdraw funds from Agreement.\"}},\"notice\":\"Providers can offer their storage space and list their price and Consumers can take these offers\",\"version\":1}},\"settings\":{\"compilationTarget\":{\"/Users/naz_dou/Documents/Projects/IovLabs/rif-marketplace-storage/contracts/StorageManager.sol\":\"StorageManager\"},\"evmVersion\":\"istanbul\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[]},\"sources\":{\"/Users/naz_dou/Documents/Projects/IovLabs/rif-marketplace-storage/contracts/StorageManager.sol\":{\"keccak256\":\"0xb39dec9f5da8aa5bf10ca169d3e1ea12d08678d2f9d999dcbd22f52711dab8f0\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://07fab32db88ce5f2f79e08db9c81095fc398d8ce7ac8dde69e6885197396ebd1\",\"dweb:/ipfs/QmXHa2SsauGepF6TbDkGsMeqKYgxHsFKsrVWbvC8Cw5q1m\"]},\"@openzeppelin/contracts-ethereum-package/contracts/GSN/Context.sol\":{\"keccak256\":\"0xe81686511d62f18b2d9c693c2c94c0a789c690de63aa90e15451ebf65c5bfd3e\",\"urls\":[\"bzz-raw://1332ee1d2b096456bf2e5795b5871d0fed47be6a31c9a2f2cef9206a299565ea\",\"dweb:/ipfs/Qmdu1847Y4UL3gTjbLUManMGfxYEoyGPSodM3Br89SKzwx\"]},\"@openzeppelin/contracts-ethereum-package/contracts/Initializable.sol\":{\"keccak256\":\"0x9bfec92e36234ecc99b5d37230acb6cd1f99560233753162204104a4897e8721\",\"urls\":[\"bzz-raw://5cf7c208583d4d046d75bd99f5507412ab01cce9dd9f802ce9768a416d93ea2f\",\"dweb:/ipfs/QmcQS1BBMPpVEkXP3qzwSjxHNrqDek8YeR7xbVWDC9ApC7\"]},\"@openzeppelin/contracts-ethereum-package/contracts/access/Ownable.sol\":{\"keccak256\":\"0x04a69a78363214b4e3055db8e620bed222349f0c81e9d1cbe769eb849b69b73f\",\"urls\":[\"bzz-raw://b3115459376196d6c2c3817439c169d9b052b27b70e8ee2e28963cda760736da\",\"dweb:/ipfs/QmXaNF5rmcDSAzBiFMQjf979qb9xNXqD9eZtgo4uM9VEis\"]},\"@openzeppelin/contracts-ethereum-package/contracts/utils/Pausable.sol\":{\"keccak256\":\"0x2ad5473fe88d9ab30c6cd495ab8895daae8c4a48cf8231282a2d339387b35006\",\"urls\":[\"bzz-raw://a737c60474c063efc28e5922b6a1d073588c010eb67f883273d3ec29d8e52d6b\",\"dweb:/ipfs/QmWCeqeZhR45S1mcjPRYEMy1DCHMy9sXDfwYLPycFRh2Nk\"]},\"@openzeppelin/contracts/math/SafeMath.sol\":{\"keccak256\":\"0x3b21f2c8d626de3b9925ae33e972d8bf5c8b1bffb3f4ee94daeed7d0679036e6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7f8d45329fecbf0836ad7543330c3ecd0f8d0ffa42d4016278c3eb2215fdcdfe\",\"dweb:/ipfs/QmXWLT7GcnHtA5NiD6MFi2CV3EWJY4wv5mLNnypqYDrxL3\"]},\"@openzeppelin/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0x5f02220344881ce43204ae4a6281145a67bc52c2bb1290a791857df3d19d78f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://24427744bd3e6cb73c17010119af12a318289c0253a4d9acb8576c9fb3797b08\",\"dweb:/ipfs/QmTLDqpKRBuxGxRAmjgXt9AkXyACW3MtKzi7PYjm5iMfGC\"]},\"@openzeppelin/contracts/token/ERC20/SafeERC20.sol\":{\"keccak256\":\"0xf12dfbe97e6276980b83d2830bb0eb75e0cf4f3e626c2471137f82158ae6a0fc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3a849c2d95e85463909e5b5c920b13e7a11216ca14127085e16d22b9379d52a\",\"dweb:/ipfs/QmUg3CZDbCCcQdroEpexBy5ZFd5vD1UWijWQq9qHZjtJNQ\"]},\"@openzeppelin/contracts/utils/Address.sol\":{\"keccak256\":\"0xa6a15ddddcbf29d2922a1e0d4151b5d2d33da24b93cc9ebc12390e0d855532f8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7c119bcaecfa853d564ac88d312777f75fa1126a3bca88a3371adb0ad9f35cb0\",\"dweb:/ipfs/QmY9UPuXeSKq86Zh38fE43VGQPhKMN34mkuFSFqPcr6nvZ\"]}},\"version\":1}",
  "bytecode": "0x608060405234801561001057600080fd5b50613502806100206000396000f3fe6080604052600436106101405760003560e01c80638456cb59116100b6578063bf317abb1161006f578063bf317abb1461033e578063d245599e1461036b578063dc4aac9e1461037e578063ec5cdf991461039e578063f2fde38b146103be578063f650ca74146103de57610140565b80638456cb59146102845780638da5cb5b146102995780638f5c5fc8146102bb5780639aad18ca146102e9578063ab37f48614610309578063b58596931461032957610140565b8063398887051161010857806339888705146101da5780633f4ba83a146101fa5780635c975abb1461020f578063715018a61461023a5780638129fc1c1461024f57806382c4dba51461026457610140565b80631f3477a5146101455780632691c085146101675780632fd09ef91461017a578063325b29411461019a57806337f4329d146101ba575b600080fd5b34801561015157600080fd5b5061016561016036600461272f565b6103fe565b005b610165610175366004612536565b6106ad565b34801561018657600080fd5b5061016561019536600461269c565b6109aa565b3480156101a657600080fd5b506101656101b5366004612619565b6109b6565b3480156101c657600080fd5b506101656101d5366004612943565b610a58565b3480156101e657600080fd5b506101656101f53660046124fe565b610ae7565b34801561020657600080fd5b50610165610b47565b34801561021b57600080fd5b50610224610ba8565b6040516102319190612b9f565b60405180910390f35b34801561024657600080fd5b50610165610bb1565b34801561025b57600080fd5b50610165610c30565b34801561027057600080fd5b5061016561027f3660046124fe565b610cc2565b34801561029057600080fd5b50610165610d22565b3480156102a557600080fd5b506102ae610d82565b6040516102319190612aae565b3480156102c757600080fd5b506102db6102d63660046124e2565b610d91565b604051610231929190613409565b3480156102f557600080fd5b506102246103043660046124e2565b610db7565b34801561031557600080fd5b506102246103243660046124e2565b610dcc565b34801561033557600080fd5b50610165610de1565b34801561034a57600080fd5b5061035e6103593660046126ce565b610e9e565b6040516102319190612baa565b61016561037936600461281a565b610ed5565b34801561038a57600080fd5b5061016561039936600461259f565b611349565b3480156103aa57600080fd5b506102246103b93660046124e2565b61138f565b3480156103ca57600080fd5b506101656103d93660046124e2565b6113b5565b3480156103ea57600080fd5b506101656103f936600461291c565b61146c565b6001600160a01b038316600090815260c960205260408120905b83518110156106a557600083828151811061042f57fe5b60200260200101519050600085838151811061044757fe5b60200260200101519050600061045e893384610e9e565b60008181526002808801602052604090912090810154919250906001600160401b03166104a65760405162461bcd60e51b815260040161049d9061304a565b60405180910390fd5b6002810154600090600160401b90046001600160801b03166104cd57506001810154610554565b600282015482546040805160a0810182526001600160801b03808416808352600160801b9094046001600160401b03908116602084015260018801549383019390935291841660608201819052600160401b909404821660808201526105519392909202169061054b9061054090611557565b600186015490611603565b90611603565b90505b8461055d578094505b8085111561057d5760405162461bcd60e51b815260040161049d90612e49565b600182015461058c9086611603565b6001830155846105ae5760405162461bcd60e51b815260040161049d90612e8a565b6105b78461164e565b1561063e576000336001600160a01b0316866040516105d590612aab565b60006040518083038185875af1925050503d8060008114610612576040519150601f19603f3d011682016040523d82523d6000602084013e610617565b606091505b50509050806106385760405162461bcd60e51b815260040161049d906132d4565b50610652565b6106526001600160a01b038516338761165b565b836001600160a01b0316837f579b45b1ee6c41a979ca183763f8a18021bb54fcd590cf1be2821e4abe31fd8e8760405161068c9190612baa565b60405180910390a3505060019093019250610418915050565b505050505050565b60975460ff16156106d05760405162461bcd60e51b815260040161049d90613020565b6001600160a01b038116600090815260cb6020526040902054819060ff1661070a5760405162461bcd60e51b815260040161049d906130e8565b6000610717843388610e9e565b6001600160a01b038716600090815260ca602052604090205490915060ff166107525760405162461bcd60e51b815260040161049d906130a0565b6001600160a01b038316600090815260c9602052604090208054600160401b90046001600160401b03166107985760405162461bcd60e51b815260040161049d90612da2565b600082815260028083016020526040909120908101546001600160401b03166107d35760405162461bcd60e51b815260040161049d9061304a565b6002810154600160401b90046001600160801b03166108045760405162461bcd60e51b815260040161049d90613133565b80546001600160a01b038916600090815260018401602090815260408083206001600160401b03600160801b86041684529091529020546001600160801b039081169116146108655760405162461bcd60e51b815260040161049d90612fd5565b6002810154815461088a916001600160801b03909116906001600160401b03166116b6565b6040805160a08101825283546001600160801b0380821683526001600160401b03600160801b9092048216602084015260018601549383019390935260028501549081166060830152600160401b900490911660808201526108fa906108ef90611557565b600184015490611603565b10156109185760405162461bcd60e51b815260040161049d90612df7565b60006109238961164e565b9050801561092f573497505b600182015461093e90896116f0565b60018301558061095d5761095d6001600160a01b038a1633308b611715565b886001600160a01b0316847f5ac5c9c49f143d64d36d4eb69c1624c8670cb426b3f952830187c279a51009cc8a6040516109979190612baa565b60405180910390a3505050505050505050565b6109b38161173c565b50565b60975460ff16156109d95760405162461bcd60e51b815260040161049d90613020565b33600081815260cb602052604090205460ff16610a085760405162461bcd60e51b815260040161049d906130e8565b33600090815260c9602052604090208054600160401b90046001600160401b0316610a455760405162461bcd60e51b815260040161049d90612da2565b610a5181868686611780565b5050505050565b60975460ff1615610a7b5760405162461bcd60e51b815260040161049d90613020565b33600081815260cb602052604090205460ff16610aaa5760405162461bcd60e51b815260040161049d906130e8565b33600090815260c960205260409020610ac28761146c565b610ace81878787611780565b825115610ade57610ade8361173c565b50505050505050565b610aef611827565b6065546001600160a01b03908116911614610b1c5760405162461bcd60e51b815260040161049d906131b8565b6001600160a01b0391909116600090815260ca60205260409020805460ff1916911515919091179055565b610b4f611827565b6065546001600160a01b03908116911614610b7c5760405162461bcd60e51b815260040161049d906131b8565b60975460ff16610b9e5760405162461bcd60e51b815260040161049d90612bfa565b610ba661182b565b565b60975460ff1690565b610bb9611827565b6065546001600160a01b03908116911614610be65760405162461bcd60e51b815260040161049d906131b8565b6065546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3606580546001600160a01b0319169055565b600054610100900460ff1680610c495750610c49611897565b80610c57575060005460ff16155b610c735760405162461bcd60e51b815260040161049d90613241565b600054610100900460ff16158015610c9e576000805460ff1961ff0019909116610100171660011790555b610ca661189d565b610cae61191b565b80156109b3576000805461ff001916905550565b610cca611827565b6065546001600160a01b03908116911614610cf75760405162461bcd60e51b815260040161049d906131b8565b6001600160a01b0391909116600090815260cb60205260409020805460ff1916911515919091179055565b610d2a611827565b6065546001600160a01b03908116911614610d575760405162461bcd60e51b815260040161049d906131b8565b60975460ff1615610d7a5760405162461bcd60e51b815260040161049d90613020565b610ba6611999565b6065546001600160a01b031690565b60c9602052600090815260409020546001600160401b0380821691600160401b90041682565b60cb6020526000908152604090205460ff1681565b60ca6020526000908152604090205460ff1681565b33600081815260cb602052604090205460ff16610e105760405162461bcd60e51b815260040161049d906130e8565b33600090815260c9602052604090208054600160401b90046001600160401b0316610e4d5760405162461bcd60e51b815260040161049d90612da2565b805467ffffffffffffffff60401b1916815560405133907f7267987f11d91dd9b618677a5f4e5596eca75f9e97d880452c73c2dbd8ebfae390610e9290600090612bb3565b60405180910390a25050565b6000828483604051602001610eb593929190612a36565b6040516020818303038152906040528051906020012090505b9392505050565b60975460ff1615610ef85760405162461bcd60e51b815260040161049d90613020565b6001600160a01b038816600090815260cb602052604090205460ff16610f305760405162461bcd60e51b815260040161049d906130e8565b6001600160a01b038816600090815260c9602052604090206001600160401b038716610f6e5760405162461bcd60e51b815260040161049d90612c28565b6000886001600160401b031611610f975760405162461bcd60e51b815260040161049d90612f89565b8054600160401b90046001600160401b0316610fc55760405162461bcd60e51b815260040161049d90612da2565b6001600160a01b038616600090815260ca602052604090205460ff16610ffd5760405162461bcd60e51b815260040161049d90612cf4565b835115611010576110108484848c6119f2565b600061101d8b3389610e9e565b6000818152600284810160205260409091200154909150600160401b90046001600160801b0316156110f057604080516001808252818301909252606091816020015b606081526020019060019003908161106057505060408051600180825281830190925291925060609190602080830190803683370190505090508c826000815181106110a857fe5b602002602001018190525033816000815181106110c157fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506110ed82828b8f6119f2565b50505b6001600160a01b038716600090815260018301602090815260408083206001600160401b038c1684529091529020546001600160801b0316806111455760405162461bcd60e51b815260040161049d90613335565b6000828152600284016020526040902061115e8961164e565b15611167573497505b600181015461117690896116f0565b60018201556111976001600160401b038c166001600160801b0384166116b6565b816001015410156111ba5760405162461bcd60e51b815260040161049d90612ecd565b60028101805467ffffffffffffffff19166001600160401b038d81169190911790915581546001600160801b0319166001600160801b0384161767ffffffffffffffff60801b1916600160801b918c1691909102178155611219611d22565b6002820180546001600160801b0392909216600160401b02600160401b600160c01b03199092169190911790556001600160a01b038c16600090815260c960205260409020805490945061127a906001600160401b03908116908d166116f0565b845467ffffffffffffffff19166001600160401b0391821617808655600160401b81048216911611156112bf5760405162461bcd60e51b815260040161049d90612f3c565b6112c88961164e565b6112e1576112e16001600160a01b038a1633308b611715565b8b6001600160a01b0316336001600160a01b03167f8c1ead7cd014d31bcde974cc4762a98cce33de4fbda569fbcc73f8f276212fff8f8e8e878f886001015460405161133296959493929190612b45565b60405180910390a350505050505050505050505050565b6001600160a01b038116600090815260cb6020526040902054819060ff166113835760405162461bcd60e51b815260040161049d906130e8565b610a51858585856119f2565b6001600160a01b0316600090815260c960205260409020546001600160401b0316151590565b6113bd611827565b6065546001600160a01b039081169116146113ea5760405162461bcd60e51b815260040161049d906131b8565b6001600160a01b0381166114105760405162461bcd60e51b815260040161049d90612c77565b6065546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3606580546001600160a01b0319166001600160a01b0392909216919091179055565b60975460ff161561148f5760405162461bcd60e51b815260040161049d90613020565b33600081815260cb602052604090205460ff166114be5760405162461bcd60e51b815260040161049d906130e8565b6001600160401b0382166114e45760405162461bcd60e51b815260040161049d906131ed565b33600081815260c9602052604090819020805467ffffffffffffffff60401b1916600160401b6001600160401b0387160217815590519091907f7267987f11d91dd9b618677a5f4e5596eca75f9e97d880452c73c2dbd8ebfae39061154a908690612bb3565b60405180910390a2505050565b60008061158783600001516001600160801b031684606001516001600160401b03166116b690919063ffffffff16565b905060006115bb84602001516001600160401b03166115b586608001516001600160801b031661054b611d22565b90611d26565b905060006115c982846116b6565b905084604001518111156115fb576115f8836115f2858860400151611d2690919063ffffffff16565b906116b6565b90505b949350505050565b600061164583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d68565b90505b92915050565b6001600160a01b03161590565b6116b18363a9059cbb60e01b848460405160240161167a929190612ae6565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611d94565b505050565b6000826116c557506000611648565b828202828482816116d257fe5b04146116455760405162461bcd60e51b815260040161049d90613177565b6000828201838110156116455760405162461bcd60e51b815260040161049d90612cbd565b611736846323b872dd60e01b85858560405160240161167a93929190612ac2565b50505050565b336001600160a01b03167f8e9ae80d46259102dfbf4ae6121dbe6548e85c8c0494163e8e0bf0e87bcd5876826040516117759190612b32565b60405180910390a250565b60005b8151811015610a515760005b84828151811061179b57fe5b60200260200101515181101561181e57611816868484815181106117bb57fe5b60200260200101518785815181106117cf57fe5b602002602001015184815181106117e257fe5b60200260200101518786815181106117f657fe5b6020026020010151858151811061180957fe5b6020026020010151611e23565b60010161178f565b50600101611783565b3390565b60975460ff1661184d5760405162461bcd60e51b815260040161049d90612bfa565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611880611827565b60405161188d9190612aae565b60405180910390a1565b303b1590565b600054610100900460ff16806118b657506118b6611897565b806118c4575060005460ff16155b6118e05760405162461bcd60e51b815260040161049d90613241565b600054610100900460ff1615801561190b576000805460ff1961ff0019909116610100171660011790555b611913611f12565b610cae611f93565b600054610100900460ff16806119345750611934611897565b80611942575060005460ff16155b61195e5760405162461bcd60e51b815260040161049d90613241565b600054610100900460ff16158015611989576000805460ff1961ff0019909116610100171660011790555b611991611f12565b610cae61206d565b60975460ff16156119bc5760405162461bcd60e51b815260040161049d90613020565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611880611827565b6001600160a01b038116600090815260c96020526040812090805b86518160ff161015611c77576000611a52888360ff1681518110611a2d57fe5b6020026020010151888460ff1681518110611a4457fe5b602002602001015188610e9e565b60008181526002808701602052604090912090810154919250906001600160401b0316611a915760405162461bcd60e51b815260040161049d9061304a565b6002810154600160401b90046001600160801b0316611ac25760405162461bcd60e51b815260040161049d9061328f565b6040805160a08101825282546001600160801b0380821683526001600160401b03600160801b9092048216602084015260018501549383019390935260028401549081166060830152600160401b90049091166080820152600090611b2690611557565b90508015611c6c576001820154611b3d9082611603565b6001830155611b4c85826116f0565b60028301548354919650611b72916001600160801b0316906001600160401b03166116b6565b82600101541015611bf857600282018054600160401b600160c01b031981169091558654611bac916001600160401b039182169116611603565b865467ffffffffffffffff19166001600160401b039190911617865560405183907f28b8eb5ccfb9c485b6ee9be3b0153679351f87ca0753786218a455bc3bbe5fdf90600090a2611c29565b611c00611d22565b8260020160086101000a8154816001600160801b0302191690836001600160801b031602179055505b876001600160a01b0316837f14f0f588a0fd7eb2bc9954bd5b8b1ff7006d486ac28b7541bc966bf102b9756183604051611c639190612baa565b60405180910390a35b505050600101611a0d565b5080156106a557611c878461164e565b15611d0e576000836001600160a01b031682604051611ca590612aab565b60006040518083038185875af1925050503d8060008114611ce2576040519150601f19603f3d011682016040523d82523d6000602084013e611ce7565b606091505b5050905080611d085760405162461bcd60e51b815260040161049d906133d4565b506106a5565b6106a56001600160a01b038516848361165b565b4290565b600061164583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506120f9565b60008184841115611d8c5760405162461bcd60e51b815260040161049d9190612bc7565b505050900390565b6060611de9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166121309092919063ffffffff16565b8051909150156116b15780806020019051810190611e079190612900565b6116b15760405162461bcd60e51b815260040161049d9061338a565b62ed4e006001600160401b0383161115611e4f5760405162461bcd60e51b815260040161049d90612d51565b6001600160a01b038316600090815260ca602052604090205460ff16611e875760405162461bcd60e51b815260040161049d906130a0565b6001600160a01b038316600090815260018501602090815260408083206001600160401b03861684529091529081902080546001600160801b0319166001600160801b0384161790555133907f7eec1797ef3c639736e76e7f22565caf759bb674dab35235349e6879d0a2c14890611f0490869086908690612aff565b60405180910390a250505050565b600054610100900460ff1680611f2b5750611f2b611897565b80611f39575060005460ff16155b611f555760405162461bcd60e51b815260040161049d90613241565b600054610100900460ff16158015610cae576000805460ff1961ff00199091166101001716600117905580156109b3576000805461ff001916905550565b600054610100900460ff1680611fac5750611fac611897565b80611fba575060005460ff16155b611fd65760405162461bcd60e51b815260040161049d90613241565b600054610100900460ff16158015612001576000805460ff1961ff0019909116610100171660011790555b600061200b611827565b606580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156109b3576000805461ff001916905550565b600054610100900460ff16806120865750612086611897565b80612094575060005460ff16155b6120b05760405162461bcd60e51b815260040161049d90613241565b600054610100900460ff161580156120db576000805460ff1961ff0019909116610100171660011790555b6097805460ff1916905580156109b3576000805461ff001916905550565b6000818361211a5760405162461bcd60e51b815260040161049d9190612bc7565b50600083858161212657fe5b0495945050505050565b60606115fb848460008585612144856121da565b6121605760405162461bcd60e51b815260040161049d906132fe565b60006060866001600160a01b0316858760405161217d9190612a8f565b60006040518083038185875af1925050503d80600081146121ba576040519150601f19603f3d011682016040523d82523d6000602084013e6121bf565b606091505b50915091506121cf8282866121e0565b979650505050505050565b3b151590565b606083156121ef575081610ece565b8251156121ff5782518084602001fd5b8160405162461bcd60e51b815260040161049d9190612bc7565b803561164881613494565b600082601f830112612234578081fd5b813561224761224282613449565b613423565b81815291506020808301908481018184028601820187101561226857600080fd5b60005b8481101561229057813561227e81613494565b8452928201929082019060010161226b565b505050505092915050565b600082601f8301126122ab578081fd5b81356122b961224282613449565b818152915060208083019084810160005b84811015612290576122e1888484358a010161246d565b845292820192908201906001016122ca565b600082601f830112612303578081fd5b813561231161224282613449565b818152915060208083019084810160005b84811015612290578135870188603f82011261233d57600080fd5b8381013561234d61224282613449565b818152858101906040848101888502860182018e101561236c57600080fd5b600095505b8486101561239b5780359150612386826134b7565b81845260019590950194928801928801612371565b505087525050509282019290820190600101612322565b600082601f8301126123c2578081fd5b81356123d061224282613449565b818152915060208083019084810160005b84811015612290578135870188603f8201126123fc57600080fd5b8381013561240c61224282613449565b818152858101906040848101888502860182018e101561242b57600080fd5b600095505b84861015612456576124428e826124cb565b845260019590950194928801928801612430565b5050875250505092820192908201906001016123e1565b600082601f83011261247d578081fd5b813561248b61224282613449565b8181529150602080830190848101818402860182018710156124ac57600080fd5b60005b84811015612290578135845292820192908201906001016124af565b80356001600160401b038116811461164857600080fd5b6000602082840312156124f3578081fd5b813561164581613494565b60008060408385031215612510578081fd5b823561251b81613494565b9150602083013561252b816134a9565b809150509250929050565b6000806000806080858703121561254b578182fd5b843561255681613494565b93506020850135925060408501356001600160401b03811115612577578283fd5b6125838782880161246d565b925050606085013561259481613494565b939692955090935050565b600080600080608085870312156125b4578384fd5b84356001600160401b03808211156125ca578586fd5b6125d68883890161229b565b955060208701359150808211156125eb578485fd5b506125f887828801612224565b935050604085013561260981613494565b9150606085013561259481613494565b60008060006060848603121561262d578081fd5b83356001600160401b0380821115612643578283fd5b61264f878388016123b2565b94506020860135915080821115612664578283fd5b612670878388016122f3565b93506040860135915080821115612685578283fd5b5061269286828701612224565b9150509250925092565b6000602082840312156126ad578081fd5b81356001600160401b038111156126c2578182fd5b6115fb8482850161246d565b6000806000606084860312156126e2578081fd5b83356001600160401b038111156126f7578182fd5b6127038682870161246d565b935050602084013561271481613494565b9150604084013561272481613494565b809150509250925092565b60008060008060808587031215612744578182fd5b84356001600160401b038082111561275a578384fd5b6127668883890161246d565b9550602091508187013561277981613494565b945060408701358181111561278c578485fd5b61279889828a01612224565b9450506060870135818111156127ac578384fd5b87019050601f810188136127be578283fd5b80356127cc61224282613449565b81815283810190838501858402850186018c10156127e8578687fd5b8694505b8385101561280a5780358352600194909401939185019185016127ec565b50979a9699509497505050505050565b60008060008060008060008060006101208a8c031215612838578687fd5b89356001600160401b038082111561284e578889fd5b61285a8d838e0161246d565b9a506128698d60208e01612219565b99506128788d60408e016124cb565b98506128878d60608e016124cb565b97506128968d60808e01612219565b965060a08c0135955060c08c01359150808211156128b2578485fd5b6128be8d838e0161229b565b945060e08c01359150808211156128d3578384fd5b506128e08c828d01612224565b9250506128f18b6101008c01612219565b90509295985092959850929598565b600060208284031215612911578081fd5b8151611645816134a9565b60006020828403121561292d578081fd5b81356001600160401b0381168114611645578182fd5b600080600080600060a0868803121561295a578283fd5b61296487876124cb565b945060208601356001600160401b038082111561297f578485fd5b61298b89838a016123b2565b955060408801359150808211156129a0578485fd5b6129ac89838a016122f3565b945060608801359150808211156129c1578283fd5b6129cd89838a01612224565b935060808801359150808211156129e2578283fd5b506129ef8882890161246d565b9150509295509295909350565b6000815180845260208085019450808401835b83811015612a2b57815187529582019590820190600101612a0f565b509495945050505050565b60006bffffffffffffffffffffffff19808660601b1683526014830185516020808801855b83811015612a7757815185529382019390820190600101612a5b565b5050505060609490941b168352505060140192915050565b60008251612aa1818460208701613468565b9190910192915050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039390931683526001600160401b039190911660208301526001600160801b0316604082015260600190565b60006020825261164560208301846129fc565b600060c08252612b5860c08301896129fc565b6001600160401b0397881660208401529590961660408201526001600160801b039390931660608401526001600160a01b0391909116608083015260a09091015292915050565b901515815260200190565b90815260200190565b6001600160401b0391909116815260200190565b6000602082528251806020840152612be6816040850160208701613468565b601f01601f19169190910160400192915050565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b6020808252602f908201527f53746f726167654d616e616765723a2042696c6c696e6720706572696f64206f60408201526e19880c081b9bdd08185b1b1bddd959608a1b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526039908201527f53746f726167654d616e616765723a206e6f7420706f737369626c6520746f2060408201527f696e746572616374207769746874207468697320746f6b656e00000000000000606082015260800190565b60208082526031908201527f53746f726167654d616e616765723a2042696c6c696e6720706572696f6420656040820152700f0c6cacac840dac2f05c40d8cadccee8d607b1b606082015260800190565b60208082526035908201527f53746f726167654d616e616765723a204f6666657220666f72207468697320506040820152741c9bdd9a59195c88191bd95cdb89dd08195e1a5cdd605a1b606082015260800190565b60208082526032908201527f53746f726167654d616e616765723a2041677265656d656e7420616c72656164604082015271792072616e206f7574206f662066756e647360701b606082015260800190565b60208082526021908201527f53746f726167654d616e616765723a20416d6f756e7420697320746f6f2062696040820152606760f81b606082015260800190565b60208082526023908201527f53746f726167654d616e616765723a204e6f7468696e6720746f20776974686460408201526272617760e81b606082015260800190565b60208082526049908201527f53746f726167654d616e616765723a2046756e6473206465706f73697465642060408201527f68617320746f20626520666f72206174206c65617374206f6e652062696c6c696060820152681b99c81c195c9a5bd960ba1b608082015260a00190565b6020808252602d908201527f53746f726167654d616e616765723a20496e73756666696369656e74204f666660408201526c6572277320636170616369747960981b606082015260800190565b6020808252602c908201527f53746f726167654d616e616765723a2053697a652068617320746f206265206260408201526b06967676572207468656e20360a41b606082015260800190565b6020808252602b908201527f53746f726167654d616e616765723a205072696365206e6f7420617661696c6160408201526a626c6520616e796d6f726560a81b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526036908201527f53746f726167654d616e616765723a2041677265656d656e7420666f722074686040820152751a5cc813d999995c88191bd95cdb89dd08195e1a5cdd60521b606082015260800190565b60208082526028908201527f53746f726167654d616e616765723a20546f6b656e206973206e6f74207768696040820152671d195b1a5cdd195960c21b606082015260800190565b6020808252602b908201527f53746f726167654d616e616765723a2070726f7669646572206973206e6f742060408201526a1dda1a5d195b1a5cdd195960aa1b606082015260800190565b60208082526024908201527f53746f726167654d616e616765723a2041677265656d656e74206e6f742061636040820152637469766560e01b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526034908201527f53746f726167654d616e616765723a2043617061636974792068617320746f2060408201527362652067726561746572207468656e207a65726f60601b606082015260800190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526025908201527f53746f726167654d616e616765723a2041677265656d656e7420697320696e61604082015264637469766560d81b606082015260800190565b60208082526010908201526f2a3930b739b332b9103330b4b632b21760811b604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526035908201527f53746f726167654d616e616765723a2042696c6c696e6720707269636520646f60408201527432b9b713ba1032bc34b9ba103337b91027b33332b960591b606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252818101527f53746f726167654d616e616765723a205472616e73666572206661696c65642e604082015260600190565b6001600160401b0392831681529116602082015260400190565b6040518181016001600160401b038111828210171561344157600080fd5b604052919050565b60006001600160401b0382111561345e578081fd5b5060209081020190565b60005b8381101561348357818101518382015260200161346b565b838111156117365750506000910152565b6001600160a01b03811681146109b357600080fd5b80151581146109b357600080fd5b6001600160801b03811681146109b357600080fdfea2646970667358221220b8e0dd0c372190abfa95b28dbd93aa6b5cb23cf75643e3a872771dda203bb14464736f6c634300060c0033",
  "deployedBytecode": "0x6080604052600436106101405760003560e01c80638456cb59116100b6578063bf317abb1161006f578063bf317abb1461033e578063d245599e1461036b578063dc4aac9e1461037e578063ec5cdf991461039e578063f2fde38b146103be578063f650ca74146103de57610140565b80638456cb59146102845780638da5cb5b146102995780638f5c5fc8146102bb5780639aad18ca146102e9578063ab37f48614610309578063b58596931461032957610140565b8063398887051161010857806339888705146101da5780633f4ba83a146101fa5780635c975abb1461020f578063715018a61461023a5780638129fc1c1461024f57806382c4dba51461026457610140565b80631f3477a5146101455780632691c085146101675780632fd09ef91461017a578063325b29411461019a57806337f4329d146101ba575b600080fd5b34801561015157600080fd5b5061016561016036600461272f565b6103fe565b005b610165610175366004612536565b6106ad565b34801561018657600080fd5b5061016561019536600461269c565b6109aa565b3480156101a657600080fd5b506101656101b5366004612619565b6109b6565b3480156101c657600080fd5b506101656101d5366004612943565b610a58565b3480156101e657600080fd5b506101656101f53660046124fe565b610ae7565b34801561020657600080fd5b50610165610b47565b34801561021b57600080fd5b50610224610ba8565b6040516102319190612b9f565b60405180910390f35b34801561024657600080fd5b50610165610bb1565b34801561025b57600080fd5b50610165610c30565b34801561027057600080fd5b5061016561027f3660046124fe565b610cc2565b34801561029057600080fd5b50610165610d22565b3480156102a557600080fd5b506102ae610d82565b6040516102319190612aae565b3480156102c757600080fd5b506102db6102d63660046124e2565b610d91565b604051610231929190613409565b3480156102f557600080fd5b506102246103043660046124e2565b610db7565b34801561031557600080fd5b506102246103243660046124e2565b610dcc565b34801561033557600080fd5b50610165610de1565b34801561034a57600080fd5b5061035e6103593660046126ce565b610e9e565b6040516102319190612baa565b61016561037936600461281a565b610ed5565b34801561038a57600080fd5b5061016561039936600461259f565b611349565b3480156103aa57600080fd5b506102246103b93660046124e2565b61138f565b3480156103ca57600080fd5b506101656103d93660046124e2565b6113b5565b3480156103ea57600080fd5b506101656103f936600461291c565b61146c565b6001600160a01b038316600090815260c960205260408120905b83518110156106a557600083828151811061042f57fe5b60200260200101519050600085838151811061044757fe5b60200260200101519050600061045e893384610e9e565b60008181526002808801602052604090912090810154919250906001600160401b03166104a65760405162461bcd60e51b815260040161049d9061304a565b60405180910390fd5b6002810154600090600160401b90046001600160801b03166104cd57506001810154610554565b600282015482546040805160a0810182526001600160801b03808416808352600160801b9094046001600160401b03908116602084015260018801549383019390935291841660608201819052600160401b909404821660808201526105519392909202169061054b9061054090611557565b600186015490611603565b90611603565b90505b8461055d578094505b8085111561057d5760405162461bcd60e51b815260040161049d90612e49565b600182015461058c9086611603565b6001830155846105ae5760405162461bcd60e51b815260040161049d90612e8a565b6105b78461164e565b1561063e576000336001600160a01b0316866040516105d590612aab565b60006040518083038185875af1925050503d8060008114610612576040519150601f19603f3d011682016040523d82523d6000602084013e610617565b606091505b50509050806106385760405162461bcd60e51b815260040161049d906132d4565b50610652565b6106526001600160a01b038516338761165b565b836001600160a01b0316837f579b45b1ee6c41a979ca183763f8a18021bb54fcd590cf1be2821e4abe31fd8e8760405161068c9190612baa565b60405180910390a3505060019093019250610418915050565b505050505050565b60975460ff16156106d05760405162461bcd60e51b815260040161049d90613020565b6001600160a01b038116600090815260cb6020526040902054819060ff1661070a5760405162461bcd60e51b815260040161049d906130e8565b6000610717843388610e9e565b6001600160a01b038716600090815260ca602052604090205490915060ff166107525760405162461bcd60e51b815260040161049d906130a0565b6001600160a01b038316600090815260c9602052604090208054600160401b90046001600160401b03166107985760405162461bcd60e51b815260040161049d90612da2565b600082815260028083016020526040909120908101546001600160401b03166107d35760405162461bcd60e51b815260040161049d9061304a565b6002810154600160401b90046001600160801b03166108045760405162461bcd60e51b815260040161049d90613133565b80546001600160a01b038916600090815260018401602090815260408083206001600160401b03600160801b86041684529091529020546001600160801b039081169116146108655760405162461bcd60e51b815260040161049d90612fd5565b6002810154815461088a916001600160801b03909116906001600160401b03166116b6565b6040805160a08101825283546001600160801b0380821683526001600160401b03600160801b9092048216602084015260018601549383019390935260028501549081166060830152600160401b900490911660808201526108fa906108ef90611557565b600184015490611603565b10156109185760405162461bcd60e51b815260040161049d90612df7565b60006109238961164e565b9050801561092f573497505b600182015461093e90896116f0565b60018301558061095d5761095d6001600160a01b038a1633308b611715565b886001600160a01b0316847f5ac5c9c49f143d64d36d4eb69c1624c8670cb426b3f952830187c279a51009cc8a6040516109979190612baa565b60405180910390a3505050505050505050565b6109b38161173c565b50565b60975460ff16156109d95760405162461bcd60e51b815260040161049d90613020565b33600081815260cb602052604090205460ff16610a085760405162461bcd60e51b815260040161049d906130e8565b33600090815260c9602052604090208054600160401b90046001600160401b0316610a455760405162461bcd60e51b815260040161049d90612da2565b610a5181868686611780565b5050505050565b60975460ff1615610a7b5760405162461bcd60e51b815260040161049d90613020565b33600081815260cb602052604090205460ff16610aaa5760405162461bcd60e51b815260040161049d906130e8565b33600090815260c960205260409020610ac28761146c565b610ace81878787611780565b825115610ade57610ade8361173c565b50505050505050565b610aef611827565b6065546001600160a01b03908116911614610b1c5760405162461bcd60e51b815260040161049d906131b8565b6001600160a01b0391909116600090815260ca60205260409020805460ff1916911515919091179055565b610b4f611827565b6065546001600160a01b03908116911614610b7c5760405162461bcd60e51b815260040161049d906131b8565b60975460ff16610b9e5760405162461bcd60e51b815260040161049d90612bfa565b610ba661182b565b565b60975460ff1690565b610bb9611827565b6065546001600160a01b03908116911614610be65760405162461bcd60e51b815260040161049d906131b8565b6065546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3606580546001600160a01b0319169055565b600054610100900460ff1680610c495750610c49611897565b80610c57575060005460ff16155b610c735760405162461bcd60e51b815260040161049d90613241565b600054610100900460ff16158015610c9e576000805460ff1961ff0019909116610100171660011790555b610ca661189d565b610cae61191b565b80156109b3576000805461ff001916905550565b610cca611827565b6065546001600160a01b03908116911614610cf75760405162461bcd60e51b815260040161049d906131b8565b6001600160a01b0391909116600090815260cb60205260409020805460ff1916911515919091179055565b610d2a611827565b6065546001600160a01b03908116911614610d575760405162461bcd60e51b815260040161049d906131b8565b60975460ff1615610d7a5760405162461bcd60e51b815260040161049d90613020565b610ba6611999565b6065546001600160a01b031690565b60c9602052600090815260409020546001600160401b0380821691600160401b90041682565b60cb6020526000908152604090205460ff1681565b60ca6020526000908152604090205460ff1681565b33600081815260cb602052604090205460ff16610e105760405162461bcd60e51b815260040161049d906130e8565b33600090815260c9602052604090208054600160401b90046001600160401b0316610e4d5760405162461bcd60e51b815260040161049d90612da2565b805467ffffffffffffffff60401b1916815560405133907f7267987f11d91dd9b618677a5f4e5596eca75f9e97d880452c73c2dbd8ebfae390610e9290600090612bb3565b60405180910390a25050565b6000828483604051602001610eb593929190612a36565b6040516020818303038152906040528051906020012090505b9392505050565b60975460ff1615610ef85760405162461bcd60e51b815260040161049d90613020565b6001600160a01b038816600090815260cb602052604090205460ff16610f305760405162461bcd60e51b815260040161049d906130e8565b6001600160a01b038816600090815260c9602052604090206001600160401b038716610f6e5760405162461bcd60e51b815260040161049d90612c28565b6000886001600160401b031611610f975760405162461bcd60e51b815260040161049d90612f89565b8054600160401b90046001600160401b0316610fc55760405162461bcd60e51b815260040161049d90612da2565b6001600160a01b038616600090815260ca602052604090205460ff16610ffd5760405162461bcd60e51b815260040161049d90612cf4565b835115611010576110108484848c6119f2565b600061101d8b3389610e9e565b6000818152600284810160205260409091200154909150600160401b90046001600160801b0316156110f057604080516001808252818301909252606091816020015b606081526020019060019003908161106057505060408051600180825281830190925291925060609190602080830190803683370190505090508c826000815181106110a857fe5b602002602001018190525033816000815181106110c157fe5b60200260200101906001600160a01b031690816001600160a01b0316815250506110ed82828b8f6119f2565b50505b6001600160a01b038716600090815260018301602090815260408083206001600160401b038c1684529091529020546001600160801b0316806111455760405162461bcd60e51b815260040161049d90613335565b6000828152600284016020526040902061115e8961164e565b15611167573497505b600181015461117690896116f0565b60018201556111976001600160401b038c166001600160801b0384166116b6565b816001015410156111ba5760405162461bcd60e51b815260040161049d90612ecd565b60028101805467ffffffffffffffff19166001600160401b038d81169190911790915581546001600160801b0319166001600160801b0384161767ffffffffffffffff60801b1916600160801b918c1691909102178155611219611d22565b6002820180546001600160801b0392909216600160401b02600160401b600160c01b03199092169190911790556001600160a01b038c16600090815260c960205260409020805490945061127a906001600160401b03908116908d166116f0565b845467ffffffffffffffff19166001600160401b0391821617808655600160401b81048216911611156112bf5760405162461bcd60e51b815260040161049d90612f3c565b6112c88961164e565b6112e1576112e16001600160a01b038a1633308b611715565b8b6001600160a01b0316336001600160a01b03167f8c1ead7cd014d31bcde974cc4762a98cce33de4fbda569fbcc73f8f276212fff8f8e8e878f886001015460405161133296959493929190612b45565b60405180910390a350505050505050505050505050565b6001600160a01b038116600090815260cb6020526040902054819060ff166113835760405162461bcd60e51b815260040161049d906130e8565b610a51858585856119f2565b6001600160a01b0316600090815260c960205260409020546001600160401b0316151590565b6113bd611827565b6065546001600160a01b039081169116146113ea5760405162461bcd60e51b815260040161049d906131b8565b6001600160a01b0381166114105760405162461bcd60e51b815260040161049d90612c77565b6065546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3606580546001600160a01b0319166001600160a01b0392909216919091179055565b60975460ff161561148f5760405162461bcd60e51b815260040161049d90613020565b33600081815260cb602052604090205460ff166114be5760405162461bcd60e51b815260040161049d906130e8565b6001600160401b0382166114e45760405162461bcd60e51b815260040161049d906131ed565b33600081815260c9602052604090819020805467ffffffffffffffff60401b1916600160401b6001600160401b0387160217815590519091907f7267987f11d91dd9b618677a5f4e5596eca75f9e97d880452c73c2dbd8ebfae39061154a908690612bb3565b60405180910390a2505050565b60008061158783600001516001600160801b031684606001516001600160401b03166116b690919063ffffffff16565b905060006115bb84602001516001600160401b03166115b586608001516001600160801b031661054b611d22565b90611d26565b905060006115c982846116b6565b905084604001518111156115fb576115f8836115f2858860400151611d2690919063ffffffff16565b906116b6565b90505b949350505050565b600061164583836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250611d68565b90505b92915050565b6001600160a01b03161590565b6116b18363a9059cbb60e01b848460405160240161167a929190612ae6565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152611d94565b505050565b6000826116c557506000611648565b828202828482816116d257fe5b04146116455760405162461bcd60e51b815260040161049d90613177565b6000828201838110156116455760405162461bcd60e51b815260040161049d90612cbd565b611736846323b872dd60e01b85858560405160240161167a93929190612ac2565b50505050565b336001600160a01b03167f8e9ae80d46259102dfbf4ae6121dbe6548e85c8c0494163e8e0bf0e87bcd5876826040516117759190612b32565b60405180910390a250565b60005b8151811015610a515760005b84828151811061179b57fe5b60200260200101515181101561181e57611816868484815181106117bb57fe5b60200260200101518785815181106117cf57fe5b602002602001015184815181106117e257fe5b60200260200101518786815181106117f657fe5b6020026020010151858151811061180957fe5b6020026020010151611e23565b60010161178f565b50600101611783565b3390565b60975460ff1661184d5760405162461bcd60e51b815260040161049d90612bfa565b6097805460ff191690557f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611880611827565b60405161188d9190612aae565b60405180910390a1565b303b1590565b600054610100900460ff16806118b657506118b6611897565b806118c4575060005460ff16155b6118e05760405162461bcd60e51b815260040161049d90613241565b600054610100900460ff1615801561190b576000805460ff1961ff0019909116610100171660011790555b611913611f12565b610cae611f93565b600054610100900460ff16806119345750611934611897565b80611942575060005460ff16155b61195e5760405162461bcd60e51b815260040161049d90613241565b600054610100900460ff16158015611989576000805460ff1961ff0019909116610100171660011790555b611991611f12565b610cae61206d565b60975460ff16156119bc5760405162461bcd60e51b815260040161049d90613020565b6097805460ff191660011790557f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611880611827565b6001600160a01b038116600090815260c96020526040812090805b86518160ff161015611c77576000611a52888360ff1681518110611a2d57fe5b6020026020010151888460ff1681518110611a4457fe5b602002602001015188610e9e565b60008181526002808701602052604090912090810154919250906001600160401b0316611a915760405162461bcd60e51b815260040161049d9061304a565b6002810154600160401b90046001600160801b0316611ac25760405162461bcd60e51b815260040161049d9061328f565b6040805160a08101825282546001600160801b0380821683526001600160401b03600160801b9092048216602084015260018501549383019390935260028401549081166060830152600160401b90049091166080820152600090611b2690611557565b90508015611c6c576001820154611b3d9082611603565b6001830155611b4c85826116f0565b60028301548354919650611b72916001600160801b0316906001600160401b03166116b6565b82600101541015611bf857600282018054600160401b600160c01b031981169091558654611bac916001600160401b039182169116611603565b865467ffffffffffffffff19166001600160401b039190911617865560405183907f28b8eb5ccfb9c485b6ee9be3b0153679351f87ca0753786218a455bc3bbe5fdf90600090a2611c29565b611c00611d22565b8260020160086101000a8154816001600160801b0302191690836001600160801b031602179055505b876001600160a01b0316837f14f0f588a0fd7eb2bc9954bd5b8b1ff7006d486ac28b7541bc966bf102b9756183604051611c639190612baa565b60405180910390a35b505050600101611a0d565b5080156106a557611c878461164e565b15611d0e576000836001600160a01b031682604051611ca590612aab565b60006040518083038185875af1925050503d8060008114611ce2576040519150601f19603f3d011682016040523d82523d6000602084013e611ce7565b606091505b5050905080611d085760405162461bcd60e51b815260040161049d906133d4565b506106a5565b6106a56001600160a01b038516848361165b565b4290565b600061164583836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506120f9565b60008184841115611d8c5760405162461bcd60e51b815260040161049d9190612bc7565b505050900390565b6060611de9826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166121309092919063ffffffff16565b8051909150156116b15780806020019051810190611e079190612900565b6116b15760405162461bcd60e51b815260040161049d9061338a565b62ed4e006001600160401b0383161115611e4f5760405162461bcd60e51b815260040161049d90612d51565b6001600160a01b038316600090815260ca602052604090205460ff16611e875760405162461bcd60e51b815260040161049d906130a0565b6001600160a01b038316600090815260018501602090815260408083206001600160401b03861684529091529081902080546001600160801b0319166001600160801b0384161790555133907f7eec1797ef3c639736e76e7f22565caf759bb674dab35235349e6879d0a2c14890611f0490869086908690612aff565b60405180910390a250505050565b600054610100900460ff1680611f2b5750611f2b611897565b80611f39575060005460ff16155b611f555760405162461bcd60e51b815260040161049d90613241565b600054610100900460ff16158015610cae576000805460ff1961ff00199091166101001716600117905580156109b3576000805461ff001916905550565b600054610100900460ff1680611fac5750611fac611897565b80611fba575060005460ff16155b611fd65760405162461bcd60e51b815260040161049d90613241565b600054610100900460ff16158015612001576000805460ff1961ff0019909116610100171660011790555b600061200b611827565b606580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a35080156109b3576000805461ff001916905550565b600054610100900460ff16806120865750612086611897565b80612094575060005460ff16155b6120b05760405162461bcd60e51b815260040161049d90613241565b600054610100900460ff161580156120db576000805460ff1961ff0019909116610100171660011790555b6097805460ff1916905580156109b3576000805461ff001916905550565b6000818361211a5760405162461bcd60e51b815260040161049d9190612bc7565b50600083858161212657fe5b0495945050505050565b60606115fb848460008585612144856121da565b6121605760405162461bcd60e51b815260040161049d906132fe565b60006060866001600160a01b0316858760405161217d9190612a8f565b60006040518083038185875af1925050503d80600081146121ba576040519150601f19603f3d011682016040523d82523d6000602084013e6121bf565b606091505b50915091506121cf8282866121e0565b979650505050505050565b3b151590565b606083156121ef575081610ece565b8251156121ff5782518084602001fd5b8160405162461bcd60e51b815260040161049d9190612bc7565b803561164881613494565b600082601f830112612234578081fd5b813561224761224282613449565b613423565b81815291506020808301908481018184028601820187101561226857600080fd5b60005b8481101561229057813561227e81613494565b8452928201929082019060010161226b565b505050505092915050565b600082601f8301126122ab578081fd5b81356122b961224282613449565b818152915060208083019084810160005b84811015612290576122e1888484358a010161246d565b845292820192908201906001016122ca565b600082601f830112612303578081fd5b813561231161224282613449565b818152915060208083019084810160005b84811015612290578135870188603f82011261233d57600080fd5b8381013561234d61224282613449565b818152858101906040848101888502860182018e101561236c57600080fd5b600095505b8486101561239b5780359150612386826134b7565b81845260019590950194928801928801612371565b505087525050509282019290820190600101612322565b600082601f8301126123c2578081fd5b81356123d061224282613449565b818152915060208083019084810160005b84811015612290578135870188603f8201126123fc57600080fd5b8381013561240c61224282613449565b818152858101906040848101888502860182018e101561242b57600080fd5b600095505b84861015612456576124428e826124cb565b845260019590950194928801928801612430565b5050875250505092820192908201906001016123e1565b600082601f83011261247d578081fd5b813561248b61224282613449565b8181529150602080830190848101818402860182018710156124ac57600080fd5b60005b84811015612290578135845292820192908201906001016124af565b80356001600160401b038116811461164857600080fd5b6000602082840312156124f3578081fd5b813561164581613494565b60008060408385031215612510578081fd5b823561251b81613494565b9150602083013561252b816134a9565b809150509250929050565b6000806000806080858703121561254b578182fd5b843561255681613494565b93506020850135925060408501356001600160401b03811115612577578283fd5b6125838782880161246d565b925050606085013561259481613494565b939692955090935050565b600080600080608085870312156125b4578384fd5b84356001600160401b03808211156125ca578586fd5b6125d68883890161229b565b955060208701359150808211156125eb578485fd5b506125f887828801612224565b935050604085013561260981613494565b9150606085013561259481613494565b60008060006060848603121561262d578081fd5b83356001600160401b0380821115612643578283fd5b61264f878388016123b2565b94506020860135915080821115612664578283fd5b612670878388016122f3565b93506040860135915080821115612685578283fd5b5061269286828701612224565b9150509250925092565b6000602082840312156126ad578081fd5b81356001600160401b038111156126c2578182fd5b6115fb8482850161246d565b6000806000606084860312156126e2578081fd5b83356001600160401b038111156126f7578182fd5b6127038682870161246d565b935050602084013561271481613494565b9150604084013561272481613494565b809150509250925092565b60008060008060808587031215612744578182fd5b84356001600160401b038082111561275a578384fd5b6127668883890161246d565b9550602091508187013561277981613494565b945060408701358181111561278c578485fd5b61279889828a01612224565b9450506060870135818111156127ac578384fd5b87019050601f810188136127be578283fd5b80356127cc61224282613449565b81815283810190838501858402850186018c10156127e8578687fd5b8694505b8385101561280a5780358352600194909401939185019185016127ec565b50979a9699509497505050505050565b60008060008060008060008060006101208a8c031215612838578687fd5b89356001600160401b038082111561284e578889fd5b61285a8d838e0161246d565b9a506128698d60208e01612219565b99506128788d60408e016124cb565b98506128878d60608e016124cb565b97506128968d60808e01612219565b965060a08c0135955060c08c01359150808211156128b2578485fd5b6128be8d838e0161229b565b945060e08c01359150808211156128d3578384fd5b506128e08c828d01612224565b9250506128f18b6101008c01612219565b90509295985092959850929598565b600060208284031215612911578081fd5b8151611645816134a9565b60006020828403121561292d578081fd5b81356001600160401b0381168114611645578182fd5b600080600080600060a0868803121561295a578283fd5b61296487876124cb565b945060208601356001600160401b038082111561297f578485fd5b61298b89838a016123b2565b955060408801359150808211156129a0578485fd5b6129ac89838a016122f3565b945060608801359150808211156129c1578283fd5b6129cd89838a01612224565b935060808801359150808211156129e2578283fd5b506129ef8882890161246d565b9150509295509295909350565b6000815180845260208085019450808401835b83811015612a2b57815187529582019590820190600101612a0f565b509495945050505050565b60006bffffffffffffffffffffffff19808660601b1683526014830185516020808801855b83811015612a7757815185529382019390820190600101612a5b565b5050505060609490941b168352505060140192915050565b60008251612aa1818460208701613468565b9190910192915050565b90565b6001600160a01b0391909116815260200190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b6001600160a01b03929092168252602082015260400190565b6001600160a01b039390931683526001600160401b039190911660208301526001600160801b0316604082015260600190565b60006020825261164560208301846129fc565b600060c08252612b5860c08301896129fc565b6001600160401b0397881660208401529590961660408201526001600160801b039390931660608401526001600160a01b0391909116608083015260a09091015292915050565b901515815260200190565b90815260200190565b6001600160401b0391909116815260200190565b6000602082528251806020840152612be6816040850160208701613468565b601f01601f19169190910160400192915050565b60208082526014908201527314185d5cd8589b194e881b9bdd081c185d5cd95960621b604082015260600190565b6020808252602f908201527f53746f726167654d616e616765723a2042696c6c696e6720706572696f64206f60408201526e19880c081b9bdd08185b1b1bddd959608a1b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252601b908201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604082015260600190565b60208082526039908201527f53746f726167654d616e616765723a206e6f7420706f737369626c6520746f2060408201527f696e746572616374207769746874207468697320746f6b656e00000000000000606082015260800190565b60208082526031908201527f53746f726167654d616e616765723a2042696c6c696e6720706572696f6420656040820152700f0c6cacac840dac2f05c40d8cadccee8d607b1b606082015260800190565b60208082526035908201527f53746f726167654d616e616765723a204f6666657220666f72207468697320506040820152741c9bdd9a59195c88191bd95cdb89dd08195e1a5cdd605a1b606082015260800190565b60208082526032908201527f53746f726167654d616e616765723a2041677265656d656e7420616c72656164604082015271792072616e206f7574206f662066756e647360701b606082015260800190565b60208082526021908201527f53746f726167654d616e616765723a20416d6f756e7420697320746f6f2062696040820152606760f81b606082015260800190565b60208082526023908201527f53746f726167654d616e616765723a204e6f7468696e6720746f20776974686460408201526272617760e81b606082015260800190565b60208082526049908201527f53746f726167654d616e616765723a2046756e6473206465706f73697465642060408201527f68617320746f20626520666f72206174206c65617374206f6e652062696c6c696060820152681b99c81c195c9a5bd960ba1b608082015260a00190565b6020808252602d908201527f53746f726167654d616e616765723a20496e73756666696369656e74204f666660408201526c6572277320636170616369747960981b606082015260800190565b6020808252602c908201527f53746f726167654d616e616765723a2053697a652068617320746f206265206260408201526b06967676572207468656e20360a41b606082015260800190565b6020808252602b908201527f53746f726167654d616e616765723a205072696365206e6f7420617661696c6160408201526a626c6520616e796d6f726560a81b606082015260800190565b60208082526010908201526f14185d5cd8589b194e881c185d5cd95960821b604082015260600190565b60208082526036908201527f53746f726167654d616e616765723a2041677265656d656e7420666f722074686040820152751a5cc813d999995c88191bd95cdb89dd08195e1a5cdd60521b606082015260800190565b60208082526028908201527f53746f726167654d616e616765723a20546f6b656e206973206e6f74207768696040820152671d195b1a5cdd195960c21b606082015260800190565b6020808252602b908201527f53746f726167654d616e616765723a2070726f7669646572206973206e6f742060408201526a1dda1a5d195b1a5cdd195960aa1b606082015260800190565b60208082526024908201527f53746f726167654d616e616765723a2041677265656d656e74206e6f742061636040820152637469766560e01b606082015260800190565b60208082526021908201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6040820152607760f81b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526034908201527f53746f726167654d616e616765723a2043617061636974792068617320746f2060408201527362652067726561746572207468656e207a65726f60601b606082015260800190565b6020808252602e908201527f436f6e747261637420696e7374616e63652068617320616c726561647920626560408201526d195b881a5b9a5d1a585b1a5e995960921b606082015260800190565b60208082526025908201527f53746f726167654d616e616765723a2041677265656d656e7420697320696e61604082015264637469766560d81b606082015260800190565b60208082526010908201526f2a3930b739b332b9103330b4b632b21760811b604082015260600190565b6020808252601d908201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604082015260600190565b60208082526035908201527f53746f726167654d616e616765723a2042696c6c696e6720707269636520646f60408201527432b9b713ba1032bc34b9ba103337b91027b33332b960591b606082015260800190565b6020808252602a908201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6040820152691bdd081cdd58d8d9595960b21b606082015260800190565b6020808252818101527f53746f726167654d616e616765723a205472616e73666572206661696c65642e604082015260600190565b6001600160401b0392831681529116602082015260400190565b6040518181016001600160401b038111828210171561344157600080fd5b604052919050565b60006001600160401b0382111561345e578081fd5b5060209081020190565b60005b8381101561348357818101518382015260200161346b565b838111156117365750506000910152565b6001600160a01b03811681146109b357600080fd5b80151581146109b357600080fd5b6001600160801b03811681146109b357600080fdfea2646970667358221220b8e0dd0c372190abfa95b28dbd93aa6b5cb23cf75643e3a872771dda203bb14464736f6c634300060c0033",
  "immutableReferences": {},
  "sourceMap": "647:29125:2:-:0;;;;;;;;;;;;;;;;;;;",
  "deployedSourceMap": "647:29125:2:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19283:1931;;;;;;;;;;-1:-1:-1;19283:1931:2;;;;;:::i;:::-;;:::i;:::-;;16849:1649;;;;;;:::i;:::-;;:::i;9831:92::-;;;;;;;;;;-1:-1:-1;9831:92:2;;;;;:::i;:::-;;:::i;9138:455::-;;;;;;;;;;-1:-1:-1;9138:455:2;;;;;:::i;:::-;;:::i;6343:522::-;;;;;;;;;;-1:-1:-1;6343:522:2;;;;;:::i;:::-;;:::i;3947:140::-;;;;;;;;;;-1:-1:-1;3947:140:2;;;;;:::i;:::-;;:::i;26959:74::-;;;;;;;;;;;;;:::i;1248:76:9:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1894:145:8;;;;;;;;;;;;;:::i;3596:101:2:-;;;;;;;;;;;;;:::i;4366:165::-;;;;;;;;;;-1:-1:-1;4366:165:2;;;;;:::i;:::-;;:::i;26796:73::-;;;;;;;;;;;;;:::i;1271:77:8:-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;2326:46:2:-;;;;;;;;;;-1:-1:-1;2326:46:2;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;2629:53::-;;;;;;;;;;-1:-1:-1;2629:53:2;;;;;:::i;:::-;;:::i;2495:50::-;;;;;;;;;;-1:-1:-1;2495:50:2;;;;;:::i;:::-;;:::i;7628:308::-;;;;;;;;;;;;;:::i;27640:237::-;;;;;;;;;;-1:-1:-1;27640:237:2;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11869:4319::-;;;;;;:::i;:::-;;:::i;21915:447::-;;;;;;;;;;-1:-1:-1;21915:447:2;;;;;:::i;:::-;;:::i;24124:141::-;;;;;;;;;;-1:-1:-1;24124:141:2;;;;;:::i;:::-;;:::i;2188:240:8:-;;;;;;;;;;-1:-1:-1;2188:240:8;;;;;:::i;:::-;;:::i;6985:341:2:-;;;;;;;;;;-1:-1:-1;6985:341:2;;;;;:::i;:::-;;:::i;19283:1931::-;-1:-1:-1;;;;;19484:23:2;;19462:19;19484:23;;;:13;:23;;;;;;19517:1691;19537:6;:13;19533:1;:17;19517:1691;;;19571:14;19588:7;19596:1;19588:10;;;;;;;;;;;;;;19571:27;;19612:13;19628:6;19635:1;19628:9;;;;;;;;;;;;;;19612:25;;19651:26;19680:55;19702:13;19717:10;19729:5;19680:21;:55::i;:::-;19749:27;19779:43;;;:23;;;;:43;;;;;;19844:14;;;;19651:84;;-1:-1:-1;19779:43:2;-1:-1:-1;;;;;19844:14:2;19836:86;;;;-1:-1:-1;;;19836:86:2;;;;;;;:::i;:::-;;;;;;;;;19982:24;;;;19936:28;;-1:-1:-1;;;19982:24:2;;-1:-1:-1;;;;;19982:24:2;19978:545;;-1:-1:-1;20128:24:2;;;;19978:545;;;20475:14;;;;20450:22;;20391:31;;;;;;;;-1:-1:-1;;;;;20450:22:2;;;20391:31;;;-1:-1:-1;;;20391:31:2;;;-1:-1:-1;;;;;20391:31:2;;;;;;;20475:14;20391:31;;;;;;;;;;20475:14;;;20391:31;;;;;;-1:-1:-1;;;20391:31:2;;;;;;;;;20362:146;;20450:39;;;;20362:146;;:61;;20391:31;;:20;:31::i;:::-;20362:24;;;;;:28;:61::i;:::-;:65;;:146::i;:::-;20339:169;;19978:545;20541:11;20537:79;;20581:20;20572:29;;20537:79;20647:20;20637:6;:30;;20629:76;;;;-1:-1:-1;;;20629:76:2;;;;;;;:::i;:::-;20746:24;;;;:36;;20775:6;20746:28;:36::i;:::-;20719:24;;;:63;20804:10;20796:58;;;;-1:-1:-1;;;20796:58:2;;;;;;;:::i;:::-;20873:21;20888:5;20873:14;:21::i;:::-;20869:252;;;20915:12;20933:10;-1:-1:-1;;;;;20933:15:2;20956:6;20933:34;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20914:53;;;20993:7;20985:36;;;;-1:-1:-1;;;20985:36:2;;;;;;;:::i;:::-;20869:252;;;;21060:46;-1:-1:-1;;;;;21060:26:2;;21087:10;21099:6;21060:26;:46::i;:::-;21191:5;-1:-1:-1;;;;;21139:58:2;21163:18;21139:58;21183:6;21139:58;;;;;;:::i;:::-;;;;;;;;-1:-1:-1;;19552:3:2;;;;;-1:-1:-1;19517:1691:2;;-1:-1:-1;;19517:1691:2;;;19283:1931;;;;;:::o;16849:1649::-;1477:7:9;;;;1476:8;1468:37;;;;-1:-1:-1;;;1468:37:9;;;;;;;:::i;:::-;-1:-1:-1;;;;;29673:31:2;::::1;;::::0;;;:21:::1;:31;::::0;;;;;17039:8;;29673:31:::1;;29665:87;;;;-1:-1:-1::0;;;29665:87:2::1;;;;;;;:::i;:::-;17059:26:::2;17088:55;17110:13;17125:10;17137:5;17088:21;:55::i;:::-;-1:-1:-1::0;;;;;17161:25:2;::::2;;::::0;;;:18:::2;:25;::::0;;;;;17059:84;;-1:-1:-1;17161:25:2::2;;17153:78;;;;-1:-1:-1::0;;;17153:78:2::2;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;17263:23:2;::::2;17241:19;17263:23:::0;;;:13:::2;:23;::::0;;;;17304:19;;-1:-1:-1;;;17304:19:2;::::2;-1:-1:-1::0;;;;;17304:19:2::2;17296:90;;;;-1:-1:-1::0;;;17296:90:2::2;;;;;;;:::i;:::-;17396:27;17426:43:::0;;;:23:::2;::::0;;::::2;:43;::::0;;;;;17487:14;;::::2;::::0;-1:-1:-1;;;;;17487:14:2::2;17479:86;;;;-1:-1:-1::0;;;17479:86:2::2;;;;;;;:::i;:::-;17583:24;::::0;::::2;::::0;-1:-1:-1;;;17583:24:2;::::2;-1:-1:-1::0;;;;;17583:24:2::2;17575:78;;;;-1:-1:-1::0;;;17575:78:2::2;;;;;;;:::i;:::-;17746:22:::0;;-1:-1:-1;;;;;17684:33:2;::::2;17746:22;17684:33:::0;;;17746:22;17684:26;::::2;:33;::::0;;;;;;;-1:-1:-1;;;;;;;;17718:23:2;::::2;;17684:58:::0;;;;;;;;-1:-1:-1;;;;;17684:58:2;;::::2;17746:22:::0;::::2;17684:84;17663:174;;;;-1:-1:-1::0;;;17663:174:2::2;;;;;;;:::i;:::-;17960:14;::::0;::::2;::::0;17933:22;;:42:::2;::::0;-1:-1:-1;;;;;17933:22:2;;::::2;::::0;-1:-1:-1;;;;;17960:14:2::2;17933:26;:42::i;:::-;17897:31;::::0;;::::2;::::0;::::2;::::0;;;;-1:-1:-1;;;;;17897:31:2;;::::2;::::0;;-1:-1:-1;;;;;;;;17897:31:2;;::::2;::::0;::::2;;::::0;::::2;::::0;;;::::2;::::0;;;;;;;;::::2;::::0;::::2;::::0;;;::::2;::::0;;;;-1:-1:-1;;;17897:31:2;::::2;::::0;;::::2;::::0;;;;17868:61:::2;::::0;17897:31:::2;::::0;:20:::2;:31::i;:::-;17868:24;::::0;::::2;::::0;;:28:::2;:61::i;:::-;:107;;17847:204;;;;-1:-1:-1::0;;;17847:204:2::2;;;;;;;:::i;:::-;18061:18;18082:21;18097:5;18082:14;:21::i;:::-;18061:42;;18117:13;18113:62;;;18155:9;18146:18;;18113:62;18211:24;::::0;::::2;::::0;:36:::2;::::0;18240:6;18211:28:::2;:36::i;:::-;18184:24;::::0;::::2;:63:::0;18262:13;18257:162:::2;;18343:65;-1:-1:-1::0;;;;;18343:30:2;::::2;18374:10;18394:4;18401:6:::0;18343:30:::2;:65::i;:::-;18485:5;-1:-1:-1::0;;;;;18433:58:2::2;18457:18;18433:58;18477:6;18433:58;;;;;;:::i;:::-;;;;;;;;29762:1;;;;1515::9::1;16849:1649:2::0;;;;:::o;9831:92::-;9895:21;9908:7;9895:12;:21::i;:::-;9831:92;:::o;9138:455::-;1477:7:9;;;;1476:8;1468:37;;;;-1:-1:-1;;;1468:37:9;;;;;;;:::i;:::-;9327:10:2::1;29673:31;::::0;;;:21:::1;:31;::::0;;;;;::::1;;29665:87;;;;-1:-1:-1::0;;;29665:87:2::1;;;;;;;:::i;:::-;9385:10:::2;9349:19;9371:25:::0;;;:13:::2;:25;::::0;;;;9414:19;;-1:-1:-1;;;9414:19:2;::::2;-1:-1:-1::0;;;;;9414:19:2::2;9406:90;;;;-1:-1:-1::0;;;9406:90:2::2;;;;;;;:::i;:::-;9506:80;9541:5;9548:14;9564:13;9579:6;9506:34;:80::i;:::-;29762:1;1515::9::1;9138:455:2::0;;;:::o;6343:522::-;1477:7:9;;;;1476:8;1468:37;;;;-1:-1:-1;;;1468:37:9;;;;;;;:::i;:::-;6584:10:2::1;29673:31;::::0;;;:21:::1;:31;::::0;;;;;::::1;;29665:87;;;;-1:-1:-1::0;;;29665:87:2::1;;;;;;;:::i;:::-;6642:10:::2;6606:19;6628:25:::0;;;:13:::2;:25;::::0;;;;6663:26:::2;6680:8:::0;6663:16:::2;:26::i;:::-;6699:80;6734:5;6741:14;6757:13;6772:6;6699:34;:80::i;:::-;6793:14:::0;;:18;6789:70:::2;;6827:21;6840:7;6827:12;:21::i;:::-;29762:1;1515::9::1;6343:522:2::0;;;;;:::o;3947:140::-;1485:12:8;:10;:12::i;:::-;1475:6;;-1:-1:-1;;;;;1475:6:8;;;:22;;;1467:67;;;;-1:-1:-1;;;1467:67:8;;;;;;;:::i;:::-;-1:-1:-1;;;;;4039:25:2;;;::::1;;::::0;;;:18:::1;:25;::::0;;;;:41;;-1:-1:-1;;4039:41:2::1;::::0;::::1;;::::0;;;::::1;::::0;;3947:140::o;26959:74::-;1485:12:8;:10;:12::i;:::-;1475:6;;-1:-1:-1;;;;;1475:6:8;;;:22;;;1467:67;;;;-1:-1:-1;;;1467:67:8;;;;;;;:::i;:::-;1668:7:9::1;::::0;::::1;;1660:40;;;;-1:-1:-1::0;;;1660:40:9::1;;;;;;;:::i;:::-;27016:10:2::2;:8;:10::i;:::-;26959:74::o:0;1248:76:9:-;1310:7;;;;1248:76;:::o;1894:145:8:-;1485:12;:10;:12::i;:::-;1475:6;;-1:-1:-1;;;;;1475:6:8;;;:22;;;1467:67;;;;-1:-1:-1;;;1467:67:8;;;;;;;:::i;:::-;1984:6:::1;::::0;1963:40:::1;::::0;2000:1:::1;::::0;-1:-1:-1;;;;;1984:6:8::1;::::0;1963:40:::1;::::0;2000:1;;1963:40:::1;2013:6;:19:::0;;-1:-1:-1;;;;;;2013:19:8::1;::::0;;1894:145::o;3596:101:2:-;1024:12:7;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:7;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:7;;;;;;;:::i;:::-;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:7;;;;;1225:18;1213:4;1225:18;;;1170:80;3647:16:2::1;:14;:16::i;:::-;3673:17;:15;:17::i;:::-;1268:14:7::0;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:7;;;3596:101:2;:::o;4366:165::-;1485:12:8;:10;:12::i;:::-;1475:6;;-1:-1:-1;;;;;1475:6:8;;;:22;;;1467:67;;;;-1:-1:-1;;;1467:67:8;;;;;;;:::i;:::-;-1:-1:-1;;;;;4470:38:2;;;::::1;;::::0;;;:21:::1;:38;::::0;;;;:54;;-1:-1:-1;;4470:54:2::1;::::0;::::1;;::::0;;;::::1;::::0;;4366:165::o;26796:73::-;1485:12:8;:10;:12::i;:::-;1475:6;;-1:-1:-1;;;;;1475:6:8;;;:22;;;1467:67;;;;-1:-1:-1;;;1467:67:8;;;;;;;:::i;:::-;1477:7:9::1;::::0;::::1;;1476:8;1468:37;;;;-1:-1:-1::0;;;1468:37:9::1;;;;;;;:::i;:::-;26854:8:2::2;:6;:8::i;1271:77:8:-:0;1335:6;;-1:-1:-1;;;;;1335:6:8;1271:77;:::o;2326:46:2:-;;;;;;;;;;;;-1:-1:-1;;;;;2326:46:2;;;;-1:-1:-1;;;2326:46:2;;;;:::o;2629:53::-;;;;;;;;;;;;;;;:::o;2495:50::-;;;;;;;;;;;;;;;:::o;7628:308::-;7681:10;29673:31;;;;:21;:31;;;;;;;;29665:87;;;;-1:-1:-1;;;29665:87:2;;;;;;;:::i;:::-;7739:10:::1;7703:19;7725:25:::0;;;:13:::1;:25;::::0;;;;7768:19;;-1:-1:-1;;;7768:19:2;::::1;-1:-1:-1::0;;;;;7768:19:2::1;7760:90;;;;-1:-1:-1::0;;;7760:90:2::1;;;;;;;:::i;:::-;7860:23:::0;;-1:-1:-1;;;;7860:23:2::1;::::0;;7898:31:::1;::::0;7915:10:::1;::::0;7898:31:::1;::::0;::::1;::::0;7882:1:::1;::::0;7898:31:::1;:::i;:::-;;;;;;;;29762:1;7628:308:::0;:::o;27640:237::-;27786:7;27839;27848:13;27863:5;27822:47;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;27812:58;;;;;;27805:65;;27640:237;;;;;;:::o;11869:4319::-;1477:7:9;;;;1476:8;1468:37;;;;-1:-1:-1;;;1468:37:9;;;;;;;:::i;:::-;-1:-1:-1;;;;;12350:31:2;::::1;;::::0;;;:21:::1;:31;::::0;;;;;::::1;;12342:87;;;;-1:-1:-1::0;;;12342:87:2::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12461:23:2;::::1;12439:19;12461:23:::0;;;:13:::1;:23;::::0;;;;-1:-1:-1;;;;;12502:18:2;::::1;12494:78;;;;-1:-1:-1::0;;;12494:78:2::1;;;;;;;:::i;:::-;12597:1;12590:4;-1:-1:-1::0;;;;;12590:8:2::1;;12582:65;;;;-1:-1:-1::0;;;12582:65:2::1;;;;;;;:::i;:::-;12665:19:::0;;-1:-1:-1;;;12665:19:2;::::1;-1:-1:-1::0;;;;;12665:19:2::1;12657:90;;;;-1:-1:-1::0;;;12657:90:2::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12765:25:2;::::1;;::::0;;;:18:::1;:25;::::0;;;;;::::1;;12757:95;;;;-1:-1:-1::0;;;12757:95:2::1;;;;;;;:::i;:::-;13041:40:::0;;:44;13037:275:::1;;13101:200;13131:33;13182:27;13227:25;13278:8;13101:12;:200::i;:::-;13701:26;13730:55;13752:13;13767:10;13779:5;13730:21;:55::i;:::-;14023:43;::::0;;;:23:::1;::::0;;::::1;:43;::::0;;;;;:58:::1;::::0;:43;;-1:-1:-1;;;;14023:58:2;::::1;-1:-1:-1::0;;;;;14023:58:2::1;:63:::0;14019:423:::1;;14156:18;::::0;;14172:1:::1;14156:18:::0;;;;;::::1;::::0;;;14102:51:::1;::::0;14156:18:::1;;;;;;;;;;;;;;;;;-1:-1:-1::0;;14216:16:2::1;::::0;;14230:1:::1;14216:16:::0;;;;;::::1;::::0;;;14102:72;;-1:-1:-1;14188:25:2::1;::::0;14216:16;::::1;::::0;;::::1;::::0;;::::1;::::0;::::1;;::::0;-1:-1:-1;14216:16:2::1;14188:44;;14284:13;14246:32;14279:1;14246:35;;;;;;;;;;;;;:51;;;;14325:10;14311:8;14320:1;14311:11;;;;;;;;;;;;;:24;-1:-1:-1::0;;;;;14311:24:2::1;;;-1:-1:-1::0;;;;;14311:24:2::1;;;::::0;::::1;14349:82;14362:32;14396:8;14406:5;14421:8;14349:12;:82::i;:::-;14019:423;;;-1:-1:-1::0;;;;;14474:33:2;::::1;14451:20;14474:33:::0;;;:26:::1;::::0;::::1;:33;::::0;;;;;;;-1:-1:-1;;;;;14474:48:2;::::1;::::0;;;;;;;;-1:-1:-1;;;;;14474:48:2::1;14540:17:::0;14532:83:::1;;;;-1:-1:-1::0;;;14532:83:2::1;;;;;;;:::i;:::-;14705:27;14735:43:::0;;;:23:::1;::::0;::::1;:43;::::0;;;;14967:21:::1;14982:5:::0;14967:14:::1;:21::i;:::-;14963:70;;;15013:9;15004:18;;14963:70;15070:24;::::0;::::1;::::0;:36:::1;::::0;15099:6;15070:28:::1;:36::i;:::-;15043:24;::::0;::::1;:63:::0;15165:22:::1;-1:-1:-1::0;;;;;15165:8:2;::::1;-1:-1:-1::0;;;;;15165:22:2;::::1;:8;:22::i;:::-;15137:9;:24;;;:50;;15116:170;;;;-1:-1:-1::0;;;15116:170:2::1;;;;;;;:::i;:::-;15296:14;::::0;::::1;:21:::0;;-1:-1:-1;;15296:21:2::1;-1:-1:-1::0;;;;;15296:21:2;;::::1;::::0;;;::::1;::::0;;;15327:37;;-1:-1:-1;;;;;;15327:37:2::1;-1:-1:-1::0;;;;;15327:37:2;::::1;;-1:-1:-1::0;;;;15374:39:2::1;-1:-1:-1::0;;;15374:39:2;;::::1;::::0;;;::::1;;::::0;;15578:7:::1;:5;:7::i;:::-;15543:24;::::0;::::1;:43:::0;;-1:-1:-1;;;;;15543:43:2;;;::::1;-1:-1:-1::0;;;15543:43:2::1;-1:-1:-1::0;;;;;;;;15543:43:2;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;15604:23:2;::::1;-1:-1:-1::0;15604:23:2;;;:13:::1;:23;::::0;;;;15669:22;;15604:23;;-1:-1:-1;15669:32:2::1;::::0;-1:-1:-1;;;;;15669:22:2;;::::1;::::0;:32;::::1;:26;:32::i;:::-;15637:65:::0;;-1:-1:-1;;15637:65:2::1;-1:-1:-1::0;;;;;15637:65:2;;::::1;;::::0;;;-1:-1:-1;;;15746:19:2;::::1;::::0;::::1;15720:22:::0;::::1;:45;;15712:103;;;;-1:-1:-1::0;;;15712:103:2::1;;;;;;;:::i;:::-;15831:21;15846:5;15831:14;:21::i;:::-;15826:118;;15868:65;-1:-1:-1::0;;;;;15868:30:2;::::1;15899:10;15919:4;15926:6:::0;15868:30:::1;:65::i;:::-;16035:8;-1:-1:-1::0;;;;;15958:223:2::1;16011:10;-1:-1:-1::0;;;;;15958:223:2::1;;15984:13;16057:4;16075:13;16102:12;16128:5;16147:9;:24;;;15958:223;;;;;;;;;;;:::i;:::-;;;;;;;;1515:1:9;;;;11869:4319:2::0;;;;;;;;;:::o;21915:447::-;-1:-1:-1;;;;;29673:31:2;;;;;;:21;:31;;;;;;22163:8;;29673:31;;29665:87;;;;-1:-1:-1;;;29665:87:2;;;;;;;:::i;:::-;22183:172:::1;22209:33;22256:27;22297:26;22337:8;22183:12;:172::i;24124:141::-:0;-1:-1:-1;;;;;24214:21:2;24190:4;24214:21;;;:13;:21;;;;;:38;-1:-1:-1;;;;;24214:38:2;:43;;;24124:141::o;2188:240:8:-;1485:12;:10;:12::i;:::-;1475:6;;-1:-1:-1;;;;;1475:6:8;;;:22;;;1467:67;;;;-1:-1:-1;;;1467:67:8;;;;;;;:::i;:::-;-1:-1:-1;;;;;2276:22:8;::::1;2268:73;;;;-1:-1:-1::0;;;2268:73:8::1;;;;;;;:::i;:::-;2377:6;::::0;2356:38:::1;::::0;-1:-1:-1;;;;;2356:38:8;;::::1;::::0;2377:6:::1;::::0;2356:38:::1;::::0;2377:6:::1;::::0;2356:38:::1;2404:6;:17:::0;;-1:-1:-1;;;;;;2404:17:8::1;-1:-1:-1::0;;;;;2404:17:8;;;::::1;::::0;;;::::1;::::0;;2188:240::o;6985:341:2:-;1477:7:9;;;;1476:8;1468:37;;;;-1:-1:-1;;;1468:37:9;;;;;;;:::i;:::-;7069:10:2::1;29673:31;::::0;;;:21:::1;:31;::::0;;;;;::::1;;29665:87;;;;-1:-1:-1::0;;;29665:87:2::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;7099:13:2;::::2;7091:78;;;;-1:-1:-1::0;;;7091:78:2::2;;;;;;;:::i;:::-;7215:10;7179:19;7201:25:::0;;;:13:::2;:25;::::0;;;;;;7236:30;;-1:-1:-1;;;;7236:30:2::2;-1:-1:-1::0;;;;;;;;7236:30:2;::::2;;;::::0;;7281:38;;7201:25;;7215:10;7281:38:::2;::::0;::::2;::::0;7236:30;;7281:38:::2;:::i;:::-;;;;;;;;29762:1;1515::9::1;6985:341:2::0;:::o;27883:662::-;27964:7;28042:24;28069:42;28088:9;:22;;;-1:-1:-1;;;;;28069:42:2;:9;:14;;;-1:-1:-1;;;;;28069:18:2;;;:42;;;;:::i;:::-;28042:69;;28121:30;28154:66;28196:9;:23;;;-1:-1:-1;;;;;28154:66:2;:37;28166:9;:24;;;-1:-1:-1;;;;;28154:37:2;:7;:5;:7::i;:37::-;:41;;:66::i;:::-;28121:99;-1:-1:-1;28230:18:2;28251:44;28121:99;28278:16;28251:26;:44::i;:::-;28230:65;;28379:9;:24;;;28366:10;:37;28362:149;;;28432:68;28483:16;28432:46;28461:16;28432:9;:24;;;:28;;:46;;;;:::i;:::-;:50;;:68::i;:::-;28419:81;;28362:149;28528:10;27883:662;-1:-1:-1;;;;27883:662:2:o;1329:134:12:-;1387:7;1413:43;1417:1;1420;1413:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1406:50;;1329:134;;;;;:::o;29491:111:2:-;-1:-1:-1;;;;;29576:19:2;;;29491:111::o;704:175:15:-;786:86;806:5;836:23;;;861:2;865:5;813:58;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;813:58:15;;;;;;;;;;;;;;-1:-1:-1;;;;;813:58:15;-1:-1:-1;;;;;;813:58:15;;;;;;;;;;786:19;:86::i;:::-;704:175;;;:::o;2188:459:12:-;2246:7;2487:6;2483:45;;-1:-1:-1;2516:1:12;2509:8;;2483:45;2550:5;;;2554:1;2550;:5;:1;2573:5;;;;;:10;2565:56;;;;-1:-1:-1;;;2565:56:12;;;;;;;:::i;882:176::-;940:7;971:5;;;994:6;;;;986:46;;;;-1:-1:-1;;;986:46:12;;;;;;;:::i;885:203:15:-;985:96;1005:5;1035:27;;;1064:4;1070:2;1074:5;1012:68;;;;;;;;;;:::i;985:96::-;885:203;;;;:::o;29141:114:2:-;29228:10;-1:-1:-1;;;;;29213:35:2;;29240:7;29213:35;;;;;;:::i;:::-;;;;;;;;29141:114;:::o;23567:551::-;23826:9;23821:291;23841:6;:13;23837:1;:17;23821:291;;;23939:9;23934:168;23954:14;23969:1;23954:17;;;;;;;;;;;;;;:24;23950:1;:28;23934:168;;;24003:84;24027:5;24034:6;24041:1;24034:9;;;;;;;;;;;;;;24045:14;24060:1;24045:17;;;;;;;;;;;;;;24063:1;24045:20;;;;;;;;;;;;;;24067:13;24081:1;24067:16;;;;;;;;;;;;;;24084:1;24067:19;;;;;;;;;;;;;;24003:23;:84::i;:::-;23980:3;;23934:168;;;-1:-1:-1;23856:3:2;;23821:291;;931:104:6;1018:10;931:104;:::o;1950:117:9:-;1668:7;;;;1660:40;;;;-1:-1:-1;;;1660:40:9;;;;;;;:::i;:::-;2008:7:::1;:15:::0;;-1:-1:-1;;2008:15:9::1;::::0;;2038:22:::1;2047:12;:10;:12::i;:::-;2038:22;;;;;;:::i;:::-;;;;;;;;1950:117::o:0;1409:498:7:-;1820:4;1864:17;1895:7;1409:498;:::o;867:126:8:-;1024:12:7;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:7;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:7;;;;;;;:::i;:::-;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:7;;;;;1225:18;1213:4;1225:18;;;1170:80;924:26:8::1;:24;:26::i;:::-;960;:24;:26::i;925:128:9:-:0;1024:12:7;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:7;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:7;;;;;;;:::i;:::-;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:7;;;;;1225:18;1213:4;1225:18;;;1170:80;983:26:9::1;:24;:26::i;:::-;1019:27;:25;:27::i;1776:115::-:0;1477:7;;;;1476:8;1468:37;;;;-1:-1:-1;;;1468:37:9;;;;;;;:::i;:::-;1835:7:::1;:14:::0;;-1:-1:-1;;1835:14:9::1;1845:4;1835:14;::::0;;1864:20:::1;1871:12;:10;:12::i;24316:2393:2:-:0;-1:-1:-1;;;;;24577:23:2;;24555:19;24577:23;;;:13;:23;;;;;;24555:19;24639:1698;24661:32;:39;24657:1;:43;;;24639:1698;;;24721:26;24766:195;24809:32;24842:1;24809:35;;;;;;;;;;;;;;;;24866:27;24894:1;24866:30;;;;;;;;;;;;;;;;24918:25;24766:21;:195::i;:::-;24975:27;25005:43;;;:23;;;;:43;;;;;;25070:14;;;;24721:240;;-1:-1:-1;25005:43:2;-1:-1:-1;;;;;25070:14:2;25062:86;;;;-1:-1:-1;;;25062:86:2;;;;;;;:::i;:::-;25222:24;;;;-1:-1:-1;;;25222:24:2;;-1:-1:-1;;;;;25222:24:2;25214:79;;;;-1:-1:-1;;;25214:79:2;;;;;;;:::i;:::-;25329:31;;;;;;;;;;-1:-1:-1;;;;;25329:31:2;;;;;-1:-1:-1;;;;;;;;25329:31:2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;25329:31:2;;;;;;;;;25308:18;;25329:31;;:20;:31::i;:::-;25308:52;-1:-1:-1;25378:14:2;;25374:953;;25439:24;;;;:40;;25468:10;25439:28;:40::i;:::-;25412:24;;;:67;25510:26;:10;25525;25510:14;:26::i;:::-;25685:14;;;;25658:22;;25497:39;;-1:-1:-1;25658:42:2;;-1:-1:-1;;;;;25658:22:2;;-1:-1:-1;;;;;25685:14:2;25658:26;:42::i;:::-;25631:9;:24;;;:69;25627:583;;;25774:24;;;:28;;-1:-1:-1;;;;;;;;25774:28:2;;;;;25898:22;;:42;;-1:-1:-1;;;;;25898:22:2;;;;25925:14;25898:26;:42::i;:::-;25866:75;;-1:-1:-1;;25866:75:2;-1:-1:-1;;;;;25866:75:2;;;;;;;25968:36;;25985:18;;25968:36;;-1:-1:-1;;25968:36:2;25627:583;;;26183:7;:5;:7::i;:::-;26148:9;:24;;;:43;;;;;-1:-1:-1;;;;;26148:43:2;;;;;-1:-1:-1;;;;;26148:43:2;;;;;;25627:583;26286:25;-1:-1:-1;;;;;26233:79:2;26254:18;26233:79;26274:10;26233:79;;;;;;:::i;:::-;;;;;;;;25374:953;-1:-1:-1;;;24702:3:2;;24639:1698;;;-1:-1:-1;26351:14:2;;26347:356;;26385:41;26400:25;26385:14;:41::i;:::-;26381:312;;;26447:12;26465:8;-1:-1:-1;;;;;26465:13:2;26486:10;26465:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26446:55;;;26527:7;26519:52;;;;-1:-1:-1;;;26519:52:2;;;;;;;:::i;:::-;26381:312;;;;26610:68;-1:-1:-1;;;;;26610:46:2;;26657:8;26667:10;26610:46;:68::i;29351:84::-;29425:3;29351:84;:::o;3109:130:12:-;3167:7;3193:39;3197:1;3200;3193:39;;;;;;;;;;;;;;;;;:3;:39::i;1754:187::-;1840:7;1875:12;1867:6;;;;1859:29;;;;-1:-1:-1;;;1859:29:12;;;;;;;;:::i;:::-;-1:-1:-1;;;1910:5:12;;;1754:187::o;2967:751:15:-;3386:23;3412:69;3440:4;3412:69;;;;;;;;;;;;;;;;;3420:5;-1:-1:-1;;;;;3412:27:15;;;:69;;;;;:::i;:::-;3495:17;;3386:95;;-1:-1:-1;3495:21:15;3491:221;;3635:10;3624:30;;;;;;;;;;;;:::i;:::-;3616:85;;;;-1:-1:-1;;;3616:85:15;;;;;;;:::i;28672:463:2:-;893:8;-1:-1:-1;;;;;28836:28:2;;;;28828:90;;;;-1:-1:-1;;;28828:90:2;;;;;;;:::i;:::-;-1:-1:-1;;;;;28936:25:2;;;;;;:18;:25;;;;;;;;28928:78;;;;-1:-1:-1;;;28928:78:2;;;;;;;:::i;:::-;-1:-1:-1;;;;;29016:33:2;;;;;;:26;;;:33;;;;;;;;-1:-1:-1;;;;;29016:41:2;;;;;;;;;;;:49;;-1:-1:-1;;;;;;29016:49:2;-1:-1:-1;;;;;29016:49:2;;;;;29080:48;29095:10;;29080:48;;;;29016:33;;:41;;:49;;29080:48;:::i;:::-;;;;;;;;28672:463;;;;:::o;858:66:6:-;1024:12:7;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:7;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:7;;;;;;;:::i;:::-;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:7;;;;;1225:18;1213:4;1225:18;;;1268:14;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:7;;;858:66:6;:::o;999:195:8:-;1024:12:7;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:7;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:7;;;;;;;:::i;:::-;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:7;;;;;1225:18;1213:4;1225:18;;;1170:80;1068:17:8::1;1088:12;:10;:12::i;:::-;1110:6;:18:::0;;-1:-1:-1;;;;;;1110:18:8::1;-1:-1:-1::0;;;;;1110:18:8;::::1;::::0;;::::1;::::0;;;1143:43:::1;::::0;1110:18;;-1:-1:-1;1110:18:8;-1:-1:-1;;1143:43:8::1;::::0;-1:-1:-1;;1143:43:8::1;1256:1:7;1268:14:::0;1264:55;;;1307:5;1292:20;;-1:-1:-1;;1292:20:7;;;999:195:8;:::o;1059:93:9:-;1024:12:7;;;;;;;;:31;;;1040:15;:13;:15::i;:::-;1024:47;;;-1:-1:-1;1060:11:7;;;;1059:12;1024:47;1016:106;;;;-1:-1:-1;;;1016:106:7;;;;;;;:::i;:::-;1129:19;1152:12;;;;;;1151:13;1170:80;;;;1198:12;:19;;-1:-1:-1;;;;1198:19:7;;;;;1225:18;1213:4;1225:18;;;1170:80;1129:7:9::1;:15:::0;;-1:-1:-1;;1129:15:9::1;::::0;;1264:55:7;;;;1307:5;1292:20;;-1:-1:-1;;1292:20:7;;;1059:93:9;:::o;3721:272:12:-;3807:7;3841:12;3834:5;3826:28;;;;-1:-1:-1;;;3826:28:12;;;;;;;;:::i;:::-;;3864:9;3880:1;3876;:5;;;;;;;3721:272;-1:-1:-1;;;;;3721:272:12:o;3581:193:16:-;3684:12;3715:52;3737:6;3745:4;3751:1;3754:12;3684;4858:18;4869:6;4858:10;:18::i;:::-;4850:60;;;;-1:-1:-1;;;4850:60:16;;;;;;;:::i;:::-;4981:12;4995:23;5022:6;-1:-1:-1;;;;;5022:11:16;5042:5;5050:4;5022:33;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4980:75;;;;5072:52;5090:7;5099:10;5111:12;5072:17;:52::i;:::-;5065:59;4608:523;-1:-1:-1;;;;;;;4608:523:16:o;726:413::-;1086:20;1124:8;;;726:413::o;6111:725::-;6226:12;6254:7;6250:580;;;-1:-1:-1;6284:10:16;6277:17;;6250:580;6395:17;;:21;6391:429;;6653:10;6647:17;6713:15;6700:10;6696:2;6692:19;6685:44;6602:145;6792:12;6785:20;;-1:-1:-1;;;6785:20:16;;;;;;;;:::i;5:130:-1:-;72:20;;97:33;72:20;97:33;:::i;313:707::-;;430:3;423:4;415:6;411:17;407:27;397:2;;-1:-1;;438:12;397:2;485:6;472:20;507:80;522:64;579:6;522:64;:::i;:::-;507:80;:::i;:::-;615:21;;;498:89;-1:-1;659:4;672:14;;;;647:17;;;761;;;752:27;;;;749:36;-1:-1;746:2;;;798:1;;788:12;746:2;823:1;808:206;833:6;830:1;827:13;808:206;;;85:6;72:20;97:33;124:5;97:33;:::i;:::-;901:50;;965:14;;;;993;;;;855:1;848:9;808:206;;;812:14;;;;;390:630;;;;:::o;1048:753::-;;1190:3;1183:4;1175:6;1171:17;1167:27;1157:2;;-1:-1;;1198:12;1157:2;1245:6;1232:20;1267:105;1282:89;1364:6;1282:89;:::i;1267:105::-;1400:21;;;1258:114;-1:-1;1444:4;1457:14;;;;1432:17;;;1552:1;1537:258;1562:6;1559:1;1556:13;1537:258;;;1669:62;1727:3;1444:4;1645:3;1632:17;1436:6;1620:30;;1669:62;:::i;:::-;1657:75;;1746:14;;;;1774;;;;1584:1;1577:9;1537:258;;1829:753;;1971:3;1964:4;1956:6;1952:17;1948:27;1938:2;;-1:-1;;1979:12;1938:2;2026:6;2013:20;2048:105;2063:89;2145:6;2063:89;:::i;2048:105::-;2181:21;;;2039:114;-1:-1;2225:4;2238:14;;;;2213:17;;;2333:1;2318:258;2343:6;2340:1;2337:13;2318:258;;;2426:3;2413:17;2217:6;2401:30;4235:3;4216:17;2401:30;4216:17;4212:27;4202:2;;2333:1;;4243:12;4202:2;2225:4;2401:30;;4277:20;4312:80;4327:64;4384:6;4327:64;:::i;4312:80::-;4420:21;;;4477:14;;;;4452:17;;;;4566;;;4557:27;;;;4554:36;-1:-1;4551:2;;;2333:1;;4593:12;4551:2;2333:1;4619:10;;4613:206;4638:6;4635:1;4632:13;4613:206;;;6778:6;6765:20;6756:29;;6790:33;6817:5;6790:33;:::i;:::-;4706:50;;;2365:1;4653:9;;;;;4770:14;;;;4798;;4613:206;;;-1:-1;;2438:75;;-1:-1;;;2527:14;;;;2555;;;;2365:1;2358:9;2318:258;;2609:750;;2750:3;2743:4;2735:6;2731:17;2727:27;2717:2;;-1:-1;;2758:12;2717:2;2805:6;2792:20;2827:104;2842:88;2923:6;2842:88;:::i;2827:104::-;2959:21;;;2818:113;-1:-1;3003:4;3016:14;;;;2991:17;;;3111:1;3096:257;3121:6;3118:1;3115:13;3096:257;;;3204:3;3191:17;2995:6;3179:30;5699:3;5680:17;3179:30;5680:17;5676:27;5666:2;;3111:1;;5707:12;5666:2;3003:4;3179:30;;5741:20;5776:79;5791:63;5847:6;5791:63;:::i;5776:79::-;5883:21;;;5940:14;;;;5915:17;;;;6029;;;6020:27;;;;6017:36;-1:-1;6014:2;;;3111:1;;6056:12;6014:2;3111:1;6082:10;;6076:205;6101:6;6098:1;6095:13;6076:205;;;6181:36;6213:3;6201:10;6181:36;:::i;:::-;6169:49;;3143:1;6116:9;;;;;6232:14;;;;6260;;6076:205;;;-1:-1;;3216:74;;-1:-1;;;3304:14;;;;3332;;;;3143:1;3136:9;3096:257;;3385:707;;3502:3;3495:4;3487:6;3483:17;3479:27;3469:2;;-1:-1;;3510:12;3469:2;3557:6;3544:20;3579:80;3594:64;3651:6;3594:64;:::i;3579:80::-;3687:21;;;3570:89;-1:-1;3731:4;3744:14;;;;3719:17;;;3833;;;3824:27;;;;3821:36;-1:-1;3818:2;;;3870:1;;3860:12;3818:2;3895:1;3880:206;3905:6;3902:1;3899:13;3880:206;;;6628:20;;3973:50;;4037:14;;;;4065;;;;3927:1;3920:9;3880:206;;6972:128;7038:20;;-1:-1;;;;;55496:30;;57532:34;;57522:2;;57580:1;;57570:12;7107:241;;7211:2;7199:9;7190:7;7186:23;7182:32;7179:2;;;-1:-1;;7217:12;7179:2;85:6;72:20;97:33;124:5;97:33;:::i;7355:360::-;;;7473:2;7461:9;7452:7;7448:23;7444:32;7441:2;;;-1:-1;;7479:12;7441:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;7531:63;-1:-1;7631:2;7667:22;;6359:20;6384:30;6359:20;6384:30;:::i;:::-;7639:60;;;;7435:280;;;;;:::o;7722:753::-;;;;;7902:3;7890:9;7881:7;7877:23;7873:33;7870:2;;;-1:-1;;7909:12;7870:2;85:6;72:20;97:33;124:5;97:33;:::i;:::-;7961:63;-1:-1;8061:2;8100:22;;6902:20;;-1:-1;8197:2;8182:18;;8169:32;-1:-1;;;;;8210:30;;8207:2;;;-1:-1;;8243:12;8207:2;8273:78;8343:7;8334:6;8323:9;8319:22;8273:78;:::i;:::-;8263:88;;;8388:2;8431:9;8427:22;72:20;97:33;124:5;97:33;:::i;:::-;7864:611;;;;-1:-1;7864:611;;-1:-1;;7864:611::o;8482:955::-;;;;;8720:3;8708:9;8699:7;8695:23;8691:33;8688:2;;;-1:-1;;8727:12;8688:2;8785:17;8772:31;-1:-1;;;;;8823:18;8815:6;8812:30;8809:2;;;-1:-1;;8845:12;8809:2;8875:103;8970:7;8961:6;8950:9;8946:22;8875:103;:::i;:::-;8865:113;;9043:2;9032:9;9028:18;9015:32;9001:46;;8823:18;9059:6;9056:30;9053:2;;;-1:-1;;9089:12;9053:2;;9119:78;9189:7;9180:6;9169:9;9165:22;9119:78;:::i;:::-;9109:88;;;9234:2;9277:9;9273:22;72:20;97:33;124:5;97:33;:::i;:::-;9242:63;-1:-1;9342:2;9389:22;;217:20;242:41;217:20;242:41;:::i;9444:997::-;;;;9706:2;9694:9;9685:7;9681:23;9677:32;9674:2;;;-1:-1;;9712:12;9674:2;9770:17;9757:31;-1:-1;;;;;9808:18;9800:6;9797:30;9794:2;;;-1:-1;;9830:12;9794:2;9860:102;9954:7;9945:6;9934:9;9930:22;9860:102;:::i;:::-;9850:112;;10027:2;10016:9;10012:18;9999:32;9985:46;;9808:18;10043:6;10040:30;10037:2;;;-1:-1;;10073:12;10037:2;10103:103;10198:7;10189:6;10178:9;10174:22;10103:103;:::i;:::-;10093:113;;10271:2;10260:9;10256:18;10243:32;10229:46;;9808:18;10287:6;10284:30;10281:2;;;-1:-1;;10317:12;10281:2;;10347:78;10417:7;10408:6;10397:9;10393:22;10347:78;:::i;:::-;10337:88;;;9668:773;;;;;:::o;10448:377::-;;10577:2;10565:9;10556:7;10552:23;10548:32;10545:2;;;-1:-1;;10583:12;10545:2;10641:17;10628:31;-1:-1;;;;;10671:6;10668:30;10665:2;;;-1:-1;;10701:12;10665:2;10731:78;10801:7;10792:6;10781:9;10777:22;10731:78;:::i;10832:627::-;;;;10995:2;10983:9;10974:7;10970:23;10966:32;10963:2;;;-1:-1;;11001:12;10963:2;11059:17;11046:31;-1:-1;;;;;11089:6;11086:30;11083:2;;;-1:-1;;11119:12;11083:2;11149:78;11219:7;11210:6;11199:9;11195:22;11149:78;:::i;:::-;11139:88;;;11264:2;11307:9;11303:22;72:20;97:33;124:5;97:33;:::i;:::-;11272:63;-1:-1;11372:2;11411:22;;72:20;97:33;72:20;97:33;:::i;:::-;11380:63;;;;10957:502;;;;;:::o;11466:1025::-;;;;;11696:3;11684:9;11675:7;11671:23;11667:33;11664:2;;;-1:-1;;11703:12;11664:2;11761:17;11748:31;-1:-1;;;;;11799:18;11791:6;11788:30;11785:2;;;-1:-1;;11821:12;11785:2;11851:78;11921:7;11912:6;11901:9;11897:22;11851:78;:::i;:::-;11841:88;;11966:2;;;;12009:9;12005:22;72:20;97:33;124:5;97:33;:::i;:::-;11974:63;-1:-1;12102:2;12087:18;;12074:32;12115:30;;;12112:2;;;-1:-1;;12148:12;12112:2;12178:78;12248:7;12239:6;12228:9;12224:22;12178:78;:::i;:::-;12168:88;;;12321:2;12310:9;12306:18;12293:32;11799:18;12337:6;12334:30;12331:2;;;-1:-1;;12367:12;12331:2;12443:22;;;-1:-1;4961:4;4949:17;;4945:27;-1:-1;4935:2;;-1:-1;;4976:12;4935:2;5023:6;5010:20;5045:80;5060:64;5117:6;5060:64;:::i;5045:80::-;5153:21;;;5210:14;;;;5185:17;;;5299;;;5290:27;;;;5287:36;-1:-1;5284:2;;;-1:-1;;5326:12;5284:2;-1:-1;5352:10;;5346:206;5371:6;5368:1;5365:13;5346:206;;;6902:20;;5439:50;;5393:1;5386:9;;;;;5503:14;;;;5531;;5346:206;;;-1:-1;11658:833;;;;-1:-1;11658:833;;-1:-1;;;;;;11658:833::o;12498:1701::-;;;;;;;;;;12836:3;12824:9;12815:7;12811:23;12807:33;12804:2;;;-1:-1;;12843:12;12804:2;12901:17;12888:31;-1:-1;;;;;12939:18;12931:6;12928:30;12925:2;;;-1:-1;;12961:12;12925:2;12991:78;13061:7;13052:6;13041:9;13037:22;12991:78;:::i;:::-;12981:88;;13124:53;13169:7;13106:2;13149:9;13145:22;13124:53;:::i;:::-;13114:63;;13232:52;13276:7;13214:2;13256:9;13252:22;13232:52;:::i;:::-;13222:62;;13339:52;13383:7;13321:2;13363:9;13359:22;13339:52;:::i;:::-;13329:62;;13447:53;13492:7;13428:3;13472:9;13468:22;13447:53;:::i;:::-;13437:63;;13537:3;13581:9;13577:22;6902:20;13546:63;;13674:3;13663:9;13659:19;13646:33;13632:47;;12939:18;13691:6;13688:30;13685:2;;;-1:-1;;13721:12;13685:2;13751:103;13846:7;13837:6;13826:9;13822:22;13751:103;:::i;:::-;13741:113;;13919:3;13908:9;13904:19;13891:33;13877:47;;12939:18;13936:6;13933:30;13930:2;;;-1:-1;;13966:12;13930:2;;13996:78;14066:7;14057:6;14046:9;14042:22;13996:78;:::i;:::-;13986:88;;;14130:53;14175:7;14111:3;14155:9;14151:22;14130:53;:::i;:::-;14120:63;;12798:1401;;;;;;;;;;;:::o;14206:257::-;;14318:2;14306:9;14297:7;14293:23;14289:32;14286:2;;;-1:-1;;14324:12;14286:2;6507:6;6501:13;6519:30;6543:5;6519:30;:::i;14470:239::-;;14573:2;14561:9;14552:7;14548:23;14544:32;14541:2;;;-1:-1;;14579:12;14541:2;7051:6;7038:20;-1:-1;;;;;57559:5;55496:30;57535:5;57532:34;57522:2;;-1:-1;;57570:12;14716:1383;;;;;;15036:3;15024:9;15015:7;15011:23;15007:33;15004:2;;;-1:-1;;15043:12;15004:2;15105:52;15149:7;15125:22;15105:52;:::i;:::-;15095:62;;15222:2;15211:9;15207:18;15194:32;-1:-1;;;;;15246:18;15238:6;15235:30;15232:2;;;-1:-1;;15268:12;15232:2;15298:102;15392:7;15383:6;15372:9;15368:22;15298:102;:::i;:::-;15288:112;;15465:2;15454:9;15450:18;15437:32;15423:46;;15246:18;15481:6;15478:30;15475:2;;;-1:-1;;15511:12;15475:2;15541:103;15636:7;15627:6;15616:9;15612:22;15541:103;:::i;:::-;15531:113;;15709:2;15698:9;15694:18;15681:32;15667:46;;15246:18;15725:6;15722:30;15719:2;;;-1:-1;;15755:12;15719:2;15785:78;15855:7;15846:6;15835:9;15831:22;15785:78;:::i;:::-;15775:88;;15928:3;15917:9;15913:19;15900:33;15886:47;;15246:18;15945:6;15942:30;15939:2;;;-1:-1;;15975:12;15939:2;;16005:78;16075:7;16066:6;16055:9;16051:22;16005:78;:::i;:::-;15995:88;;;14998:1101;;;;;;;;:::o;16945:690::-;;17138:5;53639:12;54183:6;54178:3;54171:19;54220:4;;54215:3;54211:14;17150:93;;54220:4;17314:5;53493:14;-1:-1;17353:260;17378:6;17375:1;17372:13;17353:260;;;17439:13;;18588:37;;16260:14;;;;54026;;;;17400:1;17393:9;17353:260;;;-1:-1;17619:10;;17069:566;-1:-1;;;;;17069:566::o;31772:613::-;;56688:14;;;16894:5;56692:2;56688:14;;16851:3;16844:58;32103:2;32098:3;32094:12;17885:5;53639:12;53502:4;;18079:5;53493:14;-1:-1;18118:268;18143:6;18140:1;18137:13;18118:268;;;18204:13;;18588:37;;16260:14;;;;54026;;;;18165:1;18158:9;18118:268;;;-1:-1;;;;56692:2;56688:14;;;;;16844:58;;-1:-1;;32103:2;32348:12;;31994:391;-1:-1;;31994:391::o;32392:271::-;;19035:5;53639:12;19146:52;19191:6;19186:3;19179:4;19172:5;19168:16;19146:52;:::i;:::-;19210:16;;;;;32526:137;-1:-1;;32526:137::o;32670:379::-;33034:10;32858:191::o;33056:222::-;-1:-1;;;;;55290:54;;;;16706:37;;33183:2;33168:18;;33154:124::o;33530:444::-;-1:-1;;;;;55290:54;;;16706:37;;55290:54;;;;33877:2;33862:18;;16706:37;33960:2;33945:18;;18588:37;;;;33713:2;33698:18;;33684:290::o;33981:333::-;-1:-1;;;;;55290:54;;;;16706:37;;34300:2;34285:18;;18588:37;34136:2;34121:18;;34107:207::o;34321:440::-;-1:-1;;;;;55290:54;;;;16706:37;;-1:-1;;;;;55496:30;;;;34664:2;34649:18;;31724:36;-1:-1;;;;;55170:46;34747:2;34732:18;;31486:37;34502:2;34487:18;;34473:288::o;34768:370::-;;34945:2;34966:17;34959:47;35020:108;34945:2;34934:9;34930:18;35114:6;35020:108;:::i;35145:920::-;;35458:3;35480:17;35473:47;35534:108;35458:3;35447:9;35443:19;35628:6;35534:108;:::i;:::-;-1:-1;;;;;55496:30;;;35719:2;35704:18;;31724:36;55496:30;;;;35800:2;35785:18;;31724:36;-1:-1;;;;;55170:46;;;;35883:2;35868:18;;31486:37;-1:-1;;;;;55290:54;;;;35966:3;35951:19;;16706:37;56688:14;36035:19;;;18588:37;35526:116;35429:636;-1:-1;;35429:636::o;36072:210::-;55003:13;;54996:21;18481:34;;36193:2;36178:18;;36164:118::o;36289:222::-;18588:37;;;36416:2;36401:18;;36387:124::o;36518:236::-;-1:-1;;;;;55496:30;;;;19316:57;;36652:2;36637:18;;36623:131::o;36761:310::-;;36908:2;36929:17;36922:47;19530:5;53639:12;54183:6;36908:2;36897:9;36893:18;54171:19;19624:52;19669:6;54211:14;36897:9;54211:14;36908:2;19650:5;19646:16;19624:52;:::i;:::-;56597:7;56581:14;-1:-1;;56577:28;19688:39;;;;54211:14;19688:39;;36879:192;-1:-1;;36879:192::o;37078:416::-;37278:2;37292:47;;;19964:2;37263:18;;;54171:19;-1:-1;;;54211:14;;;19980:43;20042:12;;;37249:245::o;37501:416::-;37701:2;37715:47;;;20293:2;37686:18;;;54171:19;20329:34;54211:14;;;20309:55;-1:-1;;;20384:12;;;20377:39;20435:12;;;37672:245::o;37924:416::-;38124:2;38138:47;;;20686:2;38109:18;;;54171:19;20722:34;54211:14;;;20702:55;-1:-1;;;20777:12;;;20770:30;20819:12;;;38095:245::o;38347:416::-;38547:2;38561:47;;;21070:2;38532:18;;;54171:19;21106:29;54211:14;;;21086:50;21155:12;;;38518:245::o;38770:416::-;38970:2;38984:47;;;21406:2;38955:18;;;54171:19;21442:34;54211:14;;;21422:55;21511:27;21497:12;;;21490:49;21558:12;;;38941:245::o;39193:416::-;39393:2;39407:47;;;21809:2;39378:18;;;54171:19;21845:34;54211:14;;;21825:55;-1:-1;;;21900:12;;;21893:41;21953:12;;;39364:245::o;39616:416::-;39816:2;39830:47;;;22204:2;39801:18;;;54171:19;22240:34;54211:14;;;22220:55;-1:-1;;;22295:12;;;22288:45;22352:12;;;39787:245::o;40039:416::-;40239:2;40253:47;;;22603:2;40224:18;;;54171:19;22639:34;54211:14;;;22619:55;-1:-1;;;22694:12;;;22687:42;22748:12;;;40210:245::o;40462:416::-;40662:2;40676:47;;;22999:2;40647:18;;;54171:19;23035:34;54211:14;;;23015:55;-1:-1;;;23090:12;;;23083:25;23127:12;;;40633:245::o;41308:416::-;41508:2;41522:47;;;23762:2;41493:18;;;54171:19;23798:34;54211:14;;;23778:55;-1:-1;;;23853:12;;;23846:27;23892:12;;;41479:245::o;41731:416::-;41931:2;41945:47;;;24143:2;41916:18;;;54171:19;24179:34;54211:14;;;24159:55;24248:34;24234:12;;;24227:56;-1:-1;;;24303:12;;;24296:33;24348:12;;;41902:245::o;42154:416::-;42354:2;42368:47;;;24599:2;42339:18;;;54171:19;24635:34;54211:14;;;24615:55;-1:-1;;;24690:12;;;24683:37;24739:12;;;42325:245::o;42577:416::-;42777:2;42791:47;;;24990:2;42762:18;;;54171:19;25026:34;54211:14;;;25006:55;-1:-1;;;25081:12;;;25074:36;25129:12;;;42748:245::o;43000:416::-;43200:2;43214:47;;;25380:2;43185:18;;;54171:19;25416:34;54211:14;;;25396:55;-1:-1;;;25471:12;;;25464:35;25518:12;;;43171:245::o;43423:416::-;43623:2;43637:47;;;25769:2;43608:18;;;54171:19;-1:-1;;;54211:14;;;25785:39;25843:12;;;43594:245::o;43846:416::-;44046:2;44060:47;;;26094:2;44031:18;;;54171:19;26130:34;54211:14;;;26110:55;-1:-1;;;26185:12;;;26178:46;26243:12;;;44017:245::o;44269:416::-;44469:2;44483:47;;;26494:2;44454:18;;;54171:19;26530:34;54211:14;;;26510:55;-1:-1;;;26585:12;;;26578:32;26629:12;;;44440:245::o;44692:416::-;44892:2;44906:47;;;26880:2;44877:18;;;54171:19;26916:34;54211:14;;;26896:55;-1:-1;;;26971:12;;;26964:35;27018:12;;;44863:245::o;45115:416::-;45315:2;45329:47;;;27269:2;45300:18;;;54171:19;27305:34;54211:14;;;27285:55;-1:-1;;;27360:12;;;27353:28;27400:12;;;45286:245::o;45538:416::-;45738:2;45752:47;;;27651:2;45723:18;;;54171:19;27687:34;54211:14;;;27667:55;-1:-1;;;27742:12;;;27735:25;27779:12;;;45709:245::o;45961:416::-;46161:2;46175:47;;;46146:18;;;54171:19;28066:34;54211:14;;;28046:55;28120:12;;;46132:245::o;46384:416::-;46584:2;46598:47;;;28371:2;46569:18;;;54171:19;28407:34;54211:14;;;28387:55;-1:-1;;;28462:12;;;28455:44;28518:12;;;46555:245::o;46807:416::-;47007:2;47021:47;;;28769:2;46992:18;;;54171:19;28805:34;54211:14;;;28785:55;-1:-1;;;28860:12;;;28853:38;28910:12;;;46978:245::o;47230:416::-;47430:2;47444:47;;;29161:2;47415:18;;;54171:19;29197:34;54211:14;;;29177:55;-1:-1;;;29252:12;;;29245:29;29293:12;;;47401:245::o;47653:416::-;47853:2;47867:47;;;29849:2;47838:18;;;54171:19;-1:-1;;;54211:14;;;29865:39;29923:12;;;47824:245::o;48076:416::-;48276:2;48290:47;;;30174:2;48261:18;;;54171:19;30210:31;54211:14;;;30190:52;30261:12;;;48247:245::o;48499:416::-;48699:2;48713:47;;;30512:2;48684:18;;;54171:19;30548:34;54211:14;;;30528:55;-1:-1;;;30603:12;;;30596:45;30660:12;;;48670:245::o;48922:416::-;49122:2;49136:47;;;30911:2;49107:18;;;54171:19;30947:34;54211:14;;;30927:55;-1:-1;;;31002:12;;;30995:34;31048:12;;;49093:245::o;49345:416::-;49545:2;49559:47;;;49530:18;;;54171:19;31335:34;54211:14;;;31315:55;31389:12;;;49516:245::o;50222:325::-;-1:-1;;;;;55496:30;;;31724:36;;55496:30;;50533:2;50518:18;;31724:36;50373:2;50358:18;;50344:203::o;50554:256::-;50616:2;50610:9;50642:17;;;-1:-1;;;;;50702:34;;50738:22;;;50699:62;50696:2;;;50774:1;;50764:12;50696:2;50616;50783:22;50594:216;;-1:-1;50594:216::o;50817:304::-;;-1:-1;;;;;50968:6;50965:30;50962:2;;;-1:-1;;50998:12;50962:2;-1:-1;51043:4;51031:17;;;51096:15;;50899:222::o;56039:268::-;56104:1;56111:101;56125:6;56122:1;56119:13;56111:101;;;56192:11;;;56186:18;56173:11;;;56166:39;56147:2;56140:10;56111:101;;;56227:6;56224:1;56221:13;56218:2;;;-1:-1;;56104:1;56274:16;;56267:27;56088:219::o;56720:117::-;-1:-1;;;;;55290:54;;56779:35;;56769:2;;56828:1;;56818:12;56984:111;57065:5;55003:13;54996:21;57043:5;57040:32;57030:2;;57086:1;;57076:12;57226:117;-1:-1;;;;;57313:5;55170:46;57288:5;57285:35;57275:2;;57334:1;;57324:12",
  "source": "// SPDX-License-Identifier: MIT\npragma solidity 0.6.12;\npragma experimental ABIEncoderV2;\n\nimport \"@openzeppelin/contracts/math/SafeMath.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/SafeERC20.sol\";\nimport \"@openzeppelin/contracts/token/ERC20/IERC20.sol\";\nimport \"@openzeppelin/contracts-ethereum-package/contracts/access/Ownable.sol\";\nimport \"@openzeppelin/contracts-ethereum-package/contracts/utils/Pausable.sol\";\n\n/// @title StorageManager\n/// @author Rinke Hendriksen <rinke@iovlabs.org>\n/// @author Adam Uhlir <adam@iovlabs.org>\n/// @notice Providers can offer their storage space and list their price and Consumers can take these offers\ncontract StorageManager is OwnableUpgradeSafe, PausableUpgradeSafe {\n    using SafeMath for uint256;\n    using SafeMath for uint128;\n    using SafeMath for uint64;\n    using SafeERC20 for IERC20;\n\n    uint64 private constant MAX_BILLING_PERIOD = 15552000; // 6 * 30 days ~~ 6 months\n\n    /*\n    Offer represents:\n     - utilizedCapacity: how much is capacity is utilized in Offer.\n     - totalCapacity: total amount of mega-bytes (MB) offered.\n     - billingPlansForToken: maps a whitelisted token to billing period to a billing price. When a price is 0, the period is not offered. By convention, the 0-address stands for the native currency\n     - agreementRegistry: the proposed and accepted Agreement\n    */\n    struct Offer {\n        uint64 utilizedCapacity;\n        uint64 totalCapacity;\n        mapping(address => mapping(uint64 => uint128)) billingPlansForToken;\n        mapping(bytes32 => Agreement) agreementRegistry; // link to agreement that are accepted under this offer\n    }\n\n    /*\n    Agreement represents:\n     - billingPrice: price per byte that is collected per each period.\n     - billingPeriod: period how often billing happens in seconds.\n     - size: allocated size for the Agreement (in MB, rounded up)\n     - availableFunds: funds available for the billing of the Agreement.\n     - lastPayoutDate: When was the last time Provider was payed out. Zero either means non-existing or terminated Agreement.\n    */\n    struct Agreement {\n        uint128 billingPrice;\n        uint64 billingPeriod;\n        uint256 availableFunds;\n        uint64 size;\n        uint128 lastPayoutDate;\n    }\n\n    // offerRegistry stores the open or closed Offer for provider.\n    mapping(address => Offer) public offerRegistry;\n\n    // maps the tokenAddresses which can be used with this contract. By convention, address(0) is the native token.\n    mapping(address => bool) public isWhitelistedToken;\n\n    // maps the provider addresses which can be used for dealing with offers\n    mapping(address => bool) public isWhitelistedProvider;\n\n    event TotalCapacitySet(address indexed provider, uint64 capacity);\n    event BillingPlanSet(address indexed provider, address token, uint64 period, uint128 price);\n    event MessageEmitted(address indexed provider, bytes32[] message);\n\n    event NewAgreement(\n        bytes32[] dataReference,\n        address indexed agreementCreator,\n        address indexed provider,\n        uint64 size,\n        uint64 billingPeriod,\n        uint128 billingPrice,\n        address token,\n        uint256 availableFunds\n    );\n    event AgreementFundsDeposited(bytes32 indexed agreementReference, uint256 amount, address indexed token);\n    event AgreementFundsWithdrawn(bytes32 indexed agreementReference, uint256 amount, address indexed token);\n    event AgreementFundsPayout(bytes32 indexed agreementReference, uint256 amount, address indexed token);\n    event AgreementStopped(bytes32 indexed agreementReference);\n\n    function initialize() public initializer {\n        __Ownable_init();\n        __Pausable_init();\n    }\n\n    /**\n    @notice whitelist a token or remove the token from whitelist\n    @param token the token from whom you want to set the whitelisted\n    @param isWhiteListed whether you want to whitelist the token or put it from the whitelist.\n    */\n    function setWhitelistedTokens(address token, bool isWhiteListed) public onlyOwner {\n        isWhitelistedToken[token] = isWhiteListed;\n    }\n\n    /**\n    @notice whitelist a provider or remove the provider from whitelist\n    @param providerAddress the providerAddress from whom you want to set the whitelisted\n    @param isWhiteListed whether you want to whitelist the provider or put it from the whitelist.\n    */\n    function setWhitelistedProvider(address providerAddress, bool isWhiteListed) public onlyOwner {\n        isWhitelistedProvider[providerAddress] = isWhiteListed;\n    }\n\n    /**\n    >> FOR PROVIDER\n    @notice set the totalCapacity and billingPlans of a Offer.\n    @dev\n    - Use this function when initiating an Offer or when the users wants to change more than one parameter at once.\n    - make sure that any period * prices does not cause an overflow, as this can never be accepted (REF_MAX_PRICE) and hence is pointless\n    - only whitelisted tokens are allowed to make an offer for\n    - if there are two tokens, and two billingPrice/periods pairs per token, then boundaries[0] == 1.\n      This makes the first two billingPeriod/prices pairs to apply to the first token ([tokens[0]]) and the second pairs to the second token.\n    - make sure that the length of billingPeriods and billingPrices is of equal length. If billingPeriods is longer than prices => array index out of bounds error. If prices longer than period => the prices in higher indeces won't be considered\n    @param capacity the amount of MB offered. If already active before and set to 0, existing contracts can't be prolonged / re-started, no new contracts can be started.\n    @param billingPeriods the offered periods. Length must be equal to the length of billingPrices. The first index of the multi dem array corresponds with the address in tokens at the same index\n    @param billingPrices the prices for the offered periods. Each entry at index corresponds to the same index at periods. The first index of the multi dem array corresponds with the address in tokens at the same index\n    @param tokens the tokens for which an offer is made. By convention, address(0) is the native currency.\n    @param message the Provider may include a message (e.g. his nodeID).  Message should be structured such that the first two bits specify the message type, followed with the message). 0x01 == nodeID\n    */\n    function setOffer(\n        uint64 capacity,\n        uint64[][] memory billingPeriods,\n        uint128[][] memory billingPrices,\n        address[] memory tokens,\n        bytes32[] memory message\n    ) public whenNotPaused whitelistedProvider(msg.sender) {\n        Offer storage offer = offerRegistry[msg.sender];\n        setTotalCapacity(capacity);\n        _setBillingPlansWithMultipleTokens(offer, billingPeriods, billingPrices, tokens);\n        if (message.length > 0) {\n            _emitMessage(message);\n        }\n    }\n\n    /**\n    >> FOR PROVIDER\n    @notice sets total capacity of Offer.\n    @param capacity the new capacity\n    */\n    function setTotalCapacity(uint64 capacity) public whenNotPaused whitelistedProvider(msg.sender) {\n        require(capacity != 0, \"StorageManager: Capacity has to be greater then zero\");\n        Offer storage offer = offerRegistry[msg.sender];\n        offer.totalCapacity = capacity;\n        emit TotalCapacitySet(msg.sender, capacity);\n    }\n\n    /**\n    >> FOR PROVIDER\n    @notice stops the Offer. It sets the totalCapacity to 0 which indicates terminated Offer.\n    @dev no new Agreement can be created and no existing Agreement can be prolonged. All existing Agreement are still valid for the amount of periods still deposited.\n    */\n    function terminateOffer() public whitelistedProvider(msg.sender) {\n        Offer storage offer = offerRegistry[msg.sender];\n        require(offer.totalCapacity != 0, \"StorageManager: Offer for this Provider doesn't exist\");\n        offer.totalCapacity = 0;\n        emit TotalCapacitySet(msg.sender, 0);\n    }\n\n    /**\n    >> FOR PROVIDER\n    @notice set the billing plans for an Offer.\n    @dev\n    - setting the price to 0 means that a particular period is not offered, which can be used to remove a period from the offer.\n    - make sure that any period * prices does not cause an overflow, as this can never be accepted and hence is pointless.\n    - the length of tokens array must always be one shorter than the length of the boundaries array (otherwise you get an array index out of bounds error)\n    - make sure that the length of billingPeriods and billingPrices is of equal length. If billingPeriods is longer than prices => array index out of bounds error. If prices longer than period => the prices in higher indeces won't be considered\n    @param billingPeriods the offered periods. Length must be equal to billingPrices. The first index of the multi dem array corresponds with the address in tokens at the same index\n    @param billingPrices the prices for the offered periods. Each entry at index corresponds to the same index at periods. 0 means that the particular period is not offered. The first index of the multi dem array corresponds with the address in tokens at the same index\n    */\n    function setBillingPlans(\n        uint64[][] memory billingPeriods,\n        uint128[][] memory billingPrices,\n        address[] memory tokens\n    ) public whenNotPaused whitelistedProvider(msg.sender) {\n        Offer storage offer = offerRegistry[msg.sender];\n        require(offer.totalCapacity != 0, \"StorageManager: Offer for this Provider doesn't exist\");\n        _setBillingPlansWithMultipleTokens(offer, billingPeriods, billingPrices, tokens);\n    }\n\n    /**\n    >> FOR PROVIDER\n    @param message the Provider may send a message (e.g. his nodeID). Message should be structured such that the first two bits specify the message type, followed with the message). 0x01 == nodeID\n    */\n    function emitMessage(bytes32[] memory message) public {\n        _emitMessage(message);\n    }\n\n    /**\n    >> FOR CONSUMER\n    @notice new Agreement for given Offer\n    @dev\n     - The to-be-pinned data reference's size in MB (rounded up) must be equal in size to param size.\n     - Provider can reject to pin data reference when it exceeds specified size.\n     - The ownership of Agreement is enforced with agreementReference structure which is calculated as: hash(msg.sender, dataReference)\n     - if the token is not the native currency, then the contract must be first be given allowance to transfer tokens in it's posession.\n     Contains execution of the transferFrom on external token contract before all the stage changes are performed.\n     As a result if a token will perform a callback to the StorageManager,\n     it may lead to a reentrancy attack. Hence additional attention should be paid while reviewing this method of a token before whitelisting.\n    @param dataReference the reference to an Data Source, can be several things.\n    @param provider the provider from which is proposed to take a Offer.\n    @param size the size of the to-be-pinned file in MB (rounded up).\n    @param billingPeriod the chosen period for billing.\n    @param token the token in which you want to make the agreement. By convention: address(0) is the native currency\n    @param amount if token is set, this is the amount of tokens that is transfered\n    @param dataReferencesOfAgreementToPayOut the data references of agreements which must be payed out. Pass this when there is no capacity. Order should equal order of creatorsOfAgreementToPayOut and tokensOfAgreementToPayOut\n    @param creatorsOfAgreementToPayOut the creators of agreements which must be payed out. Pass this when there is no capacity. The order should match the order of dataReferenceOfAgreementToPayOut and tokensOfAgreementToPayOut\n    @param tokenOfAgreementsToPayOut the token address of agreements which must be payed out. Pass this when there is no capacity.\n    */\n    function newAgreement(\n        bytes32[] memory dataReference,\n        address provider,\n        uint64 size,\n        uint64 billingPeriod,\n        address token,\n        uint256 amount,\n        bytes32[][] memory dataReferencesOfAgreementToPayOut,\n        address[] memory creatorsOfAgreementToPayOut,\n        address tokenOfAgreementsToPayOut\n    ) public payable whenNotPaused {\n        // Can not use modifier for this check as getting error that stack to deep\n        require(isWhitelistedProvider[provider], \"StorageManager: provider is not whitelisted\");\n        Offer storage offer = offerRegistry[provider];\n        require(billingPeriod != 0, \"StorageManager: Billing period of 0 not allowed\");\n        require(size > 0, \"StorageManager: Size has to be bigger then 0\");\n        require(offer.totalCapacity != 0, \"StorageManager: Offer for this Provider doesn't exist\");\n        require(isWhitelistedToken[token], \"StorageManager: not possible to interact witht this token\");\n        // Allow to enforce payout funds and close of agreements that are already expired,\n        // which should free needed capacity, if the capacity is becoming depleted.\n        if (dataReferencesOfAgreementToPayOut.length > 0) {\n            _payoutFunds(\n                dataReferencesOfAgreementToPayOut,\n                creatorsOfAgreementToPayOut,\n                tokenOfAgreementsToPayOut,\n                payable(provider)\n            );\n        }\n        // the agreementReference consists of the hash of the dataReference, msg.sender and the tokenAdddress, to allow:\n        // - multiple people to register an agreement for the same file\n        // - one person to register multiple agreements for the same file, but with different tokens\n        // - link the token to the agreement, such that we do the accounting properly\n        bytes32 agreementReference = getAgreementReference(dataReference, msg.sender, token);\n        // If the current agreement is still running (but for example already expired, eq. ran out of the funds in past)\n        // we need to payout all the funds. AgreementStopped can be emitted as part of this call if no\n        if (offer.agreementRegistry[agreementReference].lastPayoutDate != 0) {\n            bytes32[][] memory dataReferenceOfAgreementToPayout = new bytes32[][](1);\n            address[] memory creators = new address[](1);\n            dataReferenceOfAgreementToPayout[0] = dataReference;\n            creators[0] = msg.sender;\n            _payoutFunds(dataReferenceOfAgreementToPayout, creators, token, payable(provider));\n        }\n        uint128 billingPrice = offer.billingPlansForToken[token][billingPeriod];\n        require(billingPrice != 0, \"StorageManager: Billing price doesn't exist for Offer\");\n        // can only define agreement here, because otherwise StakeTooDeep error\n        Agreement storage agreement = offer.agreementRegistry[agreementReference];\n        // Adding to previous availableFunds as the agreement could have been expired\n        // and Consumer is reactivating it, so in order not to loose any previous funds.\n        if (_isNativeToken(token)) {\n            amount = msg.value;\n        }\n\n        agreement.availableFunds = agreement.availableFunds.add(amount);\n        require(\n            agreement.availableFunds >= size.mul(billingPrice),\n            \"StorageManager: Funds deposited has to be for at least one billing period\"\n        );\n        agreement.size = size;\n        agreement.billingPrice = billingPrice;\n        agreement.billingPeriod = billingPeriod;\n\n        // Set to current time as no payout was made yet and this information is\n        // used to track spent funds.\n        agreement.lastPayoutDate = uint128(_time());\n        offer = offerRegistry[provider];\n        offer.utilizedCapacity = uint64(offer.utilizedCapacity.add(size));\n        require(offer.utilizedCapacity <= offer.totalCapacity, \"StorageManager: Insufficient Offer's capacity\");\n\n        if (!_isNativeToken(token)) {\n            IERC20(token).safeTransferFrom(msg.sender, address(this), amount);\n        }\n        emit NewAgreement(\n            dataReference,\n            msg.sender,\n            provider,\n            size,\n            billingPeriod,\n            billingPrice,\n            token,\n            agreement.availableFunds\n        );\n    }\n\n    /**\n    >> FOR CONSUMER\n    @notice deposits new funds to the Agreement.\n    @dev\n        - depositing funds to Agreement that is linked to terminated Offer is not possible\n        - depositing funds to Agreement that already is expired (eq. ran out of funds at some point) is not possible.\n          Call NewAgreement instead. The data needs to be re-provided though.\n        - if the token is not the native currency, then the contract must be first be given allowance to transfer tokens in it's posession.\n    @param dataReference data reference where should be deposited funds.\n    @param provider the address of the provider of the Offer.\n    */\n    function depositFunds(\n        address token,\n        uint256 amount,\n        bytes32[] memory dataReference,\n        address provider\n    ) public payable whenNotPaused whitelistedProvider(provider) {\n        bytes32 agreementReference = getAgreementReference(dataReference, msg.sender, token);\n        require(isWhitelistedToken[token], \"StorageManager: Token is not whitelisted\");\n        Offer storage offer = offerRegistry[provider];\n        require(offer.totalCapacity != 0, \"StorageManager: Offer for this Provider doesn't exist\");\n        Agreement storage agreement = offer.agreementRegistry[agreementReference];\n        require(agreement.size != 0, \"StorageManager: Agreement for this Offer doesn't exist\");\n        require(agreement.lastPayoutDate != 0, \"StorageManager: Agreement not active\");\n        require(\n            offer.billingPlansForToken[token][agreement.billingPeriod] == agreement.billingPrice,\n            \"StorageManager: Price not available anymore\"\n        );\n        require(\n            agreement.availableFunds.sub(_calculateSpentFunds(agreement)) >= agreement.billingPrice.mul(agreement.size),\n            \"StorageManager: Agreement already ran out of funds\"\n        );\n        bool isNativeToken = _isNativeToken(token);\n        if (isNativeToken) {\n            amount = msg.value;\n        }\n        agreement.availableFunds = agreement.availableFunds.add(amount);\n        if (!isNativeToken) {\n            // contract must be allowed to transfer\n            IERC20(token).safeTransferFrom(msg.sender, address(this), amount);\n        }\n        emit AgreementFundsDeposited(agreementReference, amount, token);\n    }\n\n    /**\n    >> FOR CONSUMER\n    @notice withdraw funds from Agreement.\n    @dev\n        - if amount is zero then all withdrawable funds are transferred (eq. all available funds minus funds for still non-payed out periods and current period)\n        - if Agreement is terminated Consumer can withdraw all remaining funds\n        - if the token is not the native currency, then the contract must be first be given allowance to transfer tokens in it's posession.\n    @param dataReference the data reference of agreement to be funds withdrawn from\n    @param provider the address of the provider of the Offer.\n    @param tokens the tokens in which to withdraw. By convention, address(0) is the native currency.\n    @param amounts the value you want to withdraw for each token\n    */\n    function withdrawFunds(\n        bytes32[] memory dataReference,\n        address provider,\n        address[] memory tokens,\n        uint256[] memory amounts\n    ) public {\n        Offer storage offer = offerRegistry[provider];\n        for (uint256 i; i < tokens.length; i++) {\n            uint256 amount = amounts[i];\n            address token = tokens[i];\n            bytes32 agreementReference = getAgreementReference(dataReference, msg.sender, token);\n            Agreement storage agreement = offer.agreementRegistry[agreementReference];\n            require(agreement.size != 0, \"StorageManager: Agreement for this Offer doesn't exist\");\n            uint256 maxWithdrawableFunds;\n            if (agreement.lastPayoutDate == 0) {\n                // Agreement is inactive, consumer can withdraw all funds\n                maxWithdrawableFunds = agreement.availableFunds;\n            } else {\n                // Consumer can withdraw all funds except for those already used for past storage hosting\n                // AND for current period\n                maxWithdrawableFunds = agreement.availableFunds.sub(_calculateSpentFunds(agreement)).sub(\n                    (agreement.billingPrice * agreement.size)\n                );\n            }\n\n            if (amount == 0) {\n                amount = maxWithdrawableFunds;\n            }\n            require(amount <= maxWithdrawableFunds, \"StorageManager: Amount is too big\");\n            agreement.availableFunds = agreement.availableFunds.sub(amount);\n            require(amount > 0, \"StorageManager: Nothing to withdraw\");\n\n            if (_isNativeToken(token)) {\n                (bool success, ) = msg.sender.call{value: amount}(\"\");\n                require(success, \"Transfer failed.\");\n            } else {\n                IERC20(token).safeTransfer(msg.sender, amount);\n            }\n            emit AgreementFundsWithdrawn(agreementReference, amount, token);\n        }\n    }\n\n    /**\n    >> FOR PROVIDER\n    @notice payout already earned funds of one or more Agreement\n    @dev\n    - Provider must call an expired agreement themselves as soon as the agreement is expired, to add back the capacity to their Offer.\n    - Payout can be triggered by other events as well. Like in newAgreement call with either existing agreement or when other\n      Agreements are passed to the agreementsReferencesToBePayedOut array.\n    @param dataReferencesOfAgreementToPayOut the data references of the agreement to pay\n    @param creatorsOfAgreementToPayOut the creators that made the agreement to pay\n    @param tokensOfAgreementsToPayOut the tokens of the agreement to pay out\n    */\n\n    function payoutFunds(\n        bytes32[][] memory dataReferencesOfAgreementToPayOut,\n        address[] memory creatorsOfAgreementToPayOut,\n        address tokensOfAgreementsToPayOut,\n        address payable provider\n    ) public whitelistedProvider(provider) {\n        _payoutFunds(\n            dataReferencesOfAgreementToPayOut,\n            creatorsOfAgreementToPayOut,\n            tokensOfAgreementsToPayOut,\n            provider\n        );\n    }\n\n    /**\n    @notice sets the billing plans for multiple tokens.\n    @dev\n    - the billingPeriods and billingPrices hold the period/price pair for all tokens.\n    - the length of tokens array must always be one shorter than the length of the boundaries array (otherwise you get an array index out of bounds error)\n    - make sure that the length of billingPeriods and billingPrices is of equal length. If billingPeriods is longer than prices => array index out of bounds error. If prices longer than period => the prices in higher indeces won't be considered\n    @param offer the offer for which the billingPlan is set\n    @param billingPeriods the offered periods. Length must be equal to the length of billingPrices. The first index of the multi dem array corresponds with the address in tokens at the same index\n    @param billingPrices the prices for the offered periods. Each entry at index corresponds to the same index at periods. 0 means that the particular period is not offered. The first index of the multi dem array corresponds with the address in tokens at the same index\n    @param tokens the tokens for which an offer is made. By convention, address(0) is the native currency.\n    */\n    function _setBillingPlansWithMultipleTokens(\n        Offer storage offer,\n        uint64[][] memory billingPeriods,\n        uint128[][] memory billingPrices,\n        address[] memory tokens\n    ) internal {\n        // iterate once for each token\n        for (uint256 i; i < tokens.length; i++) {\n            // for each token, list all period/price pairs\n            for (uint256 j; j < billingPeriods[i].length; j++) {\n                _setBillingPlanForToken(offer, tokens[i], billingPeriods[i][j], billingPrices[i][j]);\n            }\n        }\n    }\n\n    function hasUtilizedCapacity(address storer) public view returns (bool) {\n        return (offerRegistry[storer].utilizedCapacity != 0);\n    }\n\n    // Only one token can be used to pay out\n    function _payoutFunds(\n        bytes32[][] memory dataReferenceOfAgreementToPayOut,\n        address[] memory creatorsOfAgreementToPayOut,\n        address tokenOfAgreementsToPayOut,\n        address payable provider\n    ) internal {\n        Offer storage offer = offerRegistry[provider];\n        uint256 toTransfer;\n\n        for (uint8 i = 0; i < dataReferenceOfAgreementToPayOut.length; i++) {\n            bytes32 agreementReference =\n                getAgreementReference(\n                    dataReferenceOfAgreementToPayOut[i],\n                    creatorsOfAgreementToPayOut[i],\n                    tokenOfAgreementsToPayOut\n                );\n            Agreement storage agreement = offer.agreementRegistry[agreementReference];\n            require(agreement.size != 0, \"StorageManager: Agreement for this Offer doesn't exist\");\n            // Was already payed out and terminated\n            require(agreement.lastPayoutDate != 0, \"StorageManager: Agreement is inactive\");\n\n            uint256 spentFunds = _calculateSpentFunds(agreement);\n            if (spentFunds > 0) {\n                agreement.availableFunds = agreement.availableFunds.sub(spentFunds);\n                toTransfer = toTransfer.add(spentFunds);\n\n                // Agreement ran out of funds ==> Agreement is expiring\n                if (agreement.availableFunds < agreement.billingPrice.mul(agreement.size)) {\n                    // Agreement becomes inactive\n                    agreement.lastPayoutDate = 0;\n\n                    // Add back capacity\n                    offer.utilizedCapacity = uint64(offer.utilizedCapacity.sub(agreement.size));\n                    emit AgreementStopped(agreementReference);\n                } else {\n                    // Provider called this during active agreement which has still funds to run\n                    agreement.lastPayoutDate = uint128(_time());\n                }\n\n                emit AgreementFundsPayout(agreementReference, spentFunds, tokenOfAgreementsToPayOut);\n            }\n        }\n\n        if (toTransfer > 0) {\n            if (_isNativeToken(tokenOfAgreementsToPayOut)) {\n                (bool success, ) = provider.call{value: toTransfer}(\"\");\n                require(success, \"StorageManager: Transfer failed.\");\n            } else {\n                IERC20(tokenOfAgreementsToPayOut).safeTransfer(provider, toTransfer);\n            }\n        }\n    }\n\n    /**\n     * @dev Called by a pauser to pause, triggers stopped state.\n     */\n    function pause() public onlyOwner whenNotPaused {\n        _pause();\n    }\n\n    /**\n     * @dev Called by a pauser to unpause, returns to normal state.\n     */\n    function unpause() public onlyOwner whenPaused {\n        _unpause();\n    }\n\n    /**\n    @notice get the agreementReference.\n    the agreementReference consists of the hash of the dataReference, msg.sender and the tokenAdddress, to allow:\n     - multiple people to register an agreement for the same file\n     - one person to register multiple agreements for the same file, but with different tokens\n     - link the token to the agreement, such that we do the accounting properly\n    @param dataReference the dataReference of the agreement\n    @param creator the creator of the agreement\n    @param token the token, which is used as a means of payment for the agreement.\n    */\n    function getAgreementReference(\n        bytes32[] memory dataReference,\n        address creator,\n        address token\n    ) public pure returns (bytes32) {\n        return keccak256(abi.encodePacked(creator, dataReference, token));\n    }\n\n    function _calculateSpentFunds(Agreement memory agreement) internal view returns (uint256) {\n        // TODO: Can be most probably smaller then uint256\n        uint256 totalPeriodPrice = agreement.size.mul(agreement.billingPrice);\n        uint256 periodsSinceLastPayout = _time().sub(agreement.lastPayoutDate).div(agreement.billingPeriod);\n        uint256 spentFunds = periodsSinceLastPayout.mul(totalPeriodPrice);\n\n        // Round the funds based on the available funds\n        if (spentFunds > agreement.availableFunds) {\n            spentFunds = agreement.availableFunds.div(totalPeriodPrice).mul(totalPeriodPrice);\n        }\n\n        return spentFunds;\n    }\n\n    /*\n    @dev Only non-zero prices periods are considered to be active. To remove a period, set it's price to 0\n    */\n    function _setBillingPlanForToken(\n        Offer storage offer,\n        address token,\n        uint64 period,\n        uint128 price\n    ) internal {\n        require(period <= MAX_BILLING_PERIOD, \"StorageManager: Billing period exceed max. length\");\n        require(isWhitelistedToken[token], \"StorageManager: Token is not whitelisted\");\n        offer.billingPlansForToken[token][period] = price;\n        emit BillingPlanSet(msg.sender, token, period, price);\n    }\n\n    function _emitMessage(bytes32[] memory message) internal {\n        emit MessageEmitted(msg.sender, message);\n    }\n\n    /**\n    @dev Helper function for testing timing overloaded in testing contract\n    */\n    function _time() internal view virtual returns (uint256) {\n        return now;\n    }\n\n    /**\n    @notice if use a native token\n     */\n    function _isNativeToken(address token) internal pure returns (bool) {\n        return token == address(0);\n    }\n\n    modifier whitelistedProvider(address provider) {\n        require(isWhitelistedProvider[provider], \"StorageManager: provider is not whitelisted\");\n        _;\n    }\n}\n",
  "sourcePath": "/Users/naz_dou/Documents/Projects/IovLabs/rif-marketplace-storage/contracts/StorageManager.sol",
  "ast": {
    "absolutePath": "/Users/naz_dou/Documents/Projects/IovLabs/rif-marketplace-storage/contracts/StorageManager.sol",
    "exportedSymbols": {
      "StorageManager": [
        1910
      ]
    },
    "id": 1911,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 440,
        "literals": [
          "solidity",
          "0.6",
          ".12"
        ],
        "nodeType": "PragmaDirective",
        "src": "32:23:2"
      },
      {
        "id": 441,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "56:33:2"
      },
      {
        "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
        "file": "@openzeppelin/contracts/math/SafeMath.sol",
        "id": 442,
        "nodeType": "ImportDirective",
        "scope": 1911,
        "sourceUnit": 2753,
        "src": "91:51:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC20/SafeERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/SafeERC20.sol",
        "id": 443,
        "nodeType": "ImportDirective",
        "scope": 1911,
        "sourceUnit": 3547,
        "src": "143:59:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "id": 444,
        "nodeType": "ImportDirective",
        "scope": 1911,
        "sourceUnit": 3334,
        "src": "203:56:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts-ethereum-package/contracts/access/Ownable.sol",
        "file": "@openzeppelin/contracts-ethereum-package/contracts/access/Ownable.sol",
        "id": 445,
        "nodeType": "ImportDirective",
        "scope": 1911,
        "sourceUnit": 2314,
        "src": "260:79:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts-ethereum-package/contracts/utils/Pausable.sol",
        "file": "@openzeppelin/contracts-ethereum-package/contracts/utils/Pausable.sol",
        "id": 446,
        "nodeType": "ImportDirective",
        "scope": 1911,
        "sourceUnit": 2425,
        "src": "340:79:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 448,
              "name": "OwnableUpgradeSafe",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2313,
              "src": "674:18:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_OwnableUpgradeSafe_$2313",
                "typeString": "contract OwnableUpgradeSafe"
              }
            },
            "id": 449,
            "nodeType": "InheritanceSpecifier",
            "src": "674:18:2"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 450,
              "name": "PausableUpgradeSafe",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2424,
              "src": "694:19:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_PausableUpgradeSafe_$2424",
                "typeString": "contract PausableUpgradeSafe"
              }
            },
            "id": 451,
            "nodeType": "InheritanceSpecifier",
            "src": "694:19:2"
          }
        ],
        "contractDependencies": [
          2108,
          2183,
          2313,
          2424
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 447,
          "nodeType": "StructuredDocumentation",
          "src": "421:226:2",
          "text": "@title StorageManager\n @author Rinke Hendriksen <rinke@iovlabs.org>\n @author Adam Uhlir <adam@iovlabs.org>\n @notice Providers can offer their storage space and list their price and Consumers can take these offers"
        },
        "fullyImplemented": true,
        "id": 1910,
        "linearizedBaseContracts": [
          1910,
          2424,
          2313,
          2108,
          2183
        ],
        "name": "StorageManager",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 454,
            "libraryName": {
              "contractScope": null,
              "id": 452,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2752,
              "src": "726:8:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$2752",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "720:27:2",
            "typeName": {
              "id": 453,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "739:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 457,
            "libraryName": {
              "contractScope": null,
              "id": 455,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2752,
              "src": "758:8:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$2752",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "752:27:2",
            "typeName": {
              "id": 456,
              "name": "uint128",
              "nodeType": "ElementaryTypeName",
              "src": "771:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint128",
                "typeString": "uint128"
              }
            }
          },
          {
            "id": 460,
            "libraryName": {
              "contractScope": null,
              "id": 458,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2752,
              "src": "790:8:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$2752",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "784:26:2",
            "typeName": {
              "id": 459,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "803:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            }
          },
          {
            "id": 463,
            "libraryName": {
              "contractScope": null,
              "id": 461,
              "name": "SafeERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3546,
              "src": "821:9:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeERC20_$3546",
                "typeString": "library SafeERC20"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "815:27:2",
            "typeName": {
              "contractScope": null,
              "id": 462,
              "name": "IERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3333,
              "src": "835:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC20_$3333",
                "typeString": "contract IERC20"
              }
            }
          },
          {
            "constant": true,
            "id": 466,
            "mutability": "constant",
            "name": "MAX_BILLING_PERIOD",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 1910,
            "src": "848:53:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 464,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "848:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3135353532303030",
              "id": 465,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "893:8:2",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_15552000_by_1",
                "typeString": "int_const 15552000"
              },
              "value": "15552000"
            },
            "visibility": "private"
          },
          {
            "canonicalName": "StorageManager.Offer",
            "id": 481,
            "members": [
              {
                "constant": false,
                "id": 468,
                "mutability": "mutable",
                "name": "utilizedCapacity",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 481,
                "src": "1385:23:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 467,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "1385:6:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 470,
                "mutability": "mutable",
                "name": "totalCapacity",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 481,
                "src": "1418:20:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 469,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "1418:6:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 476,
                "mutability": "mutable",
                "name": "billingPlansForToken",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 481,
                "src": "1448:67:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint64_$_t_uint128_$_$",
                  "typeString": "mapping(address => mapping(uint64 => uint128))"
                },
                "typeName": {
                  "id": 475,
                  "keyType": {
                    "id": 471,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1456:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "1448:46:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint64_$_t_uint128_$_$",
                    "typeString": "mapping(address => mapping(uint64 => uint128))"
                  },
                  "valueType": {
                    "id": 474,
                    "keyType": {
                      "id": 472,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "1475:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1467:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_uint64_$_t_uint128_$",
                      "typeString": "mapping(uint64 => uint128)"
                    },
                    "valueType": {
                      "id": 473,
                      "name": "uint128",
                      "nodeType": "ElementaryTypeName",
                      "src": "1485:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 480,
                "mutability": "mutable",
                "name": "agreementRegistry",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 481,
                "src": "1525:47:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Agreement_$492_storage_$",
                  "typeString": "mapping(bytes32 => struct StorageManager.Agreement)"
                },
                "typeName": {
                  "id": 479,
                  "keyType": {
                    "id": 477,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1533:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "1525:29:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Agreement_$492_storage_$",
                    "typeString": "mapping(bytes32 => struct StorageManager.Agreement)"
                  },
                  "valueType": {
                    "contractScope": null,
                    "id": 478,
                    "name": "Agreement",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 492,
                    "src": "1544:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                      "typeString": "struct StorageManager.Agreement"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Offer",
            "nodeType": "StructDefinition",
            "scope": 1910,
            "src": "1362:273:2",
            "visibility": "public"
          },
          {
            "canonicalName": "StorageManager.Agreement",
            "id": 492,
            "members": [
              {
                "constant": false,
                "id": 483,
                "mutability": "mutable",
                "name": "billingPrice",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 492,
                "src": "2111:20:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                },
                "typeName": {
                  "id": 482,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "2111:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 485,
                "mutability": "mutable",
                "name": "billingPeriod",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 492,
                "src": "2141:20:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 484,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "2141:6:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 487,
                "mutability": "mutable",
                "name": "availableFunds",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 492,
                "src": "2171:22:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 486,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2171:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 489,
                "mutability": "mutable",
                "name": "size",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 492,
                "src": "2203:11:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 488,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "2203:6:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 491,
                "mutability": "mutable",
                "name": "lastPayoutDate",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 492,
                "src": "2224:22:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                },
                "typeName": {
                  "id": 490,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "2224:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Agreement",
            "nodeType": "StructDefinition",
            "scope": 1910,
            "src": "2084:169:2",
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "8f5c5fc8",
            "id": 496,
            "mutability": "mutable",
            "name": "offerRegistry",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 1910,
            "src": "2326:46:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Offer_$481_storage_$",
              "typeString": "mapping(address => struct StorageManager.Offer)"
            },
            "typeName": {
              "id": 495,
              "keyType": {
                "id": 493,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2334:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2326:25:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Offer_$481_storage_$",
                "typeString": "mapping(address => struct StorageManager.Offer)"
              },
              "valueType": {
                "contractScope": null,
                "id": 494,
                "name": "Offer",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 481,
                "src": "2345:5:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                  "typeString": "struct StorageManager.Offer"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "ab37f486",
            "id": 500,
            "mutability": "mutable",
            "name": "isWhitelistedToken",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 1910,
            "src": "2495:50:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
              "typeString": "mapping(address => bool)"
            },
            "typeName": {
              "id": 499,
              "keyType": {
                "id": 497,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2503:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2495:24:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                "typeString": "mapping(address => bool)"
              },
              "valueType": {
                "id": 498,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "2514:4:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "9aad18ca",
            "id": 504,
            "mutability": "mutable",
            "name": "isWhitelistedProvider",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 1910,
            "src": "2629:53:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
              "typeString": "mapping(address => bool)"
            },
            "typeName": {
              "id": 503,
              "keyType": {
                "id": 501,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2637:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2629:24:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                "typeString": "mapping(address => bool)"
              },
              "valueType": {
                "id": 502,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "2648:4:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 510,
            "name": "TotalCapacitySet",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 509,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 506,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "provider",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 510,
                  "src": "2712:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 505,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2712:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 508,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "capacity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 510,
                  "src": "2738:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 507,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "2738:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2711:43:2"
            },
            "src": "2689:66:2"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 520,
            "name": "BillingPlanSet",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 519,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 512,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "provider",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 520,
                  "src": "2781:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 511,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2781:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 514,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 520,
                  "src": "2807:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 513,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2807:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 516,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "period",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 520,
                  "src": "2822:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 515,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "2822:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 518,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "price",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 520,
                  "src": "2837:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 517,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "2837:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2780:71:2"
            },
            "src": "2760:92:2"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 527,
            "name": "MessageEmitted",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 526,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 522,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "provider",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 527,
                  "src": "2878:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 521,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2878:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 525,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "message",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 527,
                  "src": "2904:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 523,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2904:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 524,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2904:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2877:45:2"
            },
            "src": "2857:66:2"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 546,
            "name": "NewAgreement",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 545,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 530,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "dataReference",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 546,
                  "src": "2957:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 528,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2957:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 529,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2957:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 532,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "agreementCreator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 546,
                  "src": "2990:32:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 531,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2990:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 534,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "provider",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 546,
                  "src": "3032:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 533,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3032:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 536,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "size",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 546,
                  "src": "3066:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 535,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "3066:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 538,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "billingPeriod",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 546,
                  "src": "3087:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 537,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "3087:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 540,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "billingPrice",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 546,
                  "src": "3117:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 539,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "3117:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 542,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 546,
                  "src": "3147:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 541,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3147:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 544,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "availableFunds",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 546,
                  "src": "3170:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 543,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3170:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2947:251:2"
            },
            "src": "2929:270:2"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 554,
            "name": "AgreementFundsDeposited",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 553,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 548,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "agreementReference",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 554,
                  "src": "3234:34:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 547,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3234:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 550,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 554,
                  "src": "3270:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 549,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3270:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 552,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 554,
                  "src": "3286:21:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 551,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3286:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3233:75:2"
            },
            "src": "3204:105:2"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 562,
            "name": "AgreementFundsWithdrawn",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 561,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 556,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "agreementReference",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 562,
                  "src": "3344:34:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 555,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3344:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 558,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 562,
                  "src": "3380:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 557,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3380:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 560,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 562,
                  "src": "3396:21:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 559,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3396:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3343:75:2"
            },
            "src": "3314:105:2"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 570,
            "name": "AgreementFundsPayout",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 569,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 564,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "agreementReference",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 570,
                  "src": "3451:34:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 563,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3451:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 566,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 570,
                  "src": "3487:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 565,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3487:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 568,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 570,
                  "src": "3503:21:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 567,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3503:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3450:75:2"
            },
            "src": "3424:102:2"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 574,
            "name": "AgreementStopped",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 573,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 572,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "agreementReference",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 574,
                  "src": "3554:34:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 571,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3554:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3553:36:2"
            },
            "src": "3531:59:2"
          },
          {
            "body": {
              "id": 585,
              "nodeType": "Block",
              "src": "3637:60:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 579,
                      "name": "__Ownable_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2213,
                      "src": "3647:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 580,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3647:16:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 581,
                  "nodeType": "ExpressionStatement",
                  "src": "3647:16:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 582,
                      "name": "__Pausable_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2347,
                      "src": "3673:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 583,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3673:17:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 584,
                  "nodeType": "ExpressionStatement",
                  "src": "3673:17:2"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "8129fc1c",
            "id": 586,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 577,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 576,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2156,
                  "src": "3625:11:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3625:11:2"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 575,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3615:2:2"
            },
            "returnParameters": {
              "id": 578,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3637:0:2"
            },
            "scope": 1910,
            "src": "3596:101:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 602,
              "nodeType": "Block",
              "src": "4029:58:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 600,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 596,
                        "name": "isWhitelistedToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 500,
                        "src": "4039:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 598,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 597,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 589,
                        "src": "4058:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4039:25:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 599,
                      "name": "isWhiteListed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 591,
                      "src": "4067:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4039:41:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 601,
                  "nodeType": "ExpressionStatement",
                  "src": "4039:41:2"
                }
              ]
            },
            "documentation": {
              "id": 587,
              "nodeType": "StructuredDocumentation",
              "src": "3703:239:2",
              "text": "@notice whitelist a token or remove the token from whitelist\n@param token the token from whom you want to set the whitelisted\n@param isWhiteListed whether you want to whitelist the token or put it from the whitelist."
            },
            "functionSelector": "39888705",
            "id": 603,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 594,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 593,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2258,
                  "src": "4019:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4019:9:2"
              }
            ],
            "name": "setWhitelistedTokens",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 592,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 589,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 603,
                  "src": "3977:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 588,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3977:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 591,
                  "mutability": "mutable",
                  "name": "isWhiteListed",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 603,
                  "src": "3992:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 590,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3992:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3976:35:2"
            },
            "returnParameters": {
              "id": 595,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4029:0:2"
            },
            "scope": 1910,
            "src": "3947:140:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 619,
              "nodeType": "Block",
              "src": "4460:71:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 617,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 613,
                        "name": "isWhitelistedProvider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 504,
                        "src": "4470:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 615,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 614,
                        "name": "providerAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 606,
                        "src": "4492:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4470:38:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 616,
                      "name": "isWhiteListed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 608,
                      "src": "4511:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4470:54:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 618,
                  "nodeType": "ExpressionStatement",
                  "src": "4470:54:2"
                }
              ]
            },
            "documentation": {
              "id": 604,
              "nodeType": "StructuredDocumentation",
              "src": "4093:268:2",
              "text": "@notice whitelist a provider or remove the provider from whitelist\n@param providerAddress the providerAddress from whom you want to set the whitelisted\n@param isWhiteListed whether you want to whitelist the provider or put it from the whitelist."
            },
            "functionSelector": "82c4dba5",
            "id": 620,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 611,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 610,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2258,
                  "src": "4450:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4450:9:2"
              }
            ],
            "name": "setWhitelistedProvider",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 609,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 606,
                  "mutability": "mutable",
                  "name": "providerAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 620,
                  "src": "4398:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 605,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4398:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 608,
                  "mutability": "mutable",
                  "name": "isWhiteListed",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 620,
                  "src": "4423:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 607,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4423:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4397:45:2"
            },
            "returnParameters": {
              "id": 612,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4460:0:2"
            },
            "scope": 1910,
            "src": "4366:165:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 674,
              "nodeType": "Block",
              "src": "6596:269:2",
              "statements": [
                {
                  "assignments": [
                    647
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 647,
                      "mutability": "mutable",
                      "name": "offer",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 674,
                      "src": "6606:19:2",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                        "typeString": "struct StorageManager.Offer"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 646,
                        "name": "Offer",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 481,
                        "src": "6606:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 652,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 648,
                      "name": "offerRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 496,
                      "src": "6628:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Offer_$481_storage_$",
                        "typeString": "mapping(address => struct StorageManager.Offer storage ref)"
                      }
                    },
                    "id": 651,
                    "indexExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 649,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "6642:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 650,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "6642:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "6628:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Offer_$481_storage",
                      "typeString": "struct StorageManager.Offer storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6606:47:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 654,
                        "name": "capacity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 623,
                        "src": "6680:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 653,
                      "name": "setTotalCapacity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 714,
                      "src": "6663:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint64_$returns$__$",
                        "typeString": "function (uint64)"
                      }
                    },
                    "id": 655,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6663:26:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 656,
                  "nodeType": "ExpressionStatement",
                  "src": "6663:26:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 658,
                        "name": "offer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 647,
                        "src": "6734:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 659,
                        "name": "billingPeriods",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 627,
                        "src": "6741:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_array$_t_uint64_$dyn_memory_ptr_$dyn_memory_ptr",
                          "typeString": "uint64[] memory[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 660,
                        "name": "billingPrices",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 631,
                        "src": "6757:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_array$_t_uint128_$dyn_memory_ptr_$dyn_memory_ptr",
                          "typeString": "uint128[] memory[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 661,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 634,
                        "src": "6772:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer storage pointer"
                        },
                        {
                          "typeIdentifier": "t_array$_t_array$_t_uint64_$dyn_memory_ptr_$dyn_memory_ptr",
                          "typeString": "uint64[] memory[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_array$_t_uint128_$dyn_memory_ptr_$dyn_memory_ptr",
                          "typeString": "uint128[] memory[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      ],
                      "id": 657,
                      "name": "_setBillingPlansWithMultipleTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1510,
                      "src": "6699:34:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Offer_$481_storage_ptr_$_t_array$_t_array$_t_uint64_$dyn_memory_ptr_$dyn_memory_ptr_$_t_array$_t_array$_t_uint128_$dyn_memory_ptr_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (struct StorageManager.Offer storage pointer,uint64[] memory[] memory,uint128[] memory[] memory,address[] memory)"
                      }
                    },
                    "id": 662,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6699:80:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 663,
                  "nodeType": "ExpressionStatement",
                  "src": "6699:80:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 667,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 664,
                        "name": "message",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 637,
                        "src": "6793:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 665,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "6793:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 666,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6810:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "6793:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 673,
                  "nodeType": "IfStatement",
                  "src": "6789:70:2",
                  "trueBody": {
                    "id": 672,
                    "nodeType": "Block",
                    "src": "6813:46:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 669,
                              "name": "message",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 637,
                              "src": "6840:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              }
                            ],
                            "id": 668,
                            "name": "_emitMessage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1871,
                            "src": "6827:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$__$",
                              "typeString": "function (bytes32[] memory)"
                            }
                          },
                          "id": 670,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6827:21:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 671,
                        "nodeType": "ExpressionStatement",
                        "src": "6827:21:2"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 621,
              "nodeType": "StructuredDocumentation",
              "src": "4537:1801:2",
              "text": ">> FOR PROVIDER\n@notice set the totalCapacity and billingPlans of a Offer.\n@dev\n- Use this function when initiating an Offer or when the users wants to change more than one parameter at once.\n- make sure that any period * prices does not cause an overflow, as this can never be accepted (REF_MAX_PRICE) and hence is pointless\n- only whitelisted tokens are allowed to make an offer for\n- if there are two tokens, and two billingPrice/periods pairs per token, then boundaries[0] == 1.\nThis makes the first two billingPeriod/prices pairs to apply to the first token ([tokens[0]]) and the second pairs to the second token.\n- make sure that the length of billingPeriods and billingPrices is of equal length. If billingPeriods is longer than prices => array index out of bounds error. If prices longer than period => the prices in higher indeces won't be considered\n@param capacity the amount of MB offered. If already active before and set to 0, existing contracts can't be prolonged / re-started, no new contracts can be started.\n@param billingPeriods the offered periods. Length must be equal to the length of billingPrices. The first index of the multi dem array corresponds with the address in tokens at the same index\n@param billingPrices the prices for the offered periods. Each entry at index corresponds to the same index at periods. The first index of the multi dem array corresponds with the address in tokens at the same index\n@param tokens the tokens for which an offer is made. By convention, address(0) is the native currency.\n@param message the Provider may include a message (e.g. his nodeID).  Message should be structured such that the first two bits specify the message type, followed with the message). 0x01 == nodeID"
            },
            "functionSelector": "37f4329d",
            "id": 675,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 640,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 639,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2377,
                  "src": "6550:13:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6550:13:2"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 642,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "6584:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 643,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "6584:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 644,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 641,
                  "name": "whitelistedProvider",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1909,
                  "src": "6564:19:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6564:31:2"
              }
            ],
            "name": "setOffer",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 638,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 623,
                  "mutability": "mutable",
                  "name": "capacity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 675,
                  "src": "6370:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 622,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "6370:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 627,
                  "mutability": "mutable",
                  "name": "billingPeriods",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 675,
                  "src": "6395:32:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_array$_t_uint64_$dyn_memory_ptr_$dyn_memory_ptr",
                    "typeString": "uint64[][]"
                  },
                  "typeName": {
                    "baseType": {
                      "baseType": {
                        "id": 624,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "6395:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "id": 625,
                      "length": null,
                      "nodeType": "ArrayTypeName",
                      "src": "6395:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint64_$dyn_storage_ptr",
                        "typeString": "uint64[]"
                      }
                    },
                    "id": 626,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "6395:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_array$_t_uint64_$dyn_storage_$dyn_storage_ptr",
                      "typeString": "uint64[][]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 631,
                  "mutability": "mutable",
                  "name": "billingPrices",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 675,
                  "src": "6437:32:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_array$_t_uint128_$dyn_memory_ptr_$dyn_memory_ptr",
                    "typeString": "uint128[][]"
                  },
                  "typeName": {
                    "baseType": {
                      "baseType": {
                        "id": 628,
                        "name": "uint128",
                        "nodeType": "ElementaryTypeName",
                        "src": "6437:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "id": 629,
                      "length": null,
                      "nodeType": "ArrayTypeName",
                      "src": "6437:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                        "typeString": "uint128[]"
                      }
                    },
                    "id": 630,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "6437:11:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_array$_t_uint128_$dyn_storage_$dyn_storage_ptr",
                      "typeString": "uint128[][]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 634,
                  "mutability": "mutable",
                  "name": "tokens",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 675,
                  "src": "6479:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 632,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "6479:7:2",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 633,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "6479:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 637,
                  "mutability": "mutable",
                  "name": "message",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 675,
                  "src": "6512:24:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 635,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "6512:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 636,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "6512:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6360:182:2"
            },
            "returnParameters": {
              "id": 645,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6596:0:2"
            },
            "scope": 1910,
            "src": "6343:522:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 713,
              "nodeType": "Block",
              "src": "7081:245:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 690,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 688,
                          "name": "capacity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 678,
                          "src": "7099:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 689,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7111:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "7099:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a2043617061636974792068617320746f2062652067726561746572207468656e207a65726f",
                        "id": 691,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7114:54:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9d44f67823b8890bcc3daeba4911b8e432c87d54e23377a89dc34d9396013dcf",
                          "typeString": "literal_string \"StorageManager: Capacity has to be greater then zero\""
                        },
                        "value": "StorageManager: Capacity has to be greater then zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9d44f67823b8890bcc3daeba4911b8e432c87d54e23377a89dc34d9396013dcf",
                          "typeString": "literal_string \"StorageManager: Capacity has to be greater then zero\""
                        }
                      ],
                      "id": 687,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7091:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 692,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7091:78:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 693,
                  "nodeType": "ExpressionStatement",
                  "src": "7091:78:2"
                },
                {
                  "assignments": [
                    695
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 695,
                      "mutability": "mutable",
                      "name": "offer",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 713,
                      "src": "7179:19:2",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                        "typeString": "struct StorageManager.Offer"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 694,
                        "name": "Offer",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 481,
                        "src": "7179:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 700,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 696,
                      "name": "offerRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 496,
                      "src": "7201:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Offer_$481_storage_$",
                        "typeString": "mapping(address => struct StorageManager.Offer storage ref)"
                      }
                    },
                    "id": 699,
                    "indexExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 697,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "7215:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 698,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "7215:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7201:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Offer_$481_storage",
                      "typeString": "struct StorageManager.Offer storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7179:47:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 705,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 701,
                        "name": "offer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 695,
                        "src": "7236:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer storage pointer"
                        }
                      },
                      "id": 703,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "totalCapacity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 470,
                      "src": "7236:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 704,
                      "name": "capacity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 678,
                      "src": "7258:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "7236:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 706,
                  "nodeType": "ExpressionStatement",
                  "src": "7236:30:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 708,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "7298:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 709,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "7298:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 710,
                        "name": "capacity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 678,
                        "src": "7310:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 707,
                      "name": "TotalCapacitySet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 510,
                      "src": "7281:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint64_$returns$__$",
                        "typeString": "function (address,uint64)"
                      }
                    },
                    "id": 711,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7281:38:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 712,
                  "nodeType": "EmitStatement",
                  "src": "7276:43:2"
                }
              ]
            },
            "documentation": {
              "id": 676,
              "nodeType": "StructuredDocumentation",
              "src": "6871:109:2",
              "text": ">> FOR PROVIDER\n@notice sets total capacity of Offer.\n@param capacity the new capacity"
            },
            "functionSelector": "f650ca74",
            "id": 714,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 681,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 680,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2377,
                  "src": "7035:13:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7035:13:2"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 683,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "7069:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 684,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "7069:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 685,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 682,
                  "name": "whitelistedProvider",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1909,
                  "src": "7049:19:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7049:31:2"
              }
            ],
            "name": "setTotalCapacity",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 679,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 678,
                  "mutability": "mutable",
                  "name": "capacity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 714,
                  "src": "7011:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 677,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "7011:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7010:17:2"
            },
            "returnParameters": {
              "id": 686,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7081:0:2"
            },
            "scope": 1910,
            "src": "6985:341:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 749,
              "nodeType": "Block",
              "src": "7693:243:2",
              "statements": [
                {
                  "assignments": [
                    723
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 723,
                      "mutability": "mutable",
                      "name": "offer",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 749,
                      "src": "7703:19:2",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                        "typeString": "struct StorageManager.Offer"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 722,
                        "name": "Offer",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 481,
                        "src": "7703:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 728,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 724,
                      "name": "offerRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 496,
                      "src": "7725:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Offer_$481_storage_$",
                        "typeString": "mapping(address => struct StorageManager.Offer storage ref)"
                      }
                    },
                    "id": 727,
                    "indexExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 725,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "7739:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 726,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "7739:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7725:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Offer_$481_storage",
                      "typeString": "struct StorageManager.Offer storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7703:47:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 733,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 730,
                            "name": "offer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 723,
                            "src": "7768:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                              "typeString": "struct StorageManager.Offer storage pointer"
                            }
                          },
                          "id": 731,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "totalCapacity",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 470,
                          "src": "7768:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 732,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7791:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "7768:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a204f6666657220666f7220746869732050726f766964657220646f65736e2774206578697374",
                        "id": 734,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7794:55:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3c502fb1d82437c8bfddcb97abb863a9c97e226d04eb0a8a2472c7a1366559ff",
                          "typeString": "literal_string \"StorageManager: Offer for this Provider doesn't exist\""
                        },
                        "value": "StorageManager: Offer for this Provider doesn't exist"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3c502fb1d82437c8bfddcb97abb863a9c97e226d04eb0a8a2472c7a1366559ff",
                          "typeString": "literal_string \"StorageManager: Offer for this Provider doesn't exist\""
                        }
                      ],
                      "id": 729,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7760:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 735,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7760:90:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 736,
                  "nodeType": "ExpressionStatement",
                  "src": "7760:90:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 741,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 737,
                        "name": "offer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 723,
                        "src": "7860:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer storage pointer"
                        }
                      },
                      "id": 739,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "totalCapacity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 470,
                      "src": "7860:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 740,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7882:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7860:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 742,
                  "nodeType": "ExpressionStatement",
                  "src": "7860:23:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 744,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "7915:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 745,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "7915:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 746,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7927:1:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 743,
                      "name": "TotalCapacitySet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 510,
                      "src": "7898:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint64_$returns$__$",
                        "typeString": "function (address,uint64)"
                      }
                    },
                    "id": 747,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7898:31:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 748,
                  "nodeType": "EmitStatement",
                  "src": "7893:36:2"
                }
              ]
            },
            "documentation": {
              "id": 715,
              "nodeType": "StructuredDocumentation",
              "src": "7332:291:2",
              "text": ">> FOR PROVIDER\n@notice stops the Offer. It sets the totalCapacity to 0 which indicates terminated Offer.\n@dev no new Agreement can be created and no existing Agreement can be prolonged. All existing Agreement are still valid for the amount of periods still deposited."
            },
            "functionSelector": "b5859693",
            "id": 750,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 718,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "7681:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 719,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "7681:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 720,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 717,
                  "name": "whitelistedProvider",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1909,
                  "src": "7661:19:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7661:31:2"
              }
            ],
            "name": "terminateOffer",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 716,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7651:2:2"
            },
            "returnParameters": {
              "id": 721,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7693:0:2"
            },
            "scope": 1910,
            "src": "7628:308:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 793,
              "nodeType": "Block",
              "src": "9339:254:2",
              "statements": [
                {
                  "assignments": [
                    772
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 772,
                      "mutability": "mutable",
                      "name": "offer",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 793,
                      "src": "9349:19:2",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                        "typeString": "struct StorageManager.Offer"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 771,
                        "name": "Offer",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 481,
                        "src": "9349:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 777,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 773,
                      "name": "offerRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 496,
                      "src": "9371:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Offer_$481_storage_$",
                        "typeString": "mapping(address => struct StorageManager.Offer storage ref)"
                      }
                    },
                    "id": 776,
                    "indexExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 774,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "9385:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 775,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "9385:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "9371:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Offer_$481_storage",
                      "typeString": "struct StorageManager.Offer storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9349:47:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 782,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 779,
                            "name": "offer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 772,
                            "src": "9414:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                              "typeString": "struct StorageManager.Offer storage pointer"
                            }
                          },
                          "id": 780,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "totalCapacity",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 470,
                          "src": "9414:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 781,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9437:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "9414:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a204f6666657220666f7220746869732050726f766964657220646f65736e2774206578697374",
                        "id": 783,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9440:55:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3c502fb1d82437c8bfddcb97abb863a9c97e226d04eb0a8a2472c7a1366559ff",
                          "typeString": "literal_string \"StorageManager: Offer for this Provider doesn't exist\""
                        },
                        "value": "StorageManager: Offer for this Provider doesn't exist"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3c502fb1d82437c8bfddcb97abb863a9c97e226d04eb0a8a2472c7a1366559ff",
                          "typeString": "literal_string \"StorageManager: Offer for this Provider doesn't exist\""
                        }
                      ],
                      "id": 778,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9406:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9406:90:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 785,
                  "nodeType": "ExpressionStatement",
                  "src": "9406:90:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 787,
                        "name": "offer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 772,
                        "src": "9541:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 788,
                        "name": "billingPeriods",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 755,
                        "src": "9548:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_array$_t_uint64_$dyn_memory_ptr_$dyn_memory_ptr",
                          "typeString": "uint64[] memory[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 789,
                        "name": "billingPrices",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 759,
                        "src": "9564:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_array$_t_uint128_$dyn_memory_ptr_$dyn_memory_ptr",
                          "typeString": "uint128[] memory[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 790,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 762,
                        "src": "9579:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer storage pointer"
                        },
                        {
                          "typeIdentifier": "t_array$_t_array$_t_uint64_$dyn_memory_ptr_$dyn_memory_ptr",
                          "typeString": "uint64[] memory[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_array$_t_uint128_$dyn_memory_ptr_$dyn_memory_ptr",
                          "typeString": "uint128[] memory[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      ],
                      "id": 786,
                      "name": "_setBillingPlansWithMultipleTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1510,
                      "src": "9506:34:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Offer_$481_storage_ptr_$_t_array$_t_array$_t_uint64_$dyn_memory_ptr_$dyn_memory_ptr_$_t_array$_t_array$_t_uint128_$dyn_memory_ptr_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (struct StorageManager.Offer storage pointer,uint64[] memory[] memory,uint128[] memory[] memory,address[] memory)"
                      }
                    },
                    "id": 791,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9506:80:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 792,
                  "nodeType": "ExpressionStatement",
                  "src": "9506:80:2"
                }
              ]
            },
            "documentation": {
              "id": 751,
              "nodeType": "StructuredDocumentation",
              "src": "7942:1191:2",
              "text": ">> FOR PROVIDER\n@notice set the billing plans for an Offer.\n@dev\n- setting the price to 0 means that a particular period is not offered, which can be used to remove a period from the offer.\n- make sure that any period * prices does not cause an overflow, as this can never be accepted and hence is pointless.\n- the length of tokens array must always be one shorter than the length of the boundaries array (otherwise you get an array index out of bounds error)\n- make sure that the length of billingPeriods and billingPrices is of equal length. If billingPeriods is longer than prices => array index out of bounds error. If prices longer than period => the prices in higher indeces won't be considered\n@param billingPeriods the offered periods. Length must be equal to billingPrices. The first index of the multi dem array corresponds with the address in tokens at the same index\n@param billingPrices the prices for the offered periods. Each entry at index corresponds to the same index at periods. 0 means that the particular period is not offered. The first index of the multi dem array corresponds with the address in tokens at the same index"
            },
            "functionSelector": "325b2941",
            "id": 794,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 765,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 764,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2377,
                  "src": "9293:13:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9293:13:2"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 767,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "9327:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 768,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "9327:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 769,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 766,
                  "name": "whitelistedProvider",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1909,
                  "src": "9307:19:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9307:31:2"
              }
            ],
            "name": "setBillingPlans",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 763,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 755,
                  "mutability": "mutable",
                  "name": "billingPeriods",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 794,
                  "src": "9172:32:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_array$_t_uint64_$dyn_memory_ptr_$dyn_memory_ptr",
                    "typeString": "uint64[][]"
                  },
                  "typeName": {
                    "baseType": {
                      "baseType": {
                        "id": 752,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "9172:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "id": 753,
                      "length": null,
                      "nodeType": "ArrayTypeName",
                      "src": "9172:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint64_$dyn_storage_ptr",
                        "typeString": "uint64[]"
                      }
                    },
                    "id": 754,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9172:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_array$_t_uint64_$dyn_storage_$dyn_storage_ptr",
                      "typeString": "uint64[][]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 759,
                  "mutability": "mutable",
                  "name": "billingPrices",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 794,
                  "src": "9214:32:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_array$_t_uint128_$dyn_memory_ptr_$dyn_memory_ptr",
                    "typeString": "uint128[][]"
                  },
                  "typeName": {
                    "baseType": {
                      "baseType": {
                        "id": 756,
                        "name": "uint128",
                        "nodeType": "ElementaryTypeName",
                        "src": "9214:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "id": 757,
                      "length": null,
                      "nodeType": "ArrayTypeName",
                      "src": "9214:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                        "typeString": "uint128[]"
                      }
                    },
                    "id": 758,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9214:11:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_array$_t_uint128_$dyn_storage_$dyn_storage_ptr",
                      "typeString": "uint128[][]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 762,
                  "mutability": "mutable",
                  "name": "tokens",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 794,
                  "src": "9256:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 760,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "9256:7:2",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 761,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9256:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9162:123:2"
            },
            "returnParameters": {
              "id": 770,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9339:0:2"
            },
            "scope": 1910,
            "src": "9138:455:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 805,
              "nodeType": "Block",
              "src": "9885:38:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 802,
                        "name": "message",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 798,
                        "src": "9908:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      ],
                      "id": 801,
                      "name": "_emitMessage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1871,
                      "src": "9895:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (bytes32[] memory)"
                      }
                    },
                    "id": 803,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9895:21:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 804,
                  "nodeType": "ExpressionStatement",
                  "src": "9895:21:2"
                }
              ]
            },
            "documentation": {
              "id": 795,
              "nodeType": "StructuredDocumentation",
              "src": "9599:227:2",
              "text": ">> FOR PROVIDER\n@param message the Provider may send a message (e.g. his nodeID). Message should be structured such that the first two bits specify the message type, followed with the message). 0x01 == nodeID"
            },
            "functionSelector": "2fd09ef9",
            "id": 806,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "emitMessage",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 799,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 798,
                  "mutability": "mutable",
                  "name": "message",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 806,
                  "src": "9852:24:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 796,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "9852:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 797,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9852:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9851:26:2"
            },
            "returnParameters": {
              "id": 800,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9885:0:2"
            },
            "scope": 1910,
            "src": "9831:92:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1099,
              "nodeType": "Block",
              "src": "12249:3939:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 835,
                          "name": "isWhitelistedProvider",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 504,
                          "src": "12350:21:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                            "typeString": "mapping(address => bool)"
                          }
                        },
                        "id": 837,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 836,
                          "name": "provider",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 812,
                          "src": "12372:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "12350:31:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a2070726f7669646572206973206e6f742077686974656c6973746564",
                        "id": 838,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12383:45:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8747775c39b913702932b58c119cc20359eec226e37c023d68f46f1be83f8e09",
                          "typeString": "literal_string \"StorageManager: provider is not whitelisted\""
                        },
                        "value": "StorageManager: provider is not whitelisted"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8747775c39b913702932b58c119cc20359eec226e37c023d68f46f1be83f8e09",
                          "typeString": "literal_string \"StorageManager: provider is not whitelisted\""
                        }
                      ],
                      "id": 834,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12342:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 839,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12342:87:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 840,
                  "nodeType": "ExpressionStatement",
                  "src": "12342:87:2"
                },
                {
                  "assignments": [
                    842
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 842,
                      "mutability": "mutable",
                      "name": "offer",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1099,
                      "src": "12439:19:2",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                        "typeString": "struct StorageManager.Offer"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 841,
                        "name": "Offer",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 481,
                        "src": "12439:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 846,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 843,
                      "name": "offerRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 496,
                      "src": "12461:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Offer_$481_storage_$",
                        "typeString": "mapping(address => struct StorageManager.Offer storage ref)"
                      }
                    },
                    "id": 845,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 844,
                      "name": "provider",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 812,
                      "src": "12475:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "12461:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Offer_$481_storage",
                      "typeString": "struct StorageManager.Offer storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12439:45:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 850,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 848,
                          "name": "billingPeriod",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 816,
                          "src": "12502:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 849,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12519:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "12502:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a2042696c6c696e6720706572696f64206f662030206e6f7420616c6c6f776564",
                        "id": 851,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12522:49:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1f72ec1702e3c76dd4a074b7dde969388f9085ee6ba82494b6c2d714c896669f",
                          "typeString": "literal_string \"StorageManager: Billing period of 0 not allowed\""
                        },
                        "value": "StorageManager: Billing period of 0 not allowed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1f72ec1702e3c76dd4a074b7dde969388f9085ee6ba82494b6c2d714c896669f",
                          "typeString": "literal_string \"StorageManager: Billing period of 0 not allowed\""
                        }
                      ],
                      "id": 847,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12494:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 852,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12494:78:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 853,
                  "nodeType": "ExpressionStatement",
                  "src": "12494:78:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 857,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 855,
                          "name": "size",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 814,
                          "src": "12590:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 856,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12597:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "12590:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a2053697a652068617320746f20626520626967676572207468656e2030",
                        "id": 858,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12600:46:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5fcadf2d098376b9b56e42f962343b15ac84e86ce224f8e6ea01dd542a4a5fd5",
                          "typeString": "literal_string \"StorageManager: Size has to be bigger then 0\""
                        },
                        "value": "StorageManager: Size has to be bigger then 0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5fcadf2d098376b9b56e42f962343b15ac84e86ce224f8e6ea01dd542a4a5fd5",
                          "typeString": "literal_string \"StorageManager: Size has to be bigger then 0\""
                        }
                      ],
                      "id": 854,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12582:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 859,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12582:65:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 860,
                  "nodeType": "ExpressionStatement",
                  "src": "12582:65:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 865,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 862,
                            "name": "offer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 842,
                            "src": "12665:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                              "typeString": "struct StorageManager.Offer storage pointer"
                            }
                          },
                          "id": 863,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "totalCapacity",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 470,
                          "src": "12665:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 864,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12688:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "12665:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a204f6666657220666f7220746869732050726f766964657220646f65736e2774206578697374",
                        "id": 866,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12691:55:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3c502fb1d82437c8bfddcb97abb863a9c97e226d04eb0a8a2472c7a1366559ff",
                          "typeString": "literal_string \"StorageManager: Offer for this Provider doesn't exist\""
                        },
                        "value": "StorageManager: Offer for this Provider doesn't exist"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3c502fb1d82437c8bfddcb97abb863a9c97e226d04eb0a8a2472c7a1366559ff",
                          "typeString": "literal_string \"StorageManager: Offer for this Provider doesn't exist\""
                        }
                      ],
                      "id": 861,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12657:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 867,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12657:90:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 868,
                  "nodeType": "ExpressionStatement",
                  "src": "12657:90:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 870,
                          "name": "isWhitelistedToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 500,
                          "src": "12765:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                            "typeString": "mapping(address => bool)"
                          }
                        },
                        "id": 872,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 871,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 818,
                          "src": "12784:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "12765:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a206e6f7420706f737369626c6520746f20696e746572616374207769746874207468697320746f6b656e",
                        "id": 873,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12792:59:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_33cebd11de566f39d81df7d15f9ef87ba8d21f3175e038d100e9d4d5591eac97",
                          "typeString": "literal_string \"StorageManager: not possible to interact witht this token\""
                        },
                        "value": "StorageManager: not possible to interact witht this token"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_33cebd11de566f39d81df7d15f9ef87ba8d21f3175e038d100e9d4d5591eac97",
                          "typeString": "literal_string \"StorageManager: not possible to interact witht this token\""
                        }
                      ],
                      "id": 869,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12757:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 874,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12757:95:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 875,
                  "nodeType": "ExpressionStatement",
                  "src": "12757:95:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 879,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 876,
                        "name": "dataReferencesOfAgreementToPayOut",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 824,
                        "src": "13041:33:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory[] memory"
                        }
                      },
                      "id": 877,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "13041:40:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 878,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "13084:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "13041:44:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 891,
                  "nodeType": "IfStatement",
                  "src": "13037:275:2",
                  "trueBody": {
                    "id": 890,
                    "nodeType": "Block",
                    "src": "13087:225:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 881,
                              "name": "dataReferencesOfAgreementToPayOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 824,
                              "src": "13131:33:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory[] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 882,
                              "name": "creatorsOfAgreementToPayOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 827,
                              "src": "13182:27:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 883,
                              "name": "tokenOfAgreementsToPayOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 829,
                              "src": "13227:25:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 886,
                                  "name": "provider",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 812,
                                  "src": "13278:8:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 885,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "13270:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_payable_$",
                                  "typeString": "type(address payable)"
                                },
                                "typeName": {
                                  "id": 884,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "13270:8:2",
                                  "stateMutability": "payable",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 887,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13270:17:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory[] memory"
                              },
                              {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 880,
                            "name": "_payoutFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1711,
                            "src": "13101:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_address_$_t_address_payable_$returns$__$",
                              "typeString": "function (bytes32[] memory[] memory,address[] memory,address,address payable)"
                            }
                          },
                          "id": 888,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13101:200:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 889,
                        "nodeType": "ExpressionStatement",
                        "src": "13101:200:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    893
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 893,
                      "mutability": "mutable",
                      "name": "agreementReference",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1099,
                      "src": "13701:26:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 892,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "13701:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 900,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 895,
                        "name": "dataReference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 810,
                        "src": "13752:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 896,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "13767:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 897,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "13767:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 898,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 818,
                        "src": "13779:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 894,
                      "name": "getAgreementReference",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1758,
                      "src": "13730:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_address_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (bytes32[] memory,address,address) pure returns (bytes32)"
                      }
                    },
                    "id": 899,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13730:55:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13701:84:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    },
                    "id": 907,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 901,
                            "name": "offer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 842,
                            "src": "14023:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                              "typeString": "struct StorageManager.Offer storage pointer"
                            }
                          },
                          "id": 902,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "agreementRegistry",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 480,
                          "src": "14023:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Agreement_$492_storage_$",
                            "typeString": "mapping(bytes32 => struct StorageManager.Agreement storage ref)"
                          }
                        },
                        "id": 904,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 903,
                          "name": "agreementReference",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 893,
                          "src": "14047:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "14023:43:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Agreement_$492_storage",
                          "typeString": "struct StorageManager.Agreement storage ref"
                        }
                      },
                      "id": 905,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "lastPayoutDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 491,
                      "src": "14023:58:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 906,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14085:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "14023:63:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 956,
                  "nodeType": "IfStatement",
                  "src": "14019:423:2",
                  "trueBody": {
                    "id": 955,
                    "nodeType": "Block",
                    "src": "14088:354:2",
                    "statements": [
                      {
                        "assignments": [
                          913
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 913,
                            "mutability": "mutable",
                            "name": "dataReferenceOfAgreementToPayout",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 955,
                            "src": "14102:51:2",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr",
                              "typeString": "bytes32[][]"
                            },
                            "typeName": {
                              "baseType": {
                                "baseType": {
                                  "id": 910,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "14102:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "id": 911,
                                "length": null,
                                "nodeType": "ArrayTypeName",
                                "src": "14102:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                                  "typeString": "bytes32[]"
                                }
                              },
                              "id": 912,
                              "length": null,
                              "nodeType": "ArrayTypeName",
                              "src": "14102:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_storage_$dyn_storage_ptr",
                                "typeString": "bytes32[][]"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 920,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 918,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14172:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              }
                            ],
                            "id": 917,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "14156:15:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (bytes32[] memory[] memory)"
                            },
                            "typeName": {
                              "baseType": {
                                "baseType": {
                                  "id": 914,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "14160:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "id": 915,
                                "length": null,
                                "nodeType": "ArrayTypeName",
                                "src": "14160:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                                  "typeString": "bytes32[]"
                                }
                              },
                              "id": 916,
                              "length": null,
                              "nodeType": "ArrayTypeName",
                              "src": "14160:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_storage_$dyn_storage_ptr",
                                "typeString": "bytes32[][]"
                              }
                            }
                          },
                          "id": 919,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14156:18:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr",
                            "typeString": "bytes32[] memory[] memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "14102:72:2"
                      },
                      {
                        "assignments": [
                          925
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 925,
                            "mutability": "mutable",
                            "name": "creators",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 955,
                            "src": "14188:25:2",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 923,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "14188:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 924,
                              "length": null,
                              "nodeType": "ArrayTypeName",
                              "src": "14188:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                "typeString": "address[]"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 931,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 929,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14230:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              }
                            ],
                            "id": 928,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "14216:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (address[] memory)"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 926,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "14220:7:2",
                                "stateMutability": "nonpayable",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 927,
                              "length": null,
                              "nodeType": "ArrayTypeName",
                              "src": "14220:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                "typeString": "address[]"
                              }
                            }
                          },
                          "id": 930,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14216:16:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[] memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "14188:44:2"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 936,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 932,
                              "name": "dataReferenceOfAgreementToPayout",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 913,
                              "src": "14246:32:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory[] memory"
                              }
                            },
                            "id": 934,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 933,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14279:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "14246:35:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                              "typeString": "bytes32[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 935,
                            "name": "dataReference",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 810,
                            "src": "14284:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                              "typeString": "bytes32[] memory"
                            }
                          },
                          "src": "14246:51:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                            "typeString": "bytes32[] memory"
                          }
                        },
                        "id": 937,
                        "nodeType": "ExpressionStatement",
                        "src": "14246:51:2"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 943,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 938,
                              "name": "creators",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 925,
                              "src": "14311:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            "id": 940,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 939,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14320:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "14311:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 941,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "14325:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 942,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "14325:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "14311:24:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 944,
                        "nodeType": "ExpressionStatement",
                        "src": "14311:24:2"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 946,
                              "name": "dataReferenceOfAgreementToPayout",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 913,
                              "src": "14362:32:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory[] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 947,
                              "name": "creators",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 925,
                              "src": "14396:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 948,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 818,
                              "src": "14406:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 951,
                                  "name": "provider",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 812,
                                  "src": "14421:8:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 950,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "14413:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_payable_$",
                                  "typeString": "type(address payable)"
                                },
                                "typeName": {
                                  "id": 949,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "14413:8:2",
                                  "stateMutability": "payable",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 952,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14413:17:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory[] memory"
                              },
                              {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 945,
                            "name": "_payoutFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1711,
                            "src": "14349:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_address_$_t_address_payable_$returns$__$",
                              "typeString": "function (bytes32[] memory[] memory,address[] memory,address,address payable)"
                            }
                          },
                          "id": 953,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14349:82:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 954,
                        "nodeType": "ExpressionStatement",
                        "src": "14349:82:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    958
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 958,
                      "mutability": "mutable",
                      "name": "billingPrice",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1099,
                      "src": "14451:20:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      },
                      "typeName": {
                        "id": 957,
                        "name": "uint128",
                        "nodeType": "ElementaryTypeName",
                        "src": "14451:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 965,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 959,
                          "name": "offer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 842,
                          "src": "14474:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                            "typeString": "struct StorageManager.Offer storage pointer"
                          }
                        },
                        "id": 960,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "billingPlansForToken",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 476,
                        "src": "14474:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint64_$_t_uint128_$_$",
                          "typeString": "mapping(address => mapping(uint64 => uint128))"
                        }
                      },
                      "id": 962,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 961,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 818,
                        "src": "14501:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "14474:33:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint64_$_t_uint128_$",
                        "typeString": "mapping(uint64 => uint128)"
                      }
                    },
                    "id": 964,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 963,
                      "name": "billingPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 816,
                      "src": "14508:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "14474:48:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14451:71:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "id": 969,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 967,
                          "name": "billingPrice",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 958,
                          "src": "14540:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 968,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14556:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "14540:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a2042696c6c696e6720707269636520646f65736e277420657869737420666f72204f66666572",
                        "id": 970,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14559:55:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_dd794f9e815216ed7348ed336491bbc87cafa64e4894c5ec8a0e28ab51ff88d2",
                          "typeString": "literal_string \"StorageManager: Billing price doesn't exist for Offer\""
                        },
                        "value": "StorageManager: Billing price doesn't exist for Offer"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_dd794f9e815216ed7348ed336491bbc87cafa64e4894c5ec8a0e28ab51ff88d2",
                          "typeString": "literal_string \"StorageManager: Billing price doesn't exist for Offer\""
                        }
                      ],
                      "id": 966,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "14532:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 971,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14532:83:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 972,
                  "nodeType": "ExpressionStatement",
                  "src": "14532:83:2"
                },
                {
                  "assignments": [
                    974
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 974,
                      "mutability": "mutable",
                      "name": "agreement",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1099,
                      "src": "14705:27:2",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                        "typeString": "struct StorageManager.Agreement"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 973,
                        "name": "Agreement",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 492,
                        "src": "14705:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                          "typeString": "struct StorageManager.Agreement"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 979,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 975,
                        "name": "offer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 842,
                        "src": "14735:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer storage pointer"
                        }
                      },
                      "id": 976,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "agreementRegistry",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 480,
                      "src": "14735:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Agreement_$492_storage_$",
                        "typeString": "mapping(bytes32 => struct StorageManager.Agreement storage ref)"
                      }
                    },
                    "id": 978,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 977,
                      "name": "agreementReference",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 893,
                      "src": "14759:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "14735:43:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Agreement_$492_storage",
                      "typeString": "struct StorageManager.Agreement storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14705:73:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 981,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 818,
                        "src": "14982:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 980,
                      "name": "_isNativeToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1896,
                      "src": "14967:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) pure returns (bool)"
                      }
                    },
                    "id": 982,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14967:21:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 989,
                  "nodeType": "IfStatement",
                  "src": "14963:70:2",
                  "trueBody": {
                    "id": 988,
                    "nodeType": "Block",
                    "src": "14990:43:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 986,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 983,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 820,
                            "src": "15004:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 984,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "15013:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 985,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "15013:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "15004:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 987,
                        "nodeType": "ExpressionStatement",
                        "src": "15004:18:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 998,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 990,
                        "name": "agreement",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 974,
                        "src": "15043:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                          "typeString": "struct StorageManager.Agreement storage pointer"
                        }
                      },
                      "id": 992,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "availableFunds",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 487,
                      "src": "15043:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 996,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 820,
                          "src": "15099:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 993,
                            "name": "agreement",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 974,
                            "src": "15070:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                              "typeString": "struct StorageManager.Agreement storage pointer"
                            }
                          },
                          "id": 994,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "availableFunds",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 487,
                          "src": "15070:24:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 995,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2585,
                        "src": "15070:28:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 997,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15070:36:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15043:63:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 999,
                  "nodeType": "ExpressionStatement",
                  "src": "15043:63:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1007,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1001,
                            "name": "agreement",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 974,
                            "src": "15137:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                              "typeString": "struct StorageManager.Agreement storage pointer"
                            }
                          },
                          "id": 1002,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "availableFunds",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 487,
                          "src": "15137:24:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1005,
                              "name": "billingPrice",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 958,
                              "src": "15174:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1003,
                              "name": "size",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 814,
                              "src": "15165:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "id": 1004,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2665,
                            "src": "15165:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 1006,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15165:22:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "15137:50:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a2046756e6473206465706f73697465642068617320746f20626520666f72206174206c65617374206f6e652062696c6c696e6720706572696f64",
                        "id": 1008,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15201:75:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5a0cee75bc4864fe7316a0b2ac0bcb738d3818abcce198eb65b1af4318e6e93c",
                          "typeString": "literal_string \"StorageManager: Funds deposited has to be for at least one billing period\""
                        },
                        "value": "StorageManager: Funds deposited has to be for at least one billing period"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5a0cee75bc4864fe7316a0b2ac0bcb738d3818abcce198eb65b1af4318e6e93c",
                          "typeString": "literal_string \"StorageManager: Funds deposited has to be for at least one billing period\""
                        }
                      ],
                      "id": 1000,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "15116:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1009,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15116:170:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1010,
                  "nodeType": "ExpressionStatement",
                  "src": "15116:170:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1015,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1011,
                        "name": "agreement",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 974,
                        "src": "15296:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                          "typeString": "struct StorageManager.Agreement storage pointer"
                        }
                      },
                      "id": 1013,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "size",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 489,
                      "src": "15296:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1014,
                      "name": "size",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 814,
                      "src": "15313:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "15296:21:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1016,
                  "nodeType": "ExpressionStatement",
                  "src": "15296:21:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1021,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1017,
                        "name": "agreement",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 974,
                        "src": "15327:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                          "typeString": "struct StorageManager.Agreement storage pointer"
                        }
                      },
                      "id": 1019,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "billingPrice",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 483,
                      "src": "15327:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1020,
                      "name": "billingPrice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 958,
                      "src": "15352:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "src": "15327:37:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "id": 1022,
                  "nodeType": "ExpressionStatement",
                  "src": "15327:37:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1027,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1023,
                        "name": "agreement",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 974,
                        "src": "15374:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                          "typeString": "struct StorageManager.Agreement storage pointer"
                        }
                      },
                      "id": 1025,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "billingPeriod",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 485,
                      "src": "15374:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1026,
                      "name": "billingPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 816,
                      "src": "15400:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "15374:39:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1028,
                  "nodeType": "ExpressionStatement",
                  "src": "15374:39:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1037,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1029,
                        "name": "agreement",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 974,
                        "src": "15543:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                          "typeString": "struct StorageManager.Agreement storage pointer"
                        }
                      },
                      "id": 1031,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "lastPayoutDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 491,
                      "src": "15543:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1034,
                            "name": "_time",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1880,
                            "src": "15578:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 1035,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15578:7:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1033,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "15570:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint128_$",
                          "typeString": "type(uint128)"
                        },
                        "typeName": {
                          "id": 1032,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "15570:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 1036,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15570:16:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "src": "15543:43:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "id": 1038,
                  "nodeType": "ExpressionStatement",
                  "src": "15543:43:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1043,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1039,
                      "name": "offer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 842,
                      "src": "15596:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                        "typeString": "struct StorageManager.Offer storage pointer"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1040,
                        "name": "offerRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 496,
                        "src": "15604:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Offer_$481_storage_$",
                          "typeString": "mapping(address => struct StorageManager.Offer storage ref)"
                        }
                      },
                      "id": 1042,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1041,
                        "name": "provider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 812,
                        "src": "15618:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "15604:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Offer_$481_storage",
                        "typeString": "struct StorageManager.Offer storage ref"
                      }
                    },
                    "src": "15596:31:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                      "typeString": "struct StorageManager.Offer storage pointer"
                    }
                  },
                  "id": 1044,
                  "nodeType": "ExpressionStatement",
                  "src": "15596:31:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1056,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1045,
                        "name": "offer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 842,
                        "src": "15637:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer storage pointer"
                        }
                      },
                      "id": 1047,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "utilizedCapacity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 468,
                      "src": "15637:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1053,
                              "name": "size",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 814,
                              "src": "15696:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1050,
                                "name": "offer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 842,
                                "src": "15669:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                                  "typeString": "struct StorageManager.Offer storage pointer"
                                }
                              },
                              "id": 1051,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "utilizedCapacity",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 468,
                              "src": "15669:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "id": 1052,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2585,
                            "src": "15669:26:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 1054,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15669:32:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1049,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "15662:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint64_$",
                          "typeString": "type(uint64)"
                        },
                        "typeName": {
                          "id": 1048,
                          "name": "uint64",
                          "nodeType": "ElementaryTypeName",
                          "src": "15662:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 1055,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15662:40:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "15637:65:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1057,
                  "nodeType": "ExpressionStatement",
                  "src": "15637:65:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 1063,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1059,
                            "name": "offer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 842,
                            "src": "15720:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                              "typeString": "struct StorageManager.Offer storage pointer"
                            }
                          },
                          "id": 1060,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "utilizedCapacity",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 468,
                          "src": "15720:22:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1061,
                            "name": "offer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 842,
                            "src": "15746:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                              "typeString": "struct StorageManager.Offer storage pointer"
                            }
                          },
                          "id": 1062,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "totalCapacity",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 470,
                          "src": "15746:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "15720:45:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a20496e73756666696369656e74204f666665722773206361706163697479",
                        "id": 1064,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15767:47:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5e326e89aeedaab0f296f59c382da7a4553b08e7714cc3245eab6243af90761e",
                          "typeString": "literal_string \"StorageManager: Insufficient Offer's capacity\""
                        },
                        "value": "StorageManager: Insufficient Offer's capacity"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5e326e89aeedaab0f296f59c382da7a4553b08e7714cc3245eab6243af90761e",
                          "typeString": "literal_string \"StorageManager: Insufficient Offer's capacity\""
                        }
                      ],
                      "id": 1058,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "15712:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1065,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15712:103:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1066,
                  "nodeType": "ExpressionStatement",
                  "src": "15712:103:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 1070,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "15830:22:2",
                    "subExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1068,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 818,
                          "src": "15846:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 1067,
                        "name": "_isNativeToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1896,
                        "src": "15831:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address) pure returns (bool)"
                        }
                      },
                      "id": 1069,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15831:21:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1085,
                  "nodeType": "IfStatement",
                  "src": "15826:118:2",
                  "trueBody": {
                    "id": 1084,
                    "nodeType": "Block",
                    "src": "15854:90:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1075,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "15899:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 1076,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "15899:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1079,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "15919:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_StorageManager_$1910",
                                    "typeString": "contract StorageManager"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_StorageManager_$1910",
                                    "typeString": "contract StorageManager"
                                  }
                                ],
                                "id": 1078,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "15911:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 1077,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "15911:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 1080,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15911:13:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1081,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 820,
                              "src": "15926:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1072,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 818,
                                  "src": "15875:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 1071,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3333,
                                "src": "15868:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$3333_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 1073,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15868:13:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$3333",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 1074,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3392,
                            "src": "15868:30:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$3333_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$3333_$",
                              "typeString": "function (contract IERC20,address,address,uint256)"
                            }
                          },
                          "id": 1082,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15868:65:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1083,
                        "nodeType": "ExpressionStatement",
                        "src": "15868:65:2"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1087,
                        "name": "dataReference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 810,
                        "src": "15984:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1088,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "16011:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1089,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "16011:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1090,
                        "name": "provider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 812,
                        "src": "16035:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1091,
                        "name": "size",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 814,
                        "src": "16057:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1092,
                        "name": "billingPeriod",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 816,
                        "src": "16075:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1093,
                        "name": "billingPrice",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 958,
                        "src": "16102:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1094,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 818,
                        "src": "16128:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1095,
                          "name": "agreement",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 974,
                          "src": "16147:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                            "typeString": "struct StorageManager.Agreement storage pointer"
                          }
                        },
                        "id": 1096,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "availableFunds",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 487,
                        "src": "16147:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1086,
                      "name": "NewAgreement",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 546,
                      "src": "15958:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_address_$_t_address_$_t_uint64_$_t_uint64_$_t_uint128_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32[] memory,address,address,uint64,uint64,uint128,address,uint256)"
                      }
                    },
                    "id": 1097,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15958:223:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1098,
                  "nodeType": "EmitStatement",
                  "src": "15953:228:2"
                }
              ]
            },
            "documentation": {
              "id": 807,
              "nodeType": "StructuredDocumentation",
              "src": "9929:1935:2",
              "text": ">> FOR CONSUMER\n@notice new Agreement for given Offer\n@dev\n- The to-be-pinned data reference's size in MB (rounded up) must be equal in size to param size.\n- Provider can reject to pin data reference when it exceeds specified size.\n- The ownership of Agreement is enforced with agreementReference structure which is calculated as: hash(msg.sender, dataReference)\n- if the token is not the native currency, then the contract must be first be given allowance to transfer tokens in it's posession.\nContains execution of the transferFrom on external token contract before all the stage changes are performed.\nAs a result if a token will perform a callback to the StorageManager,\nit may lead to a reentrancy attack. Hence additional attention should be paid while reviewing this method of a token before whitelisting.\n@param dataReference the reference to an Data Source, can be several things.\n@param provider the provider from which is proposed to take a Offer.\n@param size the size of the to-be-pinned file in MB (rounded up).\n@param billingPeriod the chosen period for billing.\n@param token the token in which you want to make the agreement. By convention: address(0) is the native currency\n@param amount if token is set, this is the amount of tokens that is transfered\n@param dataReferencesOfAgreementToPayOut the data references of agreements which must be payed out. Pass this when there is no capacity. Order should equal order of creatorsOfAgreementToPayOut and tokensOfAgreementToPayOut\n@param creatorsOfAgreementToPayOut the creators of agreements which must be payed out. Pass this when there is no capacity. The order should match the order of dataReferenceOfAgreementToPayOut and tokensOfAgreementToPayOut\n@param tokenOfAgreementsToPayOut the token address of agreements which must be payed out. Pass this when there is no capacity."
            },
            "functionSelector": "d245599e",
            "id": 1100,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 832,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 831,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2377,
                  "src": "12235:13:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12235:13:2"
              }
            ],
            "name": "newAgreement",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 830,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 810,
                  "mutability": "mutable",
                  "name": "dataReference",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1100,
                  "src": "11900:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 808,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "11900:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 809,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "11900:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 812,
                  "mutability": "mutable",
                  "name": "provider",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1100,
                  "src": "11940:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 811,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11940:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 814,
                  "mutability": "mutable",
                  "name": "size",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1100,
                  "src": "11966:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 813,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "11966:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 816,
                  "mutability": "mutable",
                  "name": "billingPeriod",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1100,
                  "src": "11987:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 815,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "11987:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 818,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1100,
                  "src": "12017:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 817,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12017:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 820,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1100,
                  "src": "12040:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 819,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12040:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 824,
                  "mutability": "mutable",
                  "name": "dataReferencesOfAgreementToPayOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1100,
                  "src": "12064:52:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr",
                    "typeString": "bytes32[][]"
                  },
                  "typeName": {
                    "baseType": {
                      "baseType": {
                        "id": 821,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "12064:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "id": 822,
                      "length": null,
                      "nodeType": "ArrayTypeName",
                      "src": "12064:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                        "typeString": "bytes32[]"
                      }
                    },
                    "id": 823,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "12064:11:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_storage_$dyn_storage_ptr",
                      "typeString": "bytes32[][]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 827,
                  "mutability": "mutable",
                  "name": "creatorsOfAgreementToPayOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1100,
                  "src": "12126:44:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 825,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "12126:7:2",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 826,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "12126:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 829,
                  "mutability": "mutable",
                  "name": "tokenOfAgreementsToPayOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1100,
                  "src": "12180:33:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 828,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12180:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11890:329:2"
            },
            "returnParameters": {
              "id": 833,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12249:0:2"
            },
            "scope": 1910,
            "src": "11869:4319:2",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1250,
              "nodeType": "Block",
              "src": "17049:1449:2",
              "statements": [
                {
                  "assignments": [
                    1119
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1119,
                      "mutability": "mutable",
                      "name": "agreementReference",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1250,
                      "src": "17059:26:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1118,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "17059:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1126,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1121,
                        "name": "dataReference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1108,
                        "src": "17110:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1122,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "17125:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1123,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "17125:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1124,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1103,
                        "src": "17137:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1120,
                      "name": "getAgreementReference",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1758,
                      "src": "17088:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_address_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (bytes32[] memory,address,address) pure returns (bytes32)"
                      }
                    },
                    "id": 1125,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17088:55:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17059:84:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1128,
                          "name": "isWhitelistedToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 500,
                          "src": "17161:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                            "typeString": "mapping(address => bool)"
                          }
                        },
                        "id": 1130,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1129,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1103,
                          "src": "17180:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "17161:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a20546f6b656e206973206e6f742077686974656c6973746564",
                        "id": 1131,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17188:42:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8011f029399467d66b62133d39698ec480910caa5162e1b7ce7de81af790e263",
                          "typeString": "literal_string \"StorageManager: Token is not whitelisted\""
                        },
                        "value": "StorageManager: Token is not whitelisted"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8011f029399467d66b62133d39698ec480910caa5162e1b7ce7de81af790e263",
                          "typeString": "literal_string \"StorageManager: Token is not whitelisted\""
                        }
                      ],
                      "id": 1127,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "17153:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1132,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17153:78:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1133,
                  "nodeType": "ExpressionStatement",
                  "src": "17153:78:2"
                },
                {
                  "assignments": [
                    1135
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1135,
                      "mutability": "mutable",
                      "name": "offer",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1250,
                      "src": "17241:19:2",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                        "typeString": "struct StorageManager.Offer"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1134,
                        "name": "Offer",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 481,
                        "src": "17241:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1139,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1136,
                      "name": "offerRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 496,
                      "src": "17263:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Offer_$481_storage_$",
                        "typeString": "mapping(address => struct StorageManager.Offer storage ref)"
                      }
                    },
                    "id": 1138,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1137,
                      "name": "provider",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1110,
                      "src": "17277:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "17263:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Offer_$481_storage",
                      "typeString": "struct StorageManager.Offer storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17241:45:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 1144,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1141,
                            "name": "offer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1135,
                            "src": "17304:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                              "typeString": "struct StorageManager.Offer storage pointer"
                            }
                          },
                          "id": 1142,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "totalCapacity",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 470,
                          "src": "17304:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1143,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "17327:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "17304:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a204f6666657220666f7220746869732050726f766964657220646f65736e2774206578697374",
                        "id": 1145,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17330:55:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3c502fb1d82437c8bfddcb97abb863a9c97e226d04eb0a8a2472c7a1366559ff",
                          "typeString": "literal_string \"StorageManager: Offer for this Provider doesn't exist\""
                        },
                        "value": "StorageManager: Offer for this Provider doesn't exist"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3c502fb1d82437c8bfddcb97abb863a9c97e226d04eb0a8a2472c7a1366559ff",
                          "typeString": "literal_string \"StorageManager: Offer for this Provider doesn't exist\""
                        }
                      ],
                      "id": 1140,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "17296:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1146,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17296:90:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1147,
                  "nodeType": "ExpressionStatement",
                  "src": "17296:90:2"
                },
                {
                  "assignments": [
                    1149
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1149,
                      "mutability": "mutable",
                      "name": "agreement",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1250,
                      "src": "17396:27:2",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                        "typeString": "struct StorageManager.Agreement"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1148,
                        "name": "Agreement",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 492,
                        "src": "17396:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                          "typeString": "struct StorageManager.Agreement"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1154,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1150,
                        "name": "offer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1135,
                        "src": "17426:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer storage pointer"
                        }
                      },
                      "id": 1151,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "agreementRegistry",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 480,
                      "src": "17426:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Agreement_$492_storage_$",
                        "typeString": "mapping(bytes32 => struct StorageManager.Agreement storage ref)"
                      }
                    },
                    "id": 1153,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1152,
                      "name": "agreementReference",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1119,
                      "src": "17450:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "17426:43:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Agreement_$492_storage",
                      "typeString": "struct StorageManager.Agreement storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17396:73:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 1159,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1156,
                            "name": "agreement",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1149,
                            "src": "17487:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                              "typeString": "struct StorageManager.Agreement storage pointer"
                            }
                          },
                          "id": 1157,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "size",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 489,
                          "src": "17487:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1158,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "17505:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "17487:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a2041677265656d656e7420666f722074686973204f6666657220646f65736e2774206578697374",
                        "id": 1160,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17508:56:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6bf3f2ae50002ca5ffb935b8b90fd744cabdf923ffa93b9d388c87a1c4b05a3c",
                          "typeString": "literal_string \"StorageManager: Agreement for this Offer doesn't exist\""
                        },
                        "value": "StorageManager: Agreement for this Offer doesn't exist"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6bf3f2ae50002ca5ffb935b8b90fd744cabdf923ffa93b9d388c87a1c4b05a3c",
                          "typeString": "literal_string \"StorageManager: Agreement for this Offer doesn't exist\""
                        }
                      ],
                      "id": 1155,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "17479:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1161,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17479:86:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1162,
                  "nodeType": "ExpressionStatement",
                  "src": "17479:86:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "id": 1167,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1164,
                            "name": "agreement",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1149,
                            "src": "17583:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                              "typeString": "struct StorageManager.Agreement storage pointer"
                            }
                          },
                          "id": 1165,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "lastPayoutDate",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 491,
                          "src": "17583:24:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1166,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "17611:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "17583:29:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a2041677265656d656e74206e6f7420616374697665",
                        "id": 1168,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17614:38:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_894ddb02d2e34ea78cc1474c66a1c2a568248f91c2efa3552ced2862a39c0e40",
                          "typeString": "literal_string \"StorageManager: Agreement not active\""
                        },
                        "value": "StorageManager: Agreement not active"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_894ddb02d2e34ea78cc1474c66a1c2a568248f91c2efa3552ced2862a39c0e40",
                          "typeString": "literal_string \"StorageManager: Agreement not active\""
                        }
                      ],
                      "id": 1163,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "17575:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1169,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17575:78:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1170,
                  "nodeType": "ExpressionStatement",
                  "src": "17575:78:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "id": 1181,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1172,
                                "name": "offer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1135,
                                "src": "17684:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                                  "typeString": "struct StorageManager.Offer storage pointer"
                                }
                              },
                              "id": 1173,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "billingPlansForToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 476,
                              "src": "17684:26:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint64_$_t_uint128_$_$",
                                "typeString": "mapping(address => mapping(uint64 => uint128))"
                              }
                            },
                            "id": 1175,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1174,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1103,
                              "src": "17711:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "17684:33:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint64_$_t_uint128_$",
                              "typeString": "mapping(uint64 => uint128)"
                            }
                          },
                          "id": 1178,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1176,
                              "name": "agreement",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1149,
                              "src": "17718:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                "typeString": "struct StorageManager.Agreement storage pointer"
                              }
                            },
                            "id": 1177,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "billingPeriod",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 485,
                            "src": "17718:23:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "17684:58:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1179,
                            "name": "agreement",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1149,
                            "src": "17746:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                              "typeString": "struct StorageManager.Agreement storage pointer"
                            }
                          },
                          "id": 1180,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "billingPrice",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 483,
                          "src": "17746:22:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "src": "17684:84:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a205072696365206e6f7420617661696c61626c6520616e796d6f7265",
                        "id": 1182,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17782:45:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_66941b9c8753029e6554aca6a3f953838951d2c8d202259010b2adbf81d4d354",
                          "typeString": "literal_string \"StorageManager: Price not available anymore\""
                        },
                        "value": "StorageManager: Price not available anymore"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_66941b9c8753029e6554aca6a3f953838951d2c8d202259010b2adbf81d4d354",
                          "typeString": "literal_string \"StorageManager: Price not available anymore\""
                        }
                      ],
                      "id": 1171,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "17663:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1183,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17663:174:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1184,
                  "nodeType": "ExpressionStatement",
                  "src": "17663:174:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1199,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1190,
                                  "name": "agreement",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1149,
                                  "src": "17918:9:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                    "typeString": "struct StorageManager.Agreement storage pointer"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                    "typeString": "struct StorageManager.Agreement storage pointer"
                                  }
                                ],
                                "id": 1189,
                                "name": "_calculateSpentFunds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1814,
                                "src": "17897:20:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_struct$_Agreement_$492_memory_ptr_$returns$_t_uint256_$",
                                  "typeString": "function (struct StorageManager.Agreement memory) view returns (uint256)"
                                }
                              },
                              "id": 1191,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "17897:31:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1186,
                                "name": "agreement",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1149,
                                "src": "17868:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                  "typeString": "struct StorageManager.Agreement storage pointer"
                                }
                              },
                              "id": 1187,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "availableFunds",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 487,
                              "src": "17868:24:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1188,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2602,
                            "src": "17868:28:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 1192,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17868:61:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1196,
                                "name": "agreement",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1149,
                                "src": "17960:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                  "typeString": "struct StorageManager.Agreement storage pointer"
                                }
                              },
                              "id": 1197,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "size",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 489,
                              "src": "17960:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1193,
                                "name": "agreement",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1149,
                                "src": "17933:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                  "typeString": "struct StorageManager.Agreement storage pointer"
                                }
                              },
                              "id": 1194,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "billingPrice",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 483,
                              "src": "17933:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            "id": 1195,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2665,
                            "src": "17933:26:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 1198,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17933:42:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "17868:107:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a2041677265656d656e7420616c72656164792072616e206f7574206f662066756e6473",
                        "id": 1200,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17989:52:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_418b6ab8cb48c6e394e1ce074445daed4d88d776052f0bccba4e46f08c7e5ed0",
                          "typeString": "literal_string \"StorageManager: Agreement already ran out of funds\""
                        },
                        "value": "StorageManager: Agreement already ran out of funds"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_418b6ab8cb48c6e394e1ce074445daed4d88d776052f0bccba4e46f08c7e5ed0",
                          "typeString": "literal_string \"StorageManager: Agreement already ran out of funds\""
                        }
                      ],
                      "id": 1185,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "17847:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1201,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17847:204:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1202,
                  "nodeType": "ExpressionStatement",
                  "src": "17847:204:2"
                },
                {
                  "assignments": [
                    1204
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1204,
                      "mutability": "mutable",
                      "name": "isNativeToken",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1250,
                      "src": "18061:18:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1203,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "18061:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1208,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1206,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1103,
                        "src": "18097:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1205,
                      "name": "_isNativeToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1896,
                      "src": "18082:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) pure returns (bool)"
                      }
                    },
                    "id": 1207,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18082:21:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18061:42:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 1209,
                    "name": "isNativeToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1204,
                    "src": "18117:13:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1216,
                  "nodeType": "IfStatement",
                  "src": "18113:62:2",
                  "trueBody": {
                    "id": 1215,
                    "nodeType": "Block",
                    "src": "18132:43:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1213,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1210,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1105,
                            "src": "18146:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1211,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "18155:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 1212,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "18155:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "18146:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1214,
                        "nodeType": "ExpressionStatement",
                        "src": "18146:18:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1225,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1217,
                        "name": "agreement",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1149,
                        "src": "18184:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                          "typeString": "struct StorageManager.Agreement storage pointer"
                        }
                      },
                      "id": 1219,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "availableFunds",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 487,
                      "src": "18184:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1223,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1105,
                          "src": "18240:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1220,
                            "name": "agreement",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1149,
                            "src": "18211:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                              "typeString": "struct StorageManager.Agreement storage pointer"
                            }
                          },
                          "id": 1221,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "availableFunds",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 487,
                          "src": "18211:24:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1222,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2585,
                        "src": "18211:28:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 1224,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "18211:36:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18184:63:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1226,
                  "nodeType": "ExpressionStatement",
                  "src": "18184:63:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 1228,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "18261:14:2",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 1227,
                      "name": "isNativeToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1204,
                      "src": "18262:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1243,
                  "nodeType": "IfStatement",
                  "src": "18257:162:2",
                  "trueBody": {
                    "id": 1242,
                    "nodeType": "Block",
                    "src": "18277:142:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1233,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "18374:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 1234,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "18374:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1237,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "18394:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_StorageManager_$1910",
                                    "typeString": "contract StorageManager"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_StorageManager_$1910",
                                    "typeString": "contract StorageManager"
                                  }
                                ],
                                "id": 1236,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "18386:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 1235,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "18386:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 1238,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "18386:13:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1239,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1105,
                              "src": "18401:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1230,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1103,
                                  "src": "18350:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 1229,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3333,
                                "src": "18343:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$3333_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 1231,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "18343:13:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$3333",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 1232,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3392,
                            "src": "18343:30:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$3333_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$3333_$",
                              "typeString": "function (contract IERC20,address,address,uint256)"
                            }
                          },
                          "id": 1240,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18343:65:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1241,
                        "nodeType": "ExpressionStatement",
                        "src": "18343:65:2"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1245,
                        "name": "agreementReference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1119,
                        "src": "18457:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1246,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1105,
                        "src": "18477:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1247,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1103,
                        "src": "18485:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1244,
                      "name": "AgreementFundsDeposited",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 554,
                      "src": "18433:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,uint256,address)"
                      }
                    },
                    "id": 1248,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18433:58:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1249,
                  "nodeType": "EmitStatement",
                  "src": "18428:63:2"
                }
              ]
            },
            "documentation": {
              "id": 1101,
              "nodeType": "StructuredDocumentation",
              "src": "16194:650:2",
              "text": ">> FOR CONSUMER\n@notice deposits new funds to the Agreement.\n@dev\n- depositing funds to Agreement that is linked to terminated Offer is not possible\n- depositing funds to Agreement that already is expired (eq. ran out of funds at some point) is not possible.\nCall NewAgreement instead. The data needs to be re-provided though.\n- if the token is not the native currency, then the contract must be first be given allowance to transfer tokens in it's posession.\n@param dataReference data reference where should be deposited funds.\n@param provider the address of the provider of the Offer."
            },
            "functionSelector": "2691c085",
            "id": 1251,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1113,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1112,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2377,
                  "src": "17005:13:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17005:13:2"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1115,
                    "name": "provider",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1110,
                    "src": "17039:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 1116,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1114,
                  "name": "whitelistedProvider",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1909,
                  "src": "17019:19:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17019:29:2"
              }
            ],
            "name": "depositFunds",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1111,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1103,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1251,
                  "src": "16880:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1102,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16880:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1105,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1251,
                  "src": "16903:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1104,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16903:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1108,
                  "mutability": "mutable",
                  "name": "dataReference",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1251,
                  "src": "16927:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1106,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "16927:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 1107,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "16927:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1110,
                  "mutability": "mutable",
                  "name": "provider",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1251,
                  "src": "16967:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1109,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16967:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16870:119:2"
            },
            "returnParameters": {
              "id": 1117,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17049:0:2"
            },
            "scope": 1910,
            "src": "16849:1649:2",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1422,
              "nodeType": "Block",
              "src": "19452:1762:2",
              "statements": [
                {
                  "assignments": [
                    1267
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1267,
                      "mutability": "mutable",
                      "name": "offer",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1422,
                      "src": "19462:19:2",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                        "typeString": "struct StorageManager.Offer"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1266,
                        "name": "Offer",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 481,
                        "src": "19462:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1271,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1268,
                      "name": "offerRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 496,
                      "src": "19484:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Offer_$481_storage_$",
                        "typeString": "mapping(address => struct StorageManager.Offer storage ref)"
                      }
                    },
                    "id": 1270,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1269,
                      "name": "provider",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1257,
                      "src": "19498:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "19484:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Offer_$481_storage",
                      "typeString": "struct StorageManager.Offer storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19462:45:2"
                },
                {
                  "body": {
                    "id": 1420,
                    "nodeType": "Block",
                    "src": "19557:1651:2",
                    "statements": [
                      {
                        "assignments": [
                          1283
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1283,
                            "mutability": "mutable",
                            "name": "amount",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1420,
                            "src": "19571:14:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1282,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "19571:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1287,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1284,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1263,
                            "src": "19588:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 1286,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1285,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1273,
                            "src": "19596:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "19588:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "19571:27:2"
                      },
                      {
                        "assignments": [
                          1289
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1289,
                            "mutability": "mutable",
                            "name": "token",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1420,
                            "src": "19612:13:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 1288,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "19612:7:2",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1293,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1290,
                            "name": "tokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1260,
                            "src": "19628:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 1292,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1291,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1273,
                            "src": "19635:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "19628:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "19612:25:2"
                      },
                      {
                        "assignments": [
                          1295
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1295,
                            "mutability": "mutable",
                            "name": "agreementReference",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1420,
                            "src": "19651:26:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 1294,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "19651:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1302,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1297,
                              "name": "dataReference",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1255,
                              "src": "19702:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1298,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "19717:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 1299,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "19717:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1300,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1289,
                              "src": "19729:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1296,
                            "name": "getAgreementReference",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1758,
                            "src": "19680:21:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_address_$_t_address_$returns$_t_bytes32_$",
                              "typeString": "function (bytes32[] memory,address,address) pure returns (bytes32)"
                            }
                          },
                          "id": 1301,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19680:55:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "19651:84:2"
                      },
                      {
                        "assignments": [
                          1304
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1304,
                            "mutability": "mutable",
                            "name": "agreement",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1420,
                            "src": "19749:27:2",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                              "typeString": "struct StorageManager.Agreement"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 1303,
                              "name": "Agreement",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 492,
                              "src": "19749:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                "typeString": "struct StorageManager.Agreement"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1309,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1305,
                              "name": "offer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1267,
                              "src": "19779:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                                "typeString": "struct StorageManager.Offer storage pointer"
                              }
                            },
                            "id": 1306,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "agreementRegistry",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 480,
                            "src": "19779:23:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Agreement_$492_storage_$",
                              "typeString": "mapping(bytes32 => struct StorageManager.Agreement storage ref)"
                            }
                          },
                          "id": 1308,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1307,
                            "name": "agreementReference",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1295,
                            "src": "19803:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "19779:43:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Agreement_$492_storage",
                            "typeString": "struct StorageManager.Agreement storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "19749:73:2"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              },
                              "id": 1314,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1311,
                                  "name": "agreement",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1304,
                                  "src": "19844:9:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                    "typeString": "struct StorageManager.Agreement storage pointer"
                                  }
                                },
                                "id": 1312,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "size",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 489,
                                "src": "19844:14:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1313,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "19862:1:2",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "19844:19:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "53746f726167654d616e616765723a2041677265656d656e7420666f722074686973204f6666657220646f65736e2774206578697374",
                              "id": 1315,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "19865:56:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_6bf3f2ae50002ca5ffb935b8b90fd744cabdf923ffa93b9d388c87a1c4b05a3c",
                                "typeString": "literal_string \"StorageManager: Agreement for this Offer doesn't exist\""
                              },
                              "value": "StorageManager: Agreement for this Offer doesn't exist"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_6bf3f2ae50002ca5ffb935b8b90fd744cabdf923ffa93b9d388c87a1c4b05a3c",
                                "typeString": "literal_string \"StorageManager: Agreement for this Offer doesn't exist\""
                              }
                            ],
                            "id": 1310,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "19836:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1316,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19836:86:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1317,
                        "nodeType": "ExpressionStatement",
                        "src": "19836:86:2"
                      },
                      {
                        "assignments": [
                          1319
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1319,
                            "mutability": "mutable",
                            "name": "maxWithdrawableFunds",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1420,
                            "src": "19936:28:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1318,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "19936:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1320,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "19936:28:2"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          },
                          "id": 1324,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1321,
                              "name": "agreement",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1304,
                              "src": "19982:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                "typeString": "struct StorageManager.Agreement storage pointer"
                              }
                            },
                            "id": 1322,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "lastPayoutDate",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 491,
                            "src": "19982:24:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1323,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "20010:1:2",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "19982:29:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 1349,
                          "nodeType": "Block",
                          "src": "20173:350:2",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 1347,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 1331,
                                  "name": "maxWithdrawableFunds",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1319,
                                  "src": "20339:20:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "components": [
                                        {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint128",
                                            "typeString": "uint128"
                                          },
                                          "id": 1344,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 1340,
                                              "name": "agreement",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1304,
                                              "src": "20450:9:2",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                                "typeString": "struct StorageManager.Agreement storage pointer"
                                              }
                                            },
                                            "id": 1341,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "billingPrice",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 483,
                                            "src": "20450:22:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint128",
                                              "typeString": "uint128"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "*",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 1342,
                                              "name": "agreement",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1304,
                                              "src": "20475:9:2",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                                "typeString": "struct StorageManager.Agreement storage pointer"
                                              }
                                            },
                                            "id": 1343,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "size",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 489,
                                            "src": "20475:14:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint64",
                                              "typeString": "uint64"
                                            }
                                          },
                                          "src": "20450:39:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint128",
                                            "typeString": "uint128"
                                          }
                                        }
                                      ],
                                      "id": 1345,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "20449:41:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "arguments": [
                                            {
                                              "argumentTypes": null,
                                              "id": 1336,
                                              "name": "agreement",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1304,
                                              "src": "20412:9:2",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                                "typeString": "struct StorageManager.Agreement storage pointer"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                                "typeString": "struct StorageManager.Agreement storage pointer"
                                              }
                                            ],
                                            "id": 1335,
                                            "name": "_calculateSpentFunds",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1814,
                                            "src": "20391:20:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_internal_view$_t_struct$_Agreement_$492_memory_ptr_$returns$_t_uint256_$",
                                              "typeString": "function (struct StorageManager.Agreement memory) view returns (uint256)"
                                            }
                                          },
                                          "id": 1337,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "20391:31:2",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 1332,
                                            "name": "agreement",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1304,
                                            "src": "20362:9:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                              "typeString": "struct StorageManager.Agreement storage pointer"
                                            }
                                          },
                                          "id": 1333,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "availableFunds",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 487,
                                          "src": "20362:24:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 1334,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sub",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 2602,
                                        "src": "20362:28:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 1338,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "20362:61:2",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1339,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sub",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2602,
                                    "src": "20362:65:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 1346,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "20362:146:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "20339:169:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1348,
                              "nodeType": "ExpressionStatement",
                              "src": "20339:169:2"
                            }
                          ]
                        },
                        "id": 1350,
                        "nodeType": "IfStatement",
                        "src": "19978:545:2",
                        "trueBody": {
                          "id": 1330,
                          "nodeType": "Block",
                          "src": "20013:154:2",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 1328,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 1325,
                                  "name": "maxWithdrawableFunds",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1319,
                                  "src": "20105:20:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1326,
                                    "name": "agreement",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1304,
                                    "src": "20128:9:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                      "typeString": "struct StorageManager.Agreement storage pointer"
                                    }
                                  },
                                  "id": 1327,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "availableFunds",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 487,
                                  "src": "20128:24:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "20105:47:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1329,
                              "nodeType": "ExpressionStatement",
                              "src": "20105:47:2"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1353,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1351,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1283,
                            "src": "20541:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1352,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "20551:1:2",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "20541:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 1359,
                        "nodeType": "IfStatement",
                        "src": "20537:79:2",
                        "trueBody": {
                          "id": 1358,
                          "nodeType": "Block",
                          "src": "20554:62:2",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 1356,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 1354,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1283,
                                  "src": "20572:6:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 1355,
                                  "name": "maxWithdrawableFunds",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1319,
                                  "src": "20581:20:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "20572:29:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1357,
                              "nodeType": "ExpressionStatement",
                              "src": "20572:29:2"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1363,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1361,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1283,
                                "src": "20637:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 1362,
                                "name": "maxWithdrawableFunds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1319,
                                "src": "20647:20:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "20637:30:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "53746f726167654d616e616765723a20416d6f756e7420697320746f6f20626967",
                              "id": 1364,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "20669:35:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_4f642de681ff0889189e748ccaf9781df8e5dbf3aef4bceeb06d3e57ab49724c",
                                "typeString": "literal_string \"StorageManager: Amount is too big\""
                              },
                              "value": "StorageManager: Amount is too big"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_4f642de681ff0889189e748ccaf9781df8e5dbf3aef4bceeb06d3e57ab49724c",
                                "typeString": "literal_string \"StorageManager: Amount is too big\""
                              }
                            ],
                            "id": 1360,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "20629:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1365,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20629:76:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1366,
                        "nodeType": "ExpressionStatement",
                        "src": "20629:76:2"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1375,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1367,
                              "name": "agreement",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1304,
                              "src": "20719:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                "typeString": "struct StorageManager.Agreement storage pointer"
                              }
                            },
                            "id": 1369,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "availableFunds",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 487,
                            "src": "20719:24:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1373,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1283,
                                "src": "20775:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1370,
                                  "name": "agreement",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1304,
                                  "src": "20746:9:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                    "typeString": "struct StorageManager.Agreement storage pointer"
                                  }
                                },
                                "id": 1371,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "availableFunds",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 487,
                                "src": "20746:24:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1372,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2602,
                              "src": "20746:28:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1374,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "20746:36:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "20719:63:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1376,
                        "nodeType": "ExpressionStatement",
                        "src": "20719:63:2"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1380,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1378,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1283,
                                "src": "20804:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1379,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "20813:1:2",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "20804:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "53746f726167654d616e616765723a204e6f7468696e6720746f207769746864726177",
                              "id": 1381,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "20816:37:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_56b727eea145827f1a7ef3a18cb5d4e4caa2253254b9905ab3c2f23a54cf16f8",
                                "typeString": "literal_string \"StorageManager: Nothing to withdraw\""
                              },
                              "value": "StorageManager: Nothing to withdraw"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_56b727eea145827f1a7ef3a18cb5d4e4caa2253254b9905ab3c2f23a54cf16f8",
                                "typeString": "literal_string \"StorageManager: Nothing to withdraw\""
                              }
                            ],
                            "id": 1377,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "20796:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1382,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20796:58:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1383,
                        "nodeType": "ExpressionStatement",
                        "src": "20796:58:2"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1385,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1289,
                              "src": "20888:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1384,
                            "name": "_isNativeToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1896,
                            "src": "20873:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) pure returns (bool)"
                            }
                          },
                          "id": 1386,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20873:21:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 1412,
                          "nodeType": "Block",
                          "src": "21042:79:2",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1407,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -15,
                                      "src": "21087:3:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 1408,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "21087:10:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1409,
                                    "name": "amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1283,
                                    "src": "21099:6:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 1404,
                                        "name": "token",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1289,
                                        "src": "21067:5:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 1403,
                                      "name": "IERC20",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3333,
                                      "src": "21060:6:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IERC20_$3333_$",
                                        "typeString": "type(contract IERC20)"
                                      }
                                    },
                                    "id": 1405,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "21060:13:2",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC20_$3333",
                                      "typeString": "contract IERC20"
                                    }
                                  },
                                  "id": 1406,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "safeTransfer",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3367,
                                  "src": "21060:26:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$3333_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$3333_$",
                                    "typeString": "function (contract IERC20,address,uint256)"
                                  }
                                },
                                "id": 1410,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "21060:46:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1411,
                              "nodeType": "ExpressionStatement",
                              "src": "21060:46:2"
                            }
                          ]
                        },
                        "id": 1413,
                        "nodeType": "IfStatement",
                        "src": "20869:252:2",
                        "trueBody": {
                          "id": 1402,
                          "nodeType": "Block",
                          "src": "20896:140:2",
                          "statements": [
                            {
                              "assignments": [
                                1388,
                                null
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1388,
                                  "mutability": "mutable",
                                  "name": "success",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 1402,
                                  "src": "20915:12:2",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "typeName": {
                                    "id": 1387,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "20915:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                },
                                null
                              ],
                              "id": 1396,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "",
                                    "id": 1394,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "20964:2:2",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                      "typeString": "literal_string \"\""
                                    },
                                    "value": ""
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                      "typeString": "literal_string \"\""
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                        "typeString": "literal_string \"\""
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 1389,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -15,
                                        "src": "20933:3:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 1390,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "20933:10:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    },
                                    "id": 1391,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "call",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "20933:15:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                      "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                    }
                                  },
                                  "id": 1393,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "names": [
                                    "value"
                                  ],
                                  "nodeType": "FunctionCallOptions",
                                  "options": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1392,
                                      "name": "amount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1283,
                                      "src": "20956:6:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "src": "20933:30:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                                    "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                  }
                                },
                                "id": 1395,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "20933:34:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                  "typeString": "tuple(bool,bytes memory)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "20914:53:2"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1398,
                                    "name": "success",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1388,
                                    "src": "20993:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "5472616e73666572206661696c65642e",
                                    "id": 1399,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "21002:18:2",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_c81948f77ae7b56f1759fc612b6b373d090eebe7124f74c528fff8e0a139fe69",
                                      "typeString": "literal_string \"Transfer failed.\""
                                    },
                                    "value": "Transfer failed."
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_c81948f77ae7b56f1759fc612b6b373d090eebe7124f74c528fff8e0a139fe69",
                                      "typeString": "literal_string \"Transfer failed.\""
                                    }
                                  ],
                                  "id": 1397,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "20985:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 1400,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "20985:36:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1401,
                              "nodeType": "ExpressionStatement",
                              "src": "20985:36:2"
                            }
                          ]
                        }
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1415,
                              "name": "agreementReference",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1295,
                              "src": "21163:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1416,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1283,
                              "src": "21183:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1417,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1289,
                              "src": "21191:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1414,
                            "name": "AgreementFundsWithdrawn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 562,
                            "src": "21139:23:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_address_$returns$__$",
                              "typeString": "function (bytes32,uint256,address)"
                            }
                          },
                          "id": 1418,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "21139:58:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1419,
                        "nodeType": "EmitStatement",
                        "src": "21134:63:2"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1278,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1275,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1273,
                      "src": "19533:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1276,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1260,
                        "src": "19537:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 1277,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "19537:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "19533:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1421,
                  "initializationExpression": {
                    "assignments": [
                      1273
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1273,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1421,
                        "src": "19522:9:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1272,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19522:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 1274,
                    "initialValue": null,
                    "nodeType": "VariableDeclarationStatement",
                    "src": "19522:9:2"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1280,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "19552:3:2",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 1279,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1273,
                        "src": "19552:1:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1281,
                    "nodeType": "ExpressionStatement",
                    "src": "19552:3:2"
                  },
                  "nodeType": "ForStatement",
                  "src": "19517:1691:2"
                }
              ]
            },
            "documentation": {
              "id": 1252,
              "nodeType": "StructuredDocumentation",
              "src": "18504:774:2",
              "text": ">> FOR CONSUMER\n@notice withdraw funds from Agreement.\n@dev\n- if amount is zero then all withdrawable funds are transferred (eq. all available funds minus funds for still non-payed out periods and current period)\n- if Agreement is terminated Consumer can withdraw all remaining funds\n- if the token is not the native currency, then the contract must be first be given allowance to transfer tokens in it's posession.\n@param dataReference the data reference of agreement to be funds withdrawn from\n@param provider the address of the provider of the Offer.\n@param tokens the tokens in which to withdraw. By convention, address(0) is the native currency.\n@param amounts the value you want to withdraw for each token"
            },
            "functionSelector": "1f3477a5",
            "id": 1423,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "withdrawFunds",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1264,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1255,
                  "mutability": "mutable",
                  "name": "dataReference",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1423,
                  "src": "19315:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1253,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "19315:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 1254,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "19315:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1257,
                  "mutability": "mutable",
                  "name": "provider",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1423,
                  "src": "19355:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1256,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19355:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1260,
                  "mutability": "mutable",
                  "name": "tokens",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1423,
                  "src": "19381:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1258,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "19381:7:2",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 1259,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "19381:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1263,
                  "mutability": "mutable",
                  "name": "amounts",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1423,
                  "src": "19414:24:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1261,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "19414:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1262,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "19414:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19305:139:2"
            },
            "returnParameters": {
              "id": 1265,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19452:0:2"
            },
            "scope": 1910,
            "src": "19283:1931:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1448,
              "nodeType": "Block",
              "src": "22173:189:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1442,
                        "name": "dataReferencesOfAgreementToPayOut",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1428,
                        "src": "22209:33:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1443,
                        "name": "creatorsOfAgreementToPayOut",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1431,
                        "src": "22256:27:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1444,
                        "name": "tokensOfAgreementsToPayOut",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1433,
                        "src": "22297:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1445,
                        "name": "provider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1435,
                        "src": "22337:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 1441,
                      "name": "_payoutFunds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1711,
                      "src": "22183:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_address_$_t_address_payable_$returns$__$",
                        "typeString": "function (bytes32[] memory[] memory,address[] memory,address,address payable)"
                      }
                    },
                    "id": 1446,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22183:172:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1447,
                  "nodeType": "ExpressionStatement",
                  "src": "22183:172:2"
                }
              ]
            },
            "documentation": {
              "id": 1424,
              "nodeType": "StructuredDocumentation",
              "src": "21220:689:2",
              "text": ">> FOR PROVIDER\n@notice payout already earned funds of one or more Agreement\n@dev\n- Provider must call an expired agreement themselves as soon as the agreement is expired, to add back the capacity to their Offer.\n- Payout can be triggered by other events as well. Like in newAgreement call with either existing agreement or when other\nAgreements are passed to the agreementsReferencesToBePayedOut array.\n@param dataReferencesOfAgreementToPayOut the data references of the agreement to pay\n@param creatorsOfAgreementToPayOut the creators that made the agreement to pay\n@param tokensOfAgreementsToPayOut the tokens of the agreement to pay out"
            },
            "functionSelector": "dc4aac9e",
            "id": 1449,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1438,
                    "name": "provider",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1435,
                    "src": "22163:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 1439,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1437,
                  "name": "whitelistedProvider",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1909,
                  "src": "22143:19:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "22143:29:2"
              }
            ],
            "name": "payoutFunds",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1436,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1428,
                  "mutability": "mutable",
                  "name": "dataReferencesOfAgreementToPayOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1449,
                  "src": "21945:52:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr",
                    "typeString": "bytes32[][]"
                  },
                  "typeName": {
                    "baseType": {
                      "baseType": {
                        "id": 1425,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "21945:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "id": 1426,
                      "length": null,
                      "nodeType": "ArrayTypeName",
                      "src": "21945:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                        "typeString": "bytes32[]"
                      }
                    },
                    "id": 1427,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "21945:11:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_storage_$dyn_storage_ptr",
                      "typeString": "bytes32[][]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1431,
                  "mutability": "mutable",
                  "name": "creatorsOfAgreementToPayOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1449,
                  "src": "22007:44:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1429,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "22007:7:2",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 1430,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "22007:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1433,
                  "mutability": "mutable",
                  "name": "tokensOfAgreementsToPayOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1449,
                  "src": "22061:34:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1432,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22061:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1435,
                  "mutability": "mutable",
                  "name": "provider",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1449,
                  "src": "22105:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 1434,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22105:15:2",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21935:200:2"
            },
            "returnParameters": {
              "id": 1440,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "22173:0:2"
            },
            "scope": 1910,
            "src": "21915:447:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1509,
              "nodeType": "Block",
              "src": "23772:346:2",
              "statements": [
                {
                  "body": {
                    "id": 1507,
                    "nodeType": "Block",
                    "src": "23861:251:2",
                    "statements": [
                      {
                        "body": {
                          "id": 1505,
                          "nodeType": "Block",
                          "src": "23985:117:2",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1489,
                                    "name": "offer",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1452,
                                    "src": "24027:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                                      "typeString": "struct StorageManager.Offer storage pointer"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 1490,
                                      "name": "tokens",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1463,
                                      "src": "24034:6:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                        "typeString": "address[] memory"
                                      }
                                    },
                                    "id": 1492,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 1491,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1467,
                                      "src": "24041:1:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "24034:9:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 1493,
                                        "name": "billingPeriods",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1456,
                                        "src": "24045:14:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_array$_t_uint64_$dyn_memory_ptr_$dyn_memory_ptr",
                                          "typeString": "uint64[] memory[] memory"
                                        }
                                      },
                                      "id": 1495,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 1494,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1467,
                                        "src": "24060:1:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "24045:17:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint64_$dyn_memory_ptr",
                                        "typeString": "uint64[] memory"
                                      }
                                    },
                                    "id": 1497,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 1496,
                                      "name": "j",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1477,
                                      "src": "24063:1:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "24045:20:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint64",
                                      "typeString": "uint64"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 1498,
                                        "name": "billingPrices",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1460,
                                        "src": "24067:13:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_array$_t_uint128_$dyn_memory_ptr_$dyn_memory_ptr",
                                          "typeString": "uint128[] memory[] memory"
                                        }
                                      },
                                      "id": 1500,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 1499,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1467,
                                        "src": "24081:1:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "24067:16:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                                        "typeString": "uint128[] memory"
                                      }
                                    },
                                    "id": 1502,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 1501,
                                      "name": "j",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1477,
                                      "src": "24084:1:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "24067:19:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                                      "typeString": "struct StorageManager.Offer storage pointer"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint64",
                                      "typeString": "uint64"
                                    },
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "id": 1488,
                                  "name": "_setBillingPlanForToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1858,
                                  "src": "24003:23:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Offer_$481_storage_ptr_$_t_address_$_t_uint64_$_t_uint128_$returns$__$",
                                    "typeString": "function (struct StorageManager.Offer storage pointer,address,uint64,uint128)"
                                  }
                                },
                                "id": 1503,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "24003:84:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1504,
                              "nodeType": "ExpressionStatement",
                              "src": "24003:84:2"
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1484,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1479,
                            "name": "j",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1477,
                            "src": "23950:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1480,
                                "name": "billingPeriods",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1456,
                                "src": "23954:14:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_array$_t_uint64_$dyn_memory_ptr_$dyn_memory_ptr",
                                  "typeString": "uint64[] memory[] memory"
                                }
                              },
                              "id": 1482,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1481,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1467,
                                "src": "23969:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "23954:17:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint64_$dyn_memory_ptr",
                                "typeString": "uint64[] memory"
                              }
                            },
                            "id": 1483,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "23954:24:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "23950:28:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1506,
                        "initializationExpression": {
                          "assignments": [
                            1477
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 1477,
                              "mutability": "mutable",
                              "name": "j",
                              "nodeType": "VariableDeclaration",
                              "overrides": null,
                              "scope": 1506,
                              "src": "23939:9:2",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 1476,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "23939:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 1478,
                          "initialValue": null,
                          "nodeType": "VariableDeclarationStatement",
                          "src": "23939:9:2"
                        },
                        "loopExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 1486,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "23980:3:2",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 1485,
                              "name": "j",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1477,
                              "src": "23980:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1487,
                          "nodeType": "ExpressionStatement",
                          "src": "23980:3:2"
                        },
                        "nodeType": "ForStatement",
                        "src": "23934:168:2"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1472,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1469,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1467,
                      "src": "23837:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1470,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1463,
                        "src": "23841:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 1471,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "23841:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23837:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1508,
                  "initializationExpression": {
                    "assignments": [
                      1467
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1467,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1508,
                        "src": "23826:9:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1466,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "23826:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 1468,
                    "initialValue": null,
                    "nodeType": "VariableDeclarationStatement",
                    "src": "23826:9:2"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1474,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "23856:3:2",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 1473,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1467,
                        "src": "23856:1:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1475,
                    "nodeType": "ExpressionStatement",
                    "src": "23856:3:2"
                  },
                  "nodeType": "ForStatement",
                  "src": "23821:291:2"
                }
              ]
            },
            "documentation": {
              "id": 1450,
              "nodeType": "StructuredDocumentation",
              "src": "22368:1194:2",
              "text": "@notice sets the billing plans for multiple tokens.\n@dev\n- the billingPeriods and billingPrices hold the period/price pair for all tokens.\n- the length of tokens array must always be one shorter than the length of the boundaries array (otherwise you get an array index out of bounds error)\n- make sure that the length of billingPeriods and billingPrices is of equal length. If billingPeriods is longer than prices => array index out of bounds error. If prices longer than period => the prices in higher indeces won't be considered\n@param offer the offer for which the billingPlan is set\n@param billingPeriods the offered periods. Length must be equal to the length of billingPrices. The first index of the multi dem array corresponds with the address in tokens at the same index\n@param billingPrices the prices for the offered periods. Each entry at index corresponds to the same index at periods. 0 means that the particular period is not offered. The first index of the multi dem array corresponds with the address in tokens at the same index\n@param tokens the tokens for which an offer is made. By convention, address(0) is the native currency."
            },
            "id": 1510,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setBillingPlansWithMultipleTokens",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1464,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1452,
                  "mutability": "mutable",
                  "name": "offer",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1510,
                  "src": "23620:19:2",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                    "typeString": "struct StorageManager.Offer"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1451,
                    "name": "Offer",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 481,
                    "src": "23620:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                      "typeString": "struct StorageManager.Offer"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1456,
                  "mutability": "mutable",
                  "name": "billingPeriods",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1510,
                  "src": "23649:32:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_array$_t_uint64_$dyn_memory_ptr_$dyn_memory_ptr",
                    "typeString": "uint64[][]"
                  },
                  "typeName": {
                    "baseType": {
                      "baseType": {
                        "id": 1453,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "23649:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "id": 1454,
                      "length": null,
                      "nodeType": "ArrayTypeName",
                      "src": "23649:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint64_$dyn_storage_ptr",
                        "typeString": "uint64[]"
                      }
                    },
                    "id": 1455,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "23649:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_array$_t_uint64_$dyn_storage_$dyn_storage_ptr",
                      "typeString": "uint64[][]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1460,
                  "mutability": "mutable",
                  "name": "billingPrices",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1510,
                  "src": "23691:32:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_array$_t_uint128_$dyn_memory_ptr_$dyn_memory_ptr",
                    "typeString": "uint128[][]"
                  },
                  "typeName": {
                    "baseType": {
                      "baseType": {
                        "id": 1457,
                        "name": "uint128",
                        "nodeType": "ElementaryTypeName",
                        "src": "23691:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "id": 1458,
                      "length": null,
                      "nodeType": "ArrayTypeName",
                      "src": "23691:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                        "typeString": "uint128[]"
                      }
                    },
                    "id": 1459,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "23691:11:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_array$_t_uint128_$dyn_storage_$dyn_storage_ptr",
                      "typeString": "uint128[][]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1463,
                  "mutability": "mutable",
                  "name": "tokens",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1510,
                  "src": "23733:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1461,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "23733:7:2",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 1462,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "23733:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23610:152:2"
            },
            "returnParameters": {
              "id": 1465,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23772:0:2"
            },
            "scope": 1910,
            "src": "23567:551:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1525,
              "nodeType": "Block",
              "src": "24196:69:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 1522,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1517,
                              "name": "offerRegistry",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 496,
                              "src": "24214:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Offer_$481_storage_$",
                                "typeString": "mapping(address => struct StorageManager.Offer storage ref)"
                              }
                            },
                            "id": 1519,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1518,
                              "name": "storer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1512,
                              "src": "24228:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "24214:21:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Offer_$481_storage",
                              "typeString": "struct StorageManager.Offer storage ref"
                            }
                          },
                          "id": 1520,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "utilizedCapacity",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 468,
                          "src": "24214:38:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1521,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "24256:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "24214:43:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 1523,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "24213:45:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1516,
                  "id": 1524,
                  "nodeType": "Return",
                  "src": "24206:52:2"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "ec5cdf99",
            "id": 1526,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "hasUtilizedCapacity",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1513,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1512,
                  "mutability": "mutable",
                  "name": "storer",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1526,
                  "src": "24153:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1511,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "24153:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24152:16:2"
            },
            "returnParameters": {
              "id": 1516,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1515,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1526,
                  "src": "24190:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1514,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "24190:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24189:6:2"
            },
            "scope": 1910,
            "src": "24124:141:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1710,
              "nodeType": "Block",
              "src": "24545:2164:2",
              "statements": [
                {
                  "assignments": [
                    1541
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1541,
                      "mutability": "mutable",
                      "name": "offer",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1710,
                      "src": "24555:19:2",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                        "typeString": "struct StorageManager.Offer"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1540,
                        "name": "Offer",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 481,
                        "src": "24555:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1545,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1542,
                      "name": "offerRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 496,
                      "src": "24577:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Offer_$481_storage_$",
                        "typeString": "mapping(address => struct StorageManager.Offer storage ref)"
                      }
                    },
                    "id": 1544,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1543,
                      "name": "provider",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1537,
                      "src": "24591:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "24577:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Offer_$481_storage",
                      "typeString": "struct StorageManager.Offer storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24555:45:2"
                },
                {
                  "assignments": [
                    1547
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1547,
                      "mutability": "mutable",
                      "name": "toTransfer",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1710,
                      "src": "24610:18:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1546,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "24610:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1548,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24610:18:2"
                },
                {
                  "body": {
                    "id": 1675,
                    "nodeType": "Block",
                    "src": "24707:1630:2",
                    "statements": [
                      {
                        "assignments": [
                          1561
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1561,
                            "mutability": "mutable",
                            "name": "agreementReference",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1675,
                            "src": "24721:26:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 1560,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "24721:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1571,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1563,
                                "name": "dataReferenceOfAgreementToPayOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1530,
                                "src": "24809:32:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr",
                                  "typeString": "bytes32[] memory[] memory"
                                }
                              },
                              "id": 1565,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1564,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1550,
                                "src": "24842:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "24809:35:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1566,
                                "name": "creatorsOfAgreementToPayOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1533,
                                "src": "24866:27:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 1568,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1567,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1550,
                                "src": "24894:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "24866:30:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1569,
                              "name": "tokenOfAgreementsToPayOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1535,
                              "src": "24918:25:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1562,
                            "name": "getAgreementReference",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1758,
                            "src": "24766:21:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_address_$_t_address_$returns$_t_bytes32_$",
                              "typeString": "function (bytes32[] memory,address,address) pure returns (bytes32)"
                            }
                          },
                          "id": 1570,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "24766:195:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "24721:240:2"
                      },
                      {
                        "assignments": [
                          1573
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1573,
                            "mutability": "mutable",
                            "name": "agreement",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1675,
                            "src": "24975:27:2",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                              "typeString": "struct StorageManager.Agreement"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 1572,
                              "name": "Agreement",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 492,
                              "src": "24975:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                "typeString": "struct StorageManager.Agreement"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1578,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1574,
                              "name": "offer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1541,
                              "src": "25005:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                                "typeString": "struct StorageManager.Offer storage pointer"
                              }
                            },
                            "id": 1575,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "agreementRegistry",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 480,
                            "src": "25005:23:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Agreement_$492_storage_$",
                              "typeString": "mapping(bytes32 => struct StorageManager.Agreement storage ref)"
                            }
                          },
                          "id": 1577,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1576,
                            "name": "agreementReference",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1561,
                            "src": "25029:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "25005:43:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Agreement_$492_storage",
                            "typeString": "struct StorageManager.Agreement storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "24975:73:2"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              },
                              "id": 1583,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1580,
                                  "name": "agreement",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1573,
                                  "src": "25070:9:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                    "typeString": "struct StorageManager.Agreement storage pointer"
                                  }
                                },
                                "id": 1581,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "size",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 489,
                                "src": "25070:14:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1582,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "25088:1:2",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "25070:19:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "53746f726167654d616e616765723a2041677265656d656e7420666f722074686973204f6666657220646f65736e2774206578697374",
                              "id": 1584,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "25091:56:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_6bf3f2ae50002ca5ffb935b8b90fd744cabdf923ffa93b9d388c87a1c4b05a3c",
                                "typeString": "literal_string \"StorageManager: Agreement for this Offer doesn't exist\""
                              },
                              "value": "StorageManager: Agreement for this Offer doesn't exist"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_6bf3f2ae50002ca5ffb935b8b90fd744cabdf923ffa93b9d388c87a1c4b05a3c",
                                "typeString": "literal_string \"StorageManager: Agreement for this Offer doesn't exist\""
                              }
                            ],
                            "id": 1579,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "25062:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1585,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25062:86:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1586,
                        "nodeType": "ExpressionStatement",
                        "src": "25062:86:2"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              "id": 1591,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1588,
                                  "name": "agreement",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1573,
                                  "src": "25222:9:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                    "typeString": "struct StorageManager.Agreement storage pointer"
                                  }
                                },
                                "id": 1589,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "lastPayoutDate",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 491,
                                "src": "25222:24:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1590,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "25250:1:2",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "25222:29:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "53746f726167654d616e616765723a2041677265656d656e7420697320696e616374697665",
                              "id": 1592,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "25253:39:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a3e653735a522f05a1940e8d4cbac3d3281e9374aea7982e328fec00480ac0c9",
                                "typeString": "literal_string \"StorageManager: Agreement is inactive\""
                              },
                              "value": "StorageManager: Agreement is inactive"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_a3e653735a522f05a1940e8d4cbac3d3281e9374aea7982e328fec00480ac0c9",
                                "typeString": "literal_string \"StorageManager: Agreement is inactive\""
                              }
                            ],
                            "id": 1587,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "25214:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1593,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25214:79:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1594,
                        "nodeType": "ExpressionStatement",
                        "src": "25214:79:2"
                      },
                      {
                        "assignments": [
                          1596
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1596,
                            "mutability": "mutable",
                            "name": "spentFunds",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1675,
                            "src": "25308:18:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1595,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "25308:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1600,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1598,
                              "name": "agreement",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1573,
                              "src": "25350:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                "typeString": "struct StorageManager.Agreement storage pointer"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                "typeString": "struct StorageManager.Agreement storage pointer"
                              }
                            ],
                            "id": 1597,
                            "name": "_calculateSpentFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1814,
                            "src": "25329:20:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_Agreement_$492_memory_ptr_$returns$_t_uint256_$",
                              "typeString": "function (struct StorageManager.Agreement memory) view returns (uint256)"
                            }
                          },
                          "id": 1599,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25329:31:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "25308:52:2"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1603,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1601,
                            "name": "spentFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1596,
                            "src": "25378:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1602,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "25391:1:2",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "25378:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 1674,
                        "nodeType": "IfStatement",
                        "src": "25374:953:2",
                        "trueBody": {
                          "id": 1673,
                          "nodeType": "Block",
                          "src": "25394:933:2",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 1612,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1604,
                                    "name": "agreement",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1573,
                                    "src": "25412:9:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                      "typeString": "struct StorageManager.Agreement storage pointer"
                                    }
                                  },
                                  "id": 1606,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "availableFunds",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 487,
                                  "src": "25412:24:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1610,
                                      "name": "spentFunds",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1596,
                                      "src": "25468:10:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 1607,
                                        "name": "agreement",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1573,
                                        "src": "25439:9:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                          "typeString": "struct StorageManager.Agreement storage pointer"
                                        }
                                      },
                                      "id": 1608,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "availableFunds",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 487,
                                      "src": "25439:24:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1609,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sub",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2602,
                                    "src": "25439:28:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 1611,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "25439:40:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "25412:67:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1613,
                              "nodeType": "ExpressionStatement",
                              "src": "25412:67:2"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 1619,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 1614,
                                  "name": "toTransfer",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1547,
                                  "src": "25497:10:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1617,
                                      "name": "spentFunds",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1596,
                                      "src": "25525:10:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1615,
                                      "name": "toTransfer",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1547,
                                      "src": "25510:10:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1616,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "add",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2585,
                                    "src": "25510:14:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 1618,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "25510:26:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "25497:39:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1620,
                              "nodeType": "ExpressionStatement",
                              "src": "25497:39:2"
                            },
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1629,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1621,
                                    "name": "agreement",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1573,
                                    "src": "25631:9:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                      "typeString": "struct StorageManager.Agreement storage pointer"
                                    }
                                  },
                                  "id": 1622,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "availableFunds",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 487,
                                  "src": "25631:24:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 1626,
                                        "name": "agreement",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1573,
                                        "src": "25685:9:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                          "typeString": "struct StorageManager.Agreement storage pointer"
                                        }
                                      },
                                      "id": 1627,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "size",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 489,
                                      "src": "25685:14:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint64",
                                        "typeString": "uint64"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint64",
                                        "typeString": "uint64"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 1623,
                                        "name": "agreement",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1573,
                                        "src": "25658:9:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                          "typeString": "struct StorageManager.Agreement storage pointer"
                                        }
                                      },
                                      "id": 1624,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "billingPrice",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 483,
                                      "src": "25658:22:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    },
                                    "id": 1625,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "mul",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2665,
                                    "src": "25658:26:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 1628,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "25658:42:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "25631:69:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 1665,
                                "nodeType": "Block",
                                "src": "26029:181:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1663,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1655,
                                          "name": "agreement",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1573,
                                          "src": "26148:9:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                            "typeString": "struct StorageManager.Agreement storage pointer"
                                          }
                                        },
                                        "id": 1657,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "memberName": "lastPayoutDate",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 491,
                                        "src": "26148:24:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "arguments": [],
                                            "expression": {
                                              "argumentTypes": [],
                                              "id": 1660,
                                              "name": "_time",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1880,
                                              "src": "26183:5:2",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                                "typeString": "function () view returns (uint256)"
                                              }
                                            },
                                            "id": 1661,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "26183:7:2",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 1659,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "26175:7:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_uint128_$",
                                            "typeString": "type(uint128)"
                                          },
                                          "typeName": {
                                            "id": 1658,
                                            "name": "uint128",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "26175:7:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": null,
                                              "typeString": null
                                            }
                                          }
                                        },
                                        "id": 1662,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "26175:16:2",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      },
                                      "src": "26148:43:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    },
                                    "id": 1664,
                                    "nodeType": "ExpressionStatement",
                                    "src": "26148:43:2"
                                  }
                                ]
                              },
                              "id": 1666,
                              "nodeType": "IfStatement",
                              "src": "25627:583:2",
                              "trueBody": {
                                "id": 1654,
                                "nodeType": "Block",
                                "src": "25702:321:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1634,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1630,
                                          "name": "agreement",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1573,
                                          "src": "25774:9:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                            "typeString": "struct StorageManager.Agreement storage pointer"
                                          }
                                        },
                                        "id": 1632,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "memberName": "lastPayoutDate",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 491,
                                        "src": "25774:24:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 1633,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "25801:1:2",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "25774:28:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    },
                                    "id": 1635,
                                    "nodeType": "ExpressionStatement",
                                    "src": "25774:28:2"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1648,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1636,
                                          "name": "offer",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1541,
                                          "src": "25866:5:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                                            "typeString": "struct StorageManager.Offer storage pointer"
                                          }
                                        },
                                        "id": 1638,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "memberName": "utilizedCapacity",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 468,
                                        "src": "25866:22:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint64",
                                          "typeString": "uint64"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "arguments": [
                                              {
                                                "argumentTypes": null,
                                                "expression": {
                                                  "argumentTypes": null,
                                                  "id": 1644,
                                                  "name": "agreement",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 1573,
                                                  "src": "25925:9:2",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                                    "typeString": "struct StorageManager.Agreement storage pointer"
                                                  }
                                                },
                                                "id": 1645,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "size",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 489,
                                                "src": "25925:14:2",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint64",
                                                  "typeString": "uint64"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint64",
                                                  "typeString": "uint64"
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": null,
                                                "expression": {
                                                  "argumentTypes": null,
                                                  "id": 1641,
                                                  "name": "offer",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 1541,
                                                  "src": "25898:5:2",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                                                    "typeString": "struct StorageManager.Offer storage pointer"
                                                  }
                                                },
                                                "id": 1642,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "utilizedCapacity",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 468,
                                                "src": "25898:22:2",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint64",
                                                  "typeString": "uint64"
                                                }
                                              },
                                              "id": 1643,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "sub",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 2602,
                                              "src": "25898:26:2",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                                              }
                                            },
                                            "id": 1646,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "25898:42:2",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 1640,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "25891:6:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_uint64_$",
                                            "typeString": "type(uint64)"
                                          },
                                          "typeName": {
                                            "id": 1639,
                                            "name": "uint64",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "25891:6:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": null,
                                              "typeString": null
                                            }
                                          }
                                        },
                                        "id": 1647,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "25891:50:2",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint64",
                                          "typeString": "uint64"
                                        }
                                      },
                                      "src": "25866:75:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint64",
                                        "typeString": "uint64"
                                      }
                                    },
                                    "id": 1649,
                                    "nodeType": "ExpressionStatement",
                                    "src": "25866:75:2"
                                  },
                                  {
                                    "eventCall": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 1651,
                                          "name": "agreementReference",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1561,
                                          "src": "25985:18:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        ],
                                        "id": 1650,
                                        "name": "AgreementStopped",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 574,
                                        "src": "25968:16:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$",
                                          "typeString": "function (bytes32)"
                                        }
                                      },
                                      "id": 1652,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "25968:36:2",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 1653,
                                    "nodeType": "EmitStatement",
                                    "src": "25963:41:2"
                                  }
                                ]
                              }
                            },
                            {
                              "eventCall": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1668,
                                    "name": "agreementReference",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1561,
                                    "src": "26254:18:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1669,
                                    "name": "spentFunds",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1596,
                                    "src": "26274:10:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1670,
                                    "name": "tokenOfAgreementsToPayOut",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1535,
                                    "src": "26286:25:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 1667,
                                  "name": "AgreementFundsPayout",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 570,
                                  "src": "26233:20:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_address_$returns$__$",
                                    "typeString": "function (bytes32,uint256,address)"
                                  }
                                },
                                "id": 1671,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "26233:79:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1672,
                              "nodeType": "EmitStatement",
                              "src": "26228:84:2"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1556,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1553,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1550,
                      "src": "24657:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1554,
                        "name": "dataReferenceOfAgreementToPayOut",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1530,
                        "src": "24661:32:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory[] memory"
                        }
                      },
                      "id": 1555,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "24661:39:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "24657:43:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1676,
                  "initializationExpression": {
                    "assignments": [
                      1550
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1550,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1676,
                        "src": "24644:7:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 1549,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "24644:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 1552,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1551,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24654:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "24644:11:2"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1558,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "24702:3:2",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 1557,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1550,
                        "src": "24702:1:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "id": 1559,
                    "nodeType": "ExpressionStatement",
                    "src": "24702:3:2"
                  },
                  "nodeType": "ForStatement",
                  "src": "24639:1698:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1679,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1677,
                      "name": "toTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1547,
                      "src": "26351:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1678,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26364:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "26351:14:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1709,
                  "nodeType": "IfStatement",
                  "src": "26347:356:2",
                  "trueBody": {
                    "id": 1708,
                    "nodeType": "Block",
                    "src": "26367:336:2",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1681,
                              "name": "tokenOfAgreementsToPayOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1535,
                              "src": "26400:25:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1680,
                            "name": "_isNativeToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1896,
                            "src": "26385:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) pure returns (bool)"
                            }
                          },
                          "id": 1682,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26385:41:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 1706,
                          "nodeType": "Block",
                          "src": "26592:101:2",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1702,
                                    "name": "provider",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1537,
                                    "src": "26657:8:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1703,
                                    "name": "toTransfer",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1547,
                                    "src": "26667:10:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 1699,
                                        "name": "tokenOfAgreementsToPayOut",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1535,
                                        "src": "26617:25:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 1698,
                                      "name": "IERC20",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3333,
                                      "src": "26610:6:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IERC20_$3333_$",
                                        "typeString": "type(contract IERC20)"
                                      }
                                    },
                                    "id": 1700,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "26610:33:2",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC20_$3333",
                                      "typeString": "contract IERC20"
                                    }
                                  },
                                  "id": 1701,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "safeTransfer",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3367,
                                  "src": "26610:46:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$3333_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$3333_$",
                                    "typeString": "function (contract IERC20,address,uint256)"
                                  }
                                },
                                "id": 1704,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "26610:68:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1705,
                              "nodeType": "ExpressionStatement",
                              "src": "26610:68:2"
                            }
                          ]
                        },
                        "id": 1707,
                        "nodeType": "IfStatement",
                        "src": "26381:312:2",
                        "trueBody": {
                          "id": 1697,
                          "nodeType": "Block",
                          "src": "26428:158:2",
                          "statements": [
                            {
                              "assignments": [
                                1684,
                                null
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1684,
                                  "mutability": "mutable",
                                  "name": "success",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 1697,
                                  "src": "26447:12:2",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "typeName": {
                                    "id": 1683,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "26447:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                },
                                null
                              ],
                              "id": 1691,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "",
                                    "id": 1689,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "26498:2:2",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                      "typeString": "literal_string \"\""
                                    },
                                    "value": ""
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                      "typeString": "literal_string \"\""
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                        "typeString": "literal_string \"\""
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1685,
                                      "name": "provider",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1537,
                                      "src": "26465:8:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    },
                                    "id": 1686,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "call",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "26465:13:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                      "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                    }
                                  },
                                  "id": 1688,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "names": [
                                    "value"
                                  ],
                                  "nodeType": "FunctionCallOptions",
                                  "options": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1687,
                                      "name": "toTransfer",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1547,
                                      "src": "26486:10:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "src": "26465:32:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                                    "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                  }
                                },
                                "id": 1690,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "26465:36:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                  "typeString": "tuple(bool,bytes memory)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "26446:55:2"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1693,
                                    "name": "success",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1684,
                                    "src": "26527:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "53746f726167654d616e616765723a205472616e73666572206661696c65642e",
                                    "id": 1694,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "26536:34:2",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_f3ee78c3f3fb9fb1a0406b609f535da00fd8410e20c5225128de7c3d6d2fe069",
                                      "typeString": "literal_string \"StorageManager: Transfer failed.\""
                                    },
                                    "value": "StorageManager: Transfer failed."
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_f3ee78c3f3fb9fb1a0406b609f535da00fd8410e20c5225128de7c3d6d2fe069",
                                      "typeString": "literal_string \"StorageManager: Transfer failed.\""
                                    }
                                  ],
                                  "id": 1692,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "26519:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 1695,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "26519:52:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1696,
                              "nodeType": "ExpressionStatement",
                              "src": "26519:52:2"
                            }
                          ]
                        }
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 1711,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_payoutFunds",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1538,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1530,
                  "mutability": "mutable",
                  "name": "dataReferenceOfAgreementToPayOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1711,
                  "src": "24347:51:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr",
                    "typeString": "bytes32[][]"
                  },
                  "typeName": {
                    "baseType": {
                      "baseType": {
                        "id": 1527,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "24347:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "id": 1528,
                      "length": null,
                      "nodeType": "ArrayTypeName",
                      "src": "24347:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                        "typeString": "bytes32[]"
                      }
                    },
                    "id": 1529,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "24347:11:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_storage_$dyn_storage_ptr",
                      "typeString": "bytes32[][]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1533,
                  "mutability": "mutable",
                  "name": "creatorsOfAgreementToPayOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1711,
                  "src": "24408:44:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1531,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "24408:7:2",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 1532,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "24408:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1535,
                  "mutability": "mutable",
                  "name": "tokenOfAgreementsToPayOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1711,
                  "src": "24462:33:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1534,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "24462:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1537,
                  "mutability": "mutable",
                  "name": "provider",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1711,
                  "src": "24505:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 1536,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "24505:15:2",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24337:198:2"
            },
            "returnParameters": {
              "id": 1539,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "24545:0:2"
            },
            "scope": 1910,
            "src": "24316:2393:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1722,
              "nodeType": "Block",
              "src": "26844:25:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 1719,
                      "name": "_pause",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2403,
                      "src": "26854:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 1720,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26854:8:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1721,
                  "nodeType": "ExpressionStatement",
                  "src": "26854:8:2"
                }
              ]
            },
            "documentation": {
              "id": 1712,
              "nodeType": "StructuredDocumentation",
              "src": "26715:76:2",
              "text": " @dev Called by a pauser to pause, triggers stopped state."
            },
            "functionSelector": "8456cb59",
            "id": 1723,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1715,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1714,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2258,
                  "src": "26820:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "26820:9:2"
              },
              {
                "arguments": null,
                "id": 1717,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1716,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2377,
                  "src": "26830:13:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "26830:13:2"
              }
            ],
            "name": "pause",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1713,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26810:2:2"
            },
            "returnParameters": {
              "id": 1718,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26844:0:2"
            },
            "scope": 1910,
            "src": "26796:73:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1734,
              "nodeType": "Block",
              "src": "27006:27:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 1731,
                      "name": "_unpause",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2419,
                      "src": "27016:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 1732,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27016:10:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1733,
                  "nodeType": "ExpressionStatement",
                  "src": "27016:10:2"
                }
              ]
            },
            "documentation": {
              "id": 1724,
              "nodeType": "StructuredDocumentation",
              "src": "26875:79:2",
              "text": " @dev Called by a pauser to unpause, returns to normal state."
            },
            "functionSelector": "3f4ba83a",
            "id": 1735,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1727,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1726,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2258,
                  "src": "26985:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "26985:9:2"
              },
              {
                "arguments": null,
                "id": 1729,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1728,
                  "name": "whenPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2387,
                  "src": "26995:10:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "26995:10:2"
              }
            ],
            "name": "unpause",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1725,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26975:2:2"
            },
            "returnParameters": {
              "id": 1730,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27006:0:2"
            },
            "scope": 1910,
            "src": "26959:74:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1757,
              "nodeType": "Block",
              "src": "27795:82:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1751,
                            "name": "creator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1741,
                            "src": "27839:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1752,
                            "name": "dataReference",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1739,
                            "src": "27848:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                              "typeString": "bytes32[] memory"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1753,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1743,
                            "src": "27863:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                              "typeString": "bytes32[] memory"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1749,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "27822:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 1750,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "27822:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 1754,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "27822:47:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1748,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "27812:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 1755,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27812:58:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 1747,
                  "id": 1756,
                  "nodeType": "Return",
                  "src": "27805:65:2"
                }
              ]
            },
            "documentation": {
              "id": 1736,
              "nodeType": "StructuredDocumentation",
              "src": "27039:596:2",
              "text": "@notice get the agreementReference.\nthe agreementReference consists of the hash of the dataReference, msg.sender and the tokenAdddress, to allow:\n- multiple people to register an agreement for the same file\n- one person to register multiple agreements for the same file, but with different tokens\n- link the token to the agreement, such that we do the accounting properly\n@param dataReference the dataReference of the agreement\n@param creator the creator of the agreement\n@param token the token, which is used as a means of payment for the agreement."
            },
            "functionSelector": "bf317abb",
            "id": 1758,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAgreementReference",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1744,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1739,
                  "mutability": "mutable",
                  "name": "dataReference",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1758,
                  "src": "27680:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1737,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "27680:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 1738,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "27680:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1741,
                  "mutability": "mutable",
                  "name": "creator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1758,
                  "src": "27720:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1740,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "27720:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1743,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1758,
                  "src": "27745:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1742,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "27745:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27670:94:2"
            },
            "returnParameters": {
              "id": 1747,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1746,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1758,
                  "src": "27786:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1745,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "27786:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27785:9:2"
            },
            "scope": 1910,
            "src": "27640:237:2",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1813,
              "nodeType": "Block",
              "src": "27973:572:2",
              "statements": [
                {
                  "assignments": [
                    1766
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1766,
                      "mutability": "mutable",
                      "name": "totalPeriodPrice",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1813,
                      "src": "28042:24:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1765,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "28042:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1773,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1770,
                          "name": "agreement",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1760,
                          "src": "28088:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Agreement_$492_memory_ptr",
                            "typeString": "struct StorageManager.Agreement memory"
                          }
                        },
                        "id": 1771,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "billingPrice",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 483,
                        "src": "28088:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1767,
                          "name": "agreement",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1760,
                          "src": "28069:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Agreement_$492_memory_ptr",
                            "typeString": "struct StorageManager.Agreement memory"
                          }
                        },
                        "id": 1768,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "size",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 489,
                        "src": "28069:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "id": 1769,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2665,
                      "src": "28069:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1772,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28069:42:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28042:69:2"
                },
                {
                  "assignments": [
                    1775
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1775,
                      "mutability": "mutable",
                      "name": "periodsSinceLastPayout",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1813,
                      "src": "28121:30:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1774,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "28121:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1786,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1783,
                          "name": "agreement",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1760,
                          "src": "28196:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Agreement_$492_memory_ptr",
                            "typeString": "struct StorageManager.Agreement memory"
                          }
                        },
                        "id": 1784,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "billingPeriod",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 485,
                        "src": "28196:23:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1779,
                              "name": "agreement",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1760,
                              "src": "28166:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Agreement_$492_memory_ptr",
                                "typeString": "struct StorageManager.Agreement memory"
                              }
                            },
                            "id": 1780,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "lastPayoutDate",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 491,
                            "src": "28166:24:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 1776,
                              "name": "_time",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1880,
                              "src": "28154:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                "typeString": "function () view returns (uint256)"
                              }
                            },
                            "id": 1777,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "28154:7:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1778,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sub",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2602,
                          "src": "28154:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 1781,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "28154:37:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1782,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2682,
                      "src": "28154:41:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1785,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28154:66:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28121:99:2"
                },
                {
                  "assignments": [
                    1788
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1788,
                      "mutability": "mutable",
                      "name": "spentFunds",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1813,
                      "src": "28230:18:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1787,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "28230:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1793,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1791,
                        "name": "totalPeriodPrice",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1766,
                        "src": "28278:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1789,
                        "name": "periodsSinceLastPayout",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1775,
                        "src": "28251:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1790,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2665,
                      "src": "28251:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1792,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28251:44:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28230:65:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1797,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1794,
                      "name": "spentFunds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1788,
                      "src": "28366:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1795,
                        "name": "agreement",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1760,
                        "src": "28379:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Agreement_$492_memory_ptr",
                          "typeString": "struct StorageManager.Agreement memory"
                        }
                      },
                      "id": 1796,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "availableFunds",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 487,
                      "src": "28379:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "28366:37:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1810,
                  "nodeType": "IfStatement",
                  "src": "28362:149:2",
                  "trueBody": {
                    "id": 1809,
                    "nodeType": "Block",
                    "src": "28405:106:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1807,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1798,
                            "name": "spentFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1788,
                            "src": "28419:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1805,
                                "name": "totalPeriodPrice",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1766,
                                "src": "28483:16:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1802,
                                    "name": "totalPeriodPrice",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1766,
                                    "src": "28461:16:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1799,
                                      "name": "agreement",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1760,
                                      "src": "28432:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Agreement_$492_memory_ptr",
                                        "typeString": "struct StorageManager.Agreement memory"
                                      }
                                    },
                                    "id": 1800,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "availableFunds",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 487,
                                    "src": "28432:24:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 1801,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "div",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2682,
                                  "src": "28432:28:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 1803,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "28432:46:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1804,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "mul",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2665,
                              "src": "28432:50:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1806,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "28432:68:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "28419:81:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1808,
                        "nodeType": "ExpressionStatement",
                        "src": "28419:81:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1811,
                    "name": "spentFunds",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1788,
                    "src": "28528:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1764,
                  "id": 1812,
                  "nodeType": "Return",
                  "src": "28521:17:2"
                }
              ]
            },
            "documentation": null,
            "id": 1814,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_calculateSpentFunds",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1761,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1760,
                  "mutability": "mutable",
                  "name": "agreement",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1814,
                  "src": "27913:26:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Agreement_$492_memory_ptr",
                    "typeString": "struct StorageManager.Agreement"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1759,
                    "name": "Agreement",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 492,
                    "src": "27913:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                      "typeString": "struct StorageManager.Agreement"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27912:28:2"
            },
            "returnParameters": {
              "id": 1764,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1763,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1814,
                  "src": "27964:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1762,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27964:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27963:9:2"
            },
            "scope": 1910,
            "src": "27883:662:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1857,
              "nodeType": "Block",
              "src": "28818:317:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 1828,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1826,
                          "name": "period",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1820,
                          "src": "28836:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1827,
                          "name": "MAX_BILLING_PERIOD",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 466,
                          "src": "28846:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "28836:28:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a2042696c6c696e6720706572696f6420657863656564206d61782e206c656e677468",
                        "id": 1829,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "28866:51:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3a8bdeec08173a5178edb62caedddd3a5be2781c63e03c284cae93b42190a6e8",
                          "typeString": "literal_string \"StorageManager: Billing period exceed max. length\""
                        },
                        "value": "StorageManager: Billing period exceed max. length"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3a8bdeec08173a5178edb62caedddd3a5be2781c63e03c284cae93b42190a6e8",
                          "typeString": "literal_string \"StorageManager: Billing period exceed max. length\""
                        }
                      ],
                      "id": 1825,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "28828:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1830,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28828:90:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1831,
                  "nodeType": "ExpressionStatement",
                  "src": "28828:90:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1833,
                          "name": "isWhitelistedToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 500,
                          "src": "28936:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                            "typeString": "mapping(address => bool)"
                          }
                        },
                        "id": 1835,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1834,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1818,
                          "src": "28955:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "28936:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a20546f6b656e206973206e6f742077686974656c6973746564",
                        "id": 1836,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "28963:42:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8011f029399467d66b62133d39698ec480910caa5162e1b7ce7de81af790e263",
                          "typeString": "literal_string \"StorageManager: Token is not whitelisted\""
                        },
                        "value": "StorageManager: Token is not whitelisted"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8011f029399467d66b62133d39698ec480910caa5162e1b7ce7de81af790e263",
                          "typeString": "literal_string \"StorageManager: Token is not whitelisted\""
                        }
                      ],
                      "id": 1832,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "28928:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1837,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28928:78:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1838,
                  "nodeType": "ExpressionStatement",
                  "src": "28928:78:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1847,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1839,
                            "name": "offer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1816,
                            "src": "29016:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                              "typeString": "struct StorageManager.Offer storage pointer"
                            }
                          },
                          "id": 1843,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "billingPlansForToken",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 476,
                          "src": "29016:26:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint64_$_t_uint128_$_$",
                            "typeString": "mapping(address => mapping(uint64 => uint128))"
                          }
                        },
                        "id": 1844,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1841,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1818,
                          "src": "29043:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "29016:33:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint64_$_t_uint128_$",
                          "typeString": "mapping(uint64 => uint128)"
                        }
                      },
                      "id": 1845,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1842,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1820,
                        "src": "29050:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "29016:41:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1846,
                      "name": "price",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1822,
                      "src": "29060:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "src": "29016:49:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "id": 1848,
                  "nodeType": "ExpressionStatement",
                  "src": "29016:49:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1850,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "29095:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1851,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "29095:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1852,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1818,
                        "src": "29107:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1853,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1820,
                        "src": "29114:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1854,
                        "name": "price",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1822,
                        "src": "29122:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "id": 1849,
                      "name": "BillingPlanSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 520,
                      "src": "29080:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint64_$_t_uint128_$returns$__$",
                        "typeString": "function (address,address,uint64,uint128)"
                      }
                    },
                    "id": 1855,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29080:48:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1856,
                  "nodeType": "EmitStatement",
                  "src": "29075:53:2"
                }
              ]
            },
            "documentation": null,
            "id": 1858,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setBillingPlanForToken",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1823,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1816,
                  "mutability": "mutable",
                  "name": "offer",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1858,
                  "src": "28714:19:2",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                    "typeString": "struct StorageManager.Offer"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1815,
                    "name": "Offer",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 481,
                    "src": "28714:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                      "typeString": "struct StorageManager.Offer"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1818,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1858,
                  "src": "28743:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1817,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "28743:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1820,
                  "mutability": "mutable",
                  "name": "period",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1858,
                  "src": "28766:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1819,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "28766:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1822,
                  "mutability": "mutable",
                  "name": "price",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1858,
                  "src": "28789:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 1821,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "28789:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28704:104:2"
            },
            "returnParameters": {
              "id": 1824,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "28818:0:2"
            },
            "scope": 1910,
            "src": "28672:463:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1870,
              "nodeType": "Block",
              "src": "29198:57:2",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1865,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "29228:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1866,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "29228:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1867,
                        "name": "message",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1861,
                        "src": "29240:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      ],
                      "id": 1864,
                      "name": "MessageEmitted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 527,
                      "src": "29213:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (address,bytes32[] memory)"
                      }
                    },
                    "id": 1868,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29213:35:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1869,
                  "nodeType": "EmitStatement",
                  "src": "29208:40:2"
                }
              ]
            },
            "documentation": null,
            "id": 1871,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_emitMessage",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1862,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1861,
                  "mutability": "mutable",
                  "name": "message",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1871,
                  "src": "29163:24:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1859,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "29163:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 1860,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "29163:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "29162:26:2"
            },
            "returnParameters": {
              "id": 1863,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "29198:0:2"
            },
            "scope": 1910,
            "src": "29141:114:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1879,
              "nodeType": "Block",
              "src": "29408:27:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1877,
                    "name": "now",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": -17,
                    "src": "29425:3:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1876,
                  "id": 1878,
                  "nodeType": "Return",
                  "src": "29418:10:2"
                }
              ]
            },
            "documentation": {
              "id": 1872,
              "nodeType": "StructuredDocumentation",
              "src": "29261:85:2",
              "text": "@dev Helper function for testing timing overloaded in testing contract"
            },
            "id": 1880,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_time",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1873,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "29365:2:2"
            },
            "returnParameters": {
              "id": 1876,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1875,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1880,
                  "src": "29399:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1874,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29399:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "29398:9:2"
            },
            "scope": 1910,
            "src": "29351:84:2",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1895,
              "nodeType": "Block",
              "src": "29559:43:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1893,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1888,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1883,
                      "src": "29576:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1891,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "29593:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 1890,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "29585:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 1889,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "29585:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 1892,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "29585:10:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "29576:19:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1887,
                  "id": 1894,
                  "nodeType": "Return",
                  "src": "29569:26:2"
                }
              ]
            },
            "documentation": {
              "id": 1881,
              "nodeType": "StructuredDocumentation",
              "src": "29441:45:2",
              "text": "@notice if use a native token"
            },
            "id": 1896,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_isNativeToken",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1884,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1883,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1896,
                  "src": "29515:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1882,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "29515:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "29514:15:2"
            },
            "returnParameters": {
              "id": 1887,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1886,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1896,
                  "src": "29553:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1885,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "29553:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "29552:6:2"
            },
            "scope": 1910,
            "src": "29491:111:2",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1908,
              "nodeType": "Block",
              "src": "29655:115:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1901,
                          "name": "isWhitelistedProvider",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 504,
                          "src": "29673:21:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                            "typeString": "mapping(address => bool)"
                          }
                        },
                        "id": 1903,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1902,
                          "name": "provider",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1898,
                          "src": "29695:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "29673:31:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a2070726f7669646572206973206e6f742077686974656c6973746564",
                        "id": 1904,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "29706:45:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8747775c39b913702932b58c119cc20359eec226e37c023d68f46f1be83f8e09",
                          "typeString": "literal_string \"StorageManager: provider is not whitelisted\""
                        },
                        "value": "StorageManager: provider is not whitelisted"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8747775c39b913702932b58c119cc20359eec226e37c023d68f46f1be83f8e09",
                          "typeString": "literal_string \"StorageManager: provider is not whitelisted\""
                        }
                      ],
                      "id": 1900,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "29665:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1905,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29665:87:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1906,
                  "nodeType": "ExpressionStatement",
                  "src": "29665:87:2"
                },
                {
                  "id": 1907,
                  "nodeType": "PlaceholderStatement",
                  "src": "29762:1:2"
                }
              ]
            },
            "documentation": null,
            "id": 1909,
            "name": "whitelistedProvider",
            "nodeType": "ModifierDefinition",
            "overrides": null,
            "parameters": {
              "id": 1899,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1898,
                  "mutability": "mutable",
                  "name": "provider",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1909,
                  "src": "29637:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1897,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "29637:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "29636:18:2"
            },
            "src": "29608:162:2",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 1911,
        "src": "647:29125:2"
      }
    ],
    "src": "32:29741:2"
  },
  "legacyAST": {
    "absolutePath": "/Users/naz_dou/Documents/Projects/IovLabs/rif-marketplace-storage/contracts/StorageManager.sol",
    "exportedSymbols": {
      "StorageManager": [
        1910
      ]
    },
    "id": 1911,
    "license": "MIT",
    "nodeType": "SourceUnit",
    "nodes": [
      {
        "id": 440,
        "literals": [
          "solidity",
          "0.6",
          ".12"
        ],
        "nodeType": "PragmaDirective",
        "src": "32:23:2"
      },
      {
        "id": 441,
        "literals": [
          "experimental",
          "ABIEncoderV2"
        ],
        "nodeType": "PragmaDirective",
        "src": "56:33:2"
      },
      {
        "absolutePath": "@openzeppelin/contracts/math/SafeMath.sol",
        "file": "@openzeppelin/contracts/math/SafeMath.sol",
        "id": 442,
        "nodeType": "ImportDirective",
        "scope": 1911,
        "sourceUnit": 2753,
        "src": "91:51:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC20/SafeERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/SafeERC20.sol",
        "id": 443,
        "nodeType": "ImportDirective",
        "scope": 1911,
        "sourceUnit": 3547,
        "src": "143:59:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "file": "@openzeppelin/contracts/token/ERC20/IERC20.sol",
        "id": 444,
        "nodeType": "ImportDirective",
        "scope": 1911,
        "sourceUnit": 3334,
        "src": "203:56:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts-ethereum-package/contracts/access/Ownable.sol",
        "file": "@openzeppelin/contracts-ethereum-package/contracts/access/Ownable.sol",
        "id": 445,
        "nodeType": "ImportDirective",
        "scope": 1911,
        "sourceUnit": 2314,
        "src": "260:79:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "absolutePath": "@openzeppelin/contracts-ethereum-package/contracts/utils/Pausable.sol",
        "file": "@openzeppelin/contracts-ethereum-package/contracts/utils/Pausable.sol",
        "id": 446,
        "nodeType": "ImportDirective",
        "scope": 1911,
        "sourceUnit": 2425,
        "src": "340:79:2",
        "symbolAliases": [],
        "unitAlias": ""
      },
      {
        "abstract": false,
        "baseContracts": [
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 448,
              "name": "OwnableUpgradeSafe",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2313,
              "src": "674:18:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_OwnableUpgradeSafe_$2313",
                "typeString": "contract OwnableUpgradeSafe"
              }
            },
            "id": 449,
            "nodeType": "InheritanceSpecifier",
            "src": "674:18:2"
          },
          {
            "arguments": null,
            "baseName": {
              "contractScope": null,
              "id": 450,
              "name": "PausableUpgradeSafe",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2424,
              "src": "694:19:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_PausableUpgradeSafe_$2424",
                "typeString": "contract PausableUpgradeSafe"
              }
            },
            "id": 451,
            "nodeType": "InheritanceSpecifier",
            "src": "694:19:2"
          }
        ],
        "contractDependencies": [
          2108,
          2183,
          2313,
          2424
        ],
        "contractKind": "contract",
        "documentation": {
          "id": 447,
          "nodeType": "StructuredDocumentation",
          "src": "421:226:2",
          "text": "@title StorageManager\n @author Rinke Hendriksen <rinke@iovlabs.org>\n @author Adam Uhlir <adam@iovlabs.org>\n @notice Providers can offer their storage space and list their price and Consumers can take these offers"
        },
        "fullyImplemented": true,
        "id": 1910,
        "linearizedBaseContracts": [
          1910,
          2424,
          2313,
          2108,
          2183
        ],
        "name": "StorageManager",
        "nodeType": "ContractDefinition",
        "nodes": [
          {
            "id": 454,
            "libraryName": {
              "contractScope": null,
              "id": 452,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2752,
              "src": "726:8:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$2752",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "720:27:2",
            "typeName": {
              "id": 453,
              "name": "uint256",
              "nodeType": "ElementaryTypeName",
              "src": "739:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint256",
                "typeString": "uint256"
              }
            }
          },
          {
            "id": 457,
            "libraryName": {
              "contractScope": null,
              "id": 455,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2752,
              "src": "758:8:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$2752",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "752:27:2",
            "typeName": {
              "id": 456,
              "name": "uint128",
              "nodeType": "ElementaryTypeName",
              "src": "771:7:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint128",
                "typeString": "uint128"
              }
            }
          },
          {
            "id": 460,
            "libraryName": {
              "contractScope": null,
              "id": 458,
              "name": "SafeMath",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 2752,
              "src": "790:8:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeMath_$2752",
                "typeString": "library SafeMath"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "784:26:2",
            "typeName": {
              "id": 459,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "803:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            }
          },
          {
            "id": 463,
            "libraryName": {
              "contractScope": null,
              "id": 461,
              "name": "SafeERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3546,
              "src": "821:9:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_SafeERC20_$3546",
                "typeString": "library SafeERC20"
              }
            },
            "nodeType": "UsingForDirective",
            "src": "815:27:2",
            "typeName": {
              "contractScope": null,
              "id": 462,
              "name": "IERC20",
              "nodeType": "UserDefinedTypeName",
              "referencedDeclaration": 3333,
              "src": "835:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_contract$_IERC20_$3333",
                "typeString": "contract IERC20"
              }
            }
          },
          {
            "constant": true,
            "id": 466,
            "mutability": "constant",
            "name": "MAX_BILLING_PERIOD",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 1910,
            "src": "848:53:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_uint64",
              "typeString": "uint64"
            },
            "typeName": {
              "id": 464,
              "name": "uint64",
              "nodeType": "ElementaryTypeName",
              "src": "848:6:2",
              "typeDescriptions": {
                "typeIdentifier": "t_uint64",
                "typeString": "uint64"
              }
            },
            "value": {
              "argumentTypes": null,
              "hexValue": "3135353532303030",
              "id": 465,
              "isConstant": false,
              "isLValue": false,
              "isPure": true,
              "kind": "number",
              "lValueRequested": false,
              "nodeType": "Literal",
              "src": "893:8:2",
              "subdenomination": null,
              "typeDescriptions": {
                "typeIdentifier": "t_rational_15552000_by_1",
                "typeString": "int_const 15552000"
              },
              "value": "15552000"
            },
            "visibility": "private"
          },
          {
            "canonicalName": "StorageManager.Offer",
            "id": 481,
            "members": [
              {
                "constant": false,
                "id": 468,
                "mutability": "mutable",
                "name": "utilizedCapacity",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 481,
                "src": "1385:23:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 467,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "1385:6:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 470,
                "mutability": "mutable",
                "name": "totalCapacity",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 481,
                "src": "1418:20:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 469,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "1418:6:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 476,
                "mutability": "mutable",
                "name": "billingPlansForToken",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 481,
                "src": "1448:67:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint64_$_t_uint128_$_$",
                  "typeString": "mapping(address => mapping(uint64 => uint128))"
                },
                "typeName": {
                  "id": 475,
                  "keyType": {
                    "id": 471,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "1456:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "1448:46:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint64_$_t_uint128_$_$",
                    "typeString": "mapping(address => mapping(uint64 => uint128))"
                  },
                  "valueType": {
                    "id": 474,
                    "keyType": {
                      "id": 472,
                      "name": "uint64",
                      "nodeType": "ElementaryTypeName",
                      "src": "1475:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Mapping",
                    "src": "1467:26:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_mapping$_t_uint64_$_t_uint128_$",
                      "typeString": "mapping(uint64 => uint128)"
                    },
                    "valueType": {
                      "id": 473,
                      "name": "uint128",
                      "nodeType": "ElementaryTypeName",
                      "src": "1485:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 480,
                "mutability": "mutable",
                "name": "agreementRegistry",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 481,
                "src": "1525:47:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Agreement_$492_storage_$",
                  "typeString": "mapping(bytes32 => struct StorageManager.Agreement)"
                },
                "typeName": {
                  "id": 479,
                  "keyType": {
                    "id": 477,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "1533:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "Mapping",
                  "src": "1525:29:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Agreement_$492_storage_$",
                    "typeString": "mapping(bytes32 => struct StorageManager.Agreement)"
                  },
                  "valueType": {
                    "contractScope": null,
                    "id": 478,
                    "name": "Agreement",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 492,
                    "src": "1544:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                      "typeString": "struct StorageManager.Agreement"
                    }
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Offer",
            "nodeType": "StructDefinition",
            "scope": 1910,
            "src": "1362:273:2",
            "visibility": "public"
          },
          {
            "canonicalName": "StorageManager.Agreement",
            "id": 492,
            "members": [
              {
                "constant": false,
                "id": 483,
                "mutability": "mutable",
                "name": "billingPrice",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 492,
                "src": "2111:20:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                },
                "typeName": {
                  "id": 482,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "2111:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 485,
                "mutability": "mutable",
                "name": "billingPeriod",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 492,
                "src": "2141:20:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 484,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "2141:6:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 487,
                "mutability": "mutable",
                "name": "availableFunds",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 492,
                "src": "2171:22:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint256",
                  "typeString": "uint256"
                },
                "typeName": {
                  "id": 486,
                  "name": "uint256",
                  "nodeType": "ElementaryTypeName",
                  "src": "2171:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 489,
                "mutability": "mutable",
                "name": "size",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 492,
                "src": "2203:11:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint64",
                  "typeString": "uint64"
                },
                "typeName": {
                  "id": 488,
                  "name": "uint64",
                  "nodeType": "ElementaryTypeName",
                  "src": "2203:6:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  }
                },
                "value": null,
                "visibility": "internal"
              },
              {
                "constant": false,
                "id": 491,
                "mutability": "mutable",
                "name": "lastPayoutDate",
                "nodeType": "VariableDeclaration",
                "overrides": null,
                "scope": 492,
                "src": "2224:22:2",
                "stateVariable": false,
                "storageLocation": "default",
                "typeDescriptions": {
                  "typeIdentifier": "t_uint128",
                  "typeString": "uint128"
                },
                "typeName": {
                  "id": 490,
                  "name": "uint128",
                  "nodeType": "ElementaryTypeName",
                  "src": "2224:7:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  }
                },
                "value": null,
                "visibility": "internal"
              }
            ],
            "name": "Agreement",
            "nodeType": "StructDefinition",
            "scope": 1910,
            "src": "2084:169:2",
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "8f5c5fc8",
            "id": 496,
            "mutability": "mutable",
            "name": "offerRegistry",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 1910,
            "src": "2326:46:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Offer_$481_storage_$",
              "typeString": "mapping(address => struct StorageManager.Offer)"
            },
            "typeName": {
              "id": 495,
              "keyType": {
                "id": 493,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2334:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2326:25:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Offer_$481_storage_$",
                "typeString": "mapping(address => struct StorageManager.Offer)"
              },
              "valueType": {
                "contractScope": null,
                "id": 494,
                "name": "Offer",
                "nodeType": "UserDefinedTypeName",
                "referencedDeclaration": 481,
                "src": "2345:5:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                  "typeString": "struct StorageManager.Offer"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "ab37f486",
            "id": 500,
            "mutability": "mutable",
            "name": "isWhitelistedToken",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 1910,
            "src": "2495:50:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
              "typeString": "mapping(address => bool)"
            },
            "typeName": {
              "id": 499,
              "keyType": {
                "id": 497,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2503:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2495:24:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                "typeString": "mapping(address => bool)"
              },
              "valueType": {
                "id": 498,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "2514:4:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "constant": false,
            "functionSelector": "9aad18ca",
            "id": 504,
            "mutability": "mutable",
            "name": "isWhitelistedProvider",
            "nodeType": "VariableDeclaration",
            "overrides": null,
            "scope": 1910,
            "src": "2629:53:2",
            "stateVariable": true,
            "storageLocation": "default",
            "typeDescriptions": {
              "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
              "typeString": "mapping(address => bool)"
            },
            "typeName": {
              "id": 503,
              "keyType": {
                "id": 501,
                "name": "address",
                "nodeType": "ElementaryTypeName",
                "src": "2637:7:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_address",
                  "typeString": "address"
                }
              },
              "nodeType": "Mapping",
              "src": "2629:24:2",
              "typeDescriptions": {
                "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                "typeString": "mapping(address => bool)"
              },
              "valueType": {
                "id": 502,
                "name": "bool",
                "nodeType": "ElementaryTypeName",
                "src": "2648:4:2",
                "typeDescriptions": {
                  "typeIdentifier": "t_bool",
                  "typeString": "bool"
                }
              }
            },
            "value": null,
            "visibility": "public"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 510,
            "name": "TotalCapacitySet",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 509,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 506,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "provider",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 510,
                  "src": "2712:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 505,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2712:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 508,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "capacity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 510,
                  "src": "2738:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 507,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "2738:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2711:43:2"
            },
            "src": "2689:66:2"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 520,
            "name": "BillingPlanSet",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 519,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 512,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "provider",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 520,
                  "src": "2781:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 511,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2781:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 514,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 520,
                  "src": "2807:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 513,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2807:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 516,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "period",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 520,
                  "src": "2822:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 515,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "2822:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 518,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "price",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 520,
                  "src": "2837:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 517,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "2837:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2780:71:2"
            },
            "src": "2760:92:2"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 527,
            "name": "MessageEmitted",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 526,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 522,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "provider",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 527,
                  "src": "2878:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 521,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2878:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 525,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "message",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 527,
                  "src": "2904:17:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 523,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2904:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 524,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2904:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2877:45:2"
            },
            "src": "2857:66:2"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 546,
            "name": "NewAgreement",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 545,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 530,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "dataReference",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 546,
                  "src": "2957:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 528,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "2957:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 529,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "2957:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 532,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "agreementCreator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 546,
                  "src": "2990:32:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 531,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "2990:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 534,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "provider",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 546,
                  "src": "3032:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 533,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3032:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 536,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "size",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 546,
                  "src": "3066:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 535,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "3066:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 538,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "billingPeriod",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 546,
                  "src": "3087:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 537,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "3087:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 540,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "billingPrice",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 546,
                  "src": "3117:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 539,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "3117:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 542,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 546,
                  "src": "3147:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 541,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3147:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 544,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "availableFunds",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 546,
                  "src": "3170:22:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 543,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3170:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "2947:251:2"
            },
            "src": "2929:270:2"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 554,
            "name": "AgreementFundsDeposited",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 553,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 548,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "agreementReference",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 554,
                  "src": "3234:34:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 547,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3234:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 550,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 554,
                  "src": "3270:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 549,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3270:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 552,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 554,
                  "src": "3286:21:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 551,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3286:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3233:75:2"
            },
            "src": "3204:105:2"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 562,
            "name": "AgreementFundsWithdrawn",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 561,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 556,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "agreementReference",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 562,
                  "src": "3344:34:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 555,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3344:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 558,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 562,
                  "src": "3380:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 557,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3380:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 560,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 562,
                  "src": "3396:21:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 559,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3396:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3343:75:2"
            },
            "src": "3314:105:2"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 570,
            "name": "AgreementFundsPayout",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 569,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 564,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "agreementReference",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 570,
                  "src": "3451:34:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 563,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3451:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 566,
                  "indexed": false,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 570,
                  "src": "3487:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 565,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "3487:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 568,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 570,
                  "src": "3503:21:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 567,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3503:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3450:75:2"
            },
            "src": "3424:102:2"
          },
          {
            "anonymous": false,
            "documentation": null,
            "id": 574,
            "name": "AgreementStopped",
            "nodeType": "EventDefinition",
            "parameters": {
              "id": 573,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 572,
                  "indexed": true,
                  "mutability": "mutable",
                  "name": "agreementReference",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 574,
                  "src": "3554:34:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 571,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "3554:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3553:36:2"
            },
            "src": "3531:59:2"
          },
          {
            "body": {
              "id": 585,
              "nodeType": "Block",
              "src": "3637:60:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 579,
                      "name": "__Ownable_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2213,
                      "src": "3647:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 580,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3647:16:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 581,
                  "nodeType": "ExpressionStatement",
                  "src": "3647:16:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 582,
                      "name": "__Pausable_init",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2347,
                      "src": "3673:15:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 583,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "3673:17:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 584,
                  "nodeType": "ExpressionStatement",
                  "src": "3673:17:2"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "8129fc1c",
            "id": 586,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 577,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 576,
                  "name": "initializer",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2156,
                  "src": "3625:11:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "3625:11:2"
              }
            ],
            "name": "initialize",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 575,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3615:2:2"
            },
            "returnParameters": {
              "id": 578,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "3637:0:2"
            },
            "scope": 1910,
            "src": "3596:101:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 602,
              "nodeType": "Block",
              "src": "4029:58:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 600,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 596,
                        "name": "isWhitelistedToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 500,
                        "src": "4039:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 598,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 597,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 589,
                        "src": "4058:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4039:25:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 599,
                      "name": "isWhiteListed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 591,
                      "src": "4067:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4039:41:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 601,
                  "nodeType": "ExpressionStatement",
                  "src": "4039:41:2"
                }
              ]
            },
            "documentation": {
              "id": 587,
              "nodeType": "StructuredDocumentation",
              "src": "3703:239:2",
              "text": "@notice whitelist a token or remove the token from whitelist\n@param token the token from whom you want to set the whitelisted\n@param isWhiteListed whether you want to whitelist the token or put it from the whitelist."
            },
            "functionSelector": "39888705",
            "id": 603,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 594,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 593,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2258,
                  "src": "4019:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4019:9:2"
              }
            ],
            "name": "setWhitelistedTokens",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 592,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 589,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 603,
                  "src": "3977:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 588,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "3977:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 591,
                  "mutability": "mutable",
                  "name": "isWhiteListed",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 603,
                  "src": "3992:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 590,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "3992:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "3976:35:2"
            },
            "returnParameters": {
              "id": 595,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4029:0:2"
            },
            "scope": 1910,
            "src": "3947:140:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 619,
              "nodeType": "Block",
              "src": "4460:71:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 617,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 613,
                        "name": "isWhitelistedProvider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 504,
                        "src": "4470:21:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                          "typeString": "mapping(address => bool)"
                        }
                      },
                      "id": 615,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 614,
                        "name": "providerAddress",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 606,
                        "src": "4492:15:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "4470:38:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 616,
                      "name": "isWhiteListed",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 608,
                      "src": "4511:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "src": "4470:54:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 618,
                  "nodeType": "ExpressionStatement",
                  "src": "4470:54:2"
                }
              ]
            },
            "documentation": {
              "id": 604,
              "nodeType": "StructuredDocumentation",
              "src": "4093:268:2",
              "text": "@notice whitelist a provider or remove the provider from whitelist\n@param providerAddress the providerAddress from whom you want to set the whitelisted\n@param isWhiteListed whether you want to whitelist the provider or put it from the whitelist."
            },
            "functionSelector": "82c4dba5",
            "id": 620,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 611,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 610,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2258,
                  "src": "4450:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "4450:9:2"
              }
            ],
            "name": "setWhitelistedProvider",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 609,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 606,
                  "mutability": "mutable",
                  "name": "providerAddress",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 620,
                  "src": "4398:23:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 605,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "4398:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 608,
                  "mutability": "mutable",
                  "name": "isWhiteListed",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 620,
                  "src": "4423:18:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 607,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "4423:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "4397:45:2"
            },
            "returnParameters": {
              "id": 612,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "4460:0:2"
            },
            "scope": 1910,
            "src": "4366:165:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 674,
              "nodeType": "Block",
              "src": "6596:269:2",
              "statements": [
                {
                  "assignments": [
                    647
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 647,
                      "mutability": "mutable",
                      "name": "offer",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 674,
                      "src": "6606:19:2",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                        "typeString": "struct StorageManager.Offer"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 646,
                        "name": "Offer",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 481,
                        "src": "6606:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 652,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 648,
                      "name": "offerRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 496,
                      "src": "6628:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Offer_$481_storage_$",
                        "typeString": "mapping(address => struct StorageManager.Offer storage ref)"
                      }
                    },
                    "id": 651,
                    "indexExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 649,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "6642:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 650,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "6642:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "6628:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Offer_$481_storage",
                      "typeString": "struct StorageManager.Offer storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "6606:47:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 654,
                        "name": "capacity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 623,
                        "src": "6680:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 653,
                      "name": "setTotalCapacity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 714,
                      "src": "6663:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_uint64_$returns$__$",
                        "typeString": "function (uint64)"
                      }
                    },
                    "id": 655,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6663:26:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 656,
                  "nodeType": "ExpressionStatement",
                  "src": "6663:26:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 658,
                        "name": "offer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 647,
                        "src": "6734:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 659,
                        "name": "billingPeriods",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 627,
                        "src": "6741:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_array$_t_uint64_$dyn_memory_ptr_$dyn_memory_ptr",
                          "typeString": "uint64[] memory[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 660,
                        "name": "billingPrices",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 631,
                        "src": "6757:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_array$_t_uint128_$dyn_memory_ptr_$dyn_memory_ptr",
                          "typeString": "uint128[] memory[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 661,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 634,
                        "src": "6772:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer storage pointer"
                        },
                        {
                          "typeIdentifier": "t_array$_t_array$_t_uint64_$dyn_memory_ptr_$dyn_memory_ptr",
                          "typeString": "uint64[] memory[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_array$_t_uint128_$dyn_memory_ptr_$dyn_memory_ptr",
                          "typeString": "uint128[] memory[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      ],
                      "id": 657,
                      "name": "_setBillingPlansWithMultipleTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1510,
                      "src": "6699:34:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Offer_$481_storage_ptr_$_t_array$_t_array$_t_uint64_$dyn_memory_ptr_$dyn_memory_ptr_$_t_array$_t_array$_t_uint128_$dyn_memory_ptr_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (struct StorageManager.Offer storage pointer,uint64[] memory[] memory,uint128[] memory[] memory,address[] memory)"
                      }
                    },
                    "id": 662,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "6699:80:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 663,
                  "nodeType": "ExpressionStatement",
                  "src": "6699:80:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 667,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 664,
                        "name": "message",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 637,
                        "src": "6793:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      "id": 665,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "6793:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 666,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "6810:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "6793:18:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 673,
                  "nodeType": "IfStatement",
                  "src": "6789:70:2",
                  "trueBody": {
                    "id": 672,
                    "nodeType": "Block",
                    "src": "6813:46:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 669,
                              "name": "message",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 637,
                              "src": "6840:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              }
                            ],
                            "id": 668,
                            "name": "_emitMessage",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1871,
                            "src": "6827:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$__$",
                              "typeString": "function (bytes32[] memory)"
                            }
                          },
                          "id": 670,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "6827:21:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 671,
                        "nodeType": "ExpressionStatement",
                        "src": "6827:21:2"
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": {
              "id": 621,
              "nodeType": "StructuredDocumentation",
              "src": "4537:1801:2",
              "text": ">> FOR PROVIDER\n@notice set the totalCapacity and billingPlans of a Offer.\n@dev\n- Use this function when initiating an Offer or when the users wants to change more than one parameter at once.\n- make sure that any period * prices does not cause an overflow, as this can never be accepted (REF_MAX_PRICE) and hence is pointless\n- only whitelisted tokens are allowed to make an offer for\n- if there are two tokens, and two billingPrice/periods pairs per token, then boundaries[0] == 1.\nThis makes the first two billingPeriod/prices pairs to apply to the first token ([tokens[0]]) and the second pairs to the second token.\n- make sure that the length of billingPeriods and billingPrices is of equal length. If billingPeriods is longer than prices => array index out of bounds error. If prices longer than period => the prices in higher indeces won't be considered\n@param capacity the amount of MB offered. If already active before and set to 0, existing contracts can't be prolonged / re-started, no new contracts can be started.\n@param billingPeriods the offered periods. Length must be equal to the length of billingPrices. The first index of the multi dem array corresponds with the address in tokens at the same index\n@param billingPrices the prices for the offered periods. Each entry at index corresponds to the same index at periods. The first index of the multi dem array corresponds with the address in tokens at the same index\n@param tokens the tokens for which an offer is made. By convention, address(0) is the native currency.\n@param message the Provider may include a message (e.g. his nodeID).  Message should be structured such that the first two bits specify the message type, followed with the message). 0x01 == nodeID"
            },
            "functionSelector": "37f4329d",
            "id": 675,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 640,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 639,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2377,
                  "src": "6550:13:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6550:13:2"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 642,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "6584:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 643,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "6584:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 644,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 641,
                  "name": "whitelistedProvider",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1909,
                  "src": "6564:19:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "6564:31:2"
              }
            ],
            "name": "setOffer",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 638,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 623,
                  "mutability": "mutable",
                  "name": "capacity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 675,
                  "src": "6370:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 622,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "6370:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 627,
                  "mutability": "mutable",
                  "name": "billingPeriods",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 675,
                  "src": "6395:32:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_array$_t_uint64_$dyn_memory_ptr_$dyn_memory_ptr",
                    "typeString": "uint64[][]"
                  },
                  "typeName": {
                    "baseType": {
                      "baseType": {
                        "id": 624,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "6395:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "id": 625,
                      "length": null,
                      "nodeType": "ArrayTypeName",
                      "src": "6395:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint64_$dyn_storage_ptr",
                        "typeString": "uint64[]"
                      }
                    },
                    "id": 626,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "6395:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_array$_t_uint64_$dyn_storage_$dyn_storage_ptr",
                      "typeString": "uint64[][]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 631,
                  "mutability": "mutable",
                  "name": "billingPrices",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 675,
                  "src": "6437:32:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_array$_t_uint128_$dyn_memory_ptr_$dyn_memory_ptr",
                    "typeString": "uint128[][]"
                  },
                  "typeName": {
                    "baseType": {
                      "baseType": {
                        "id": 628,
                        "name": "uint128",
                        "nodeType": "ElementaryTypeName",
                        "src": "6437:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "id": 629,
                      "length": null,
                      "nodeType": "ArrayTypeName",
                      "src": "6437:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                        "typeString": "uint128[]"
                      }
                    },
                    "id": 630,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "6437:11:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_array$_t_uint128_$dyn_storage_$dyn_storage_ptr",
                      "typeString": "uint128[][]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 634,
                  "mutability": "mutable",
                  "name": "tokens",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 675,
                  "src": "6479:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 632,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "6479:7:2",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 633,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "6479:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 637,
                  "mutability": "mutable",
                  "name": "message",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 675,
                  "src": "6512:24:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 635,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "6512:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 636,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "6512:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "6360:182:2"
            },
            "returnParameters": {
              "id": 645,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "6596:0:2"
            },
            "scope": 1910,
            "src": "6343:522:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 713,
              "nodeType": "Block",
              "src": "7081:245:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 690,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 688,
                          "name": "capacity",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 678,
                          "src": "7099:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 689,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7111:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "7099:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a2043617061636974792068617320746f2062652067726561746572207468656e207a65726f",
                        "id": 691,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7114:54:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_9d44f67823b8890bcc3daeba4911b8e432c87d54e23377a89dc34d9396013dcf",
                          "typeString": "literal_string \"StorageManager: Capacity has to be greater then zero\""
                        },
                        "value": "StorageManager: Capacity has to be greater then zero"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_9d44f67823b8890bcc3daeba4911b8e432c87d54e23377a89dc34d9396013dcf",
                          "typeString": "literal_string \"StorageManager: Capacity has to be greater then zero\""
                        }
                      ],
                      "id": 687,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7091:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 692,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7091:78:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 693,
                  "nodeType": "ExpressionStatement",
                  "src": "7091:78:2"
                },
                {
                  "assignments": [
                    695
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 695,
                      "mutability": "mutable",
                      "name": "offer",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 713,
                      "src": "7179:19:2",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                        "typeString": "struct StorageManager.Offer"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 694,
                        "name": "Offer",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 481,
                        "src": "7179:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 700,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 696,
                      "name": "offerRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 496,
                      "src": "7201:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Offer_$481_storage_$",
                        "typeString": "mapping(address => struct StorageManager.Offer storage ref)"
                      }
                    },
                    "id": 699,
                    "indexExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 697,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "7215:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 698,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "7215:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7201:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Offer_$481_storage",
                      "typeString": "struct StorageManager.Offer storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7179:47:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 705,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 701,
                        "name": "offer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 695,
                        "src": "7236:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer storage pointer"
                        }
                      },
                      "id": 703,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "totalCapacity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 470,
                      "src": "7236:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 704,
                      "name": "capacity",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 678,
                      "src": "7258:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "7236:30:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 706,
                  "nodeType": "ExpressionStatement",
                  "src": "7236:30:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 708,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "7298:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 709,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "7298:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 710,
                        "name": "capacity",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 678,
                        "src": "7310:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "id": 707,
                      "name": "TotalCapacitySet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 510,
                      "src": "7281:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint64_$returns$__$",
                        "typeString": "function (address,uint64)"
                      }
                    },
                    "id": 711,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7281:38:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 712,
                  "nodeType": "EmitStatement",
                  "src": "7276:43:2"
                }
              ]
            },
            "documentation": {
              "id": 676,
              "nodeType": "StructuredDocumentation",
              "src": "6871:109:2",
              "text": ">> FOR PROVIDER\n@notice sets total capacity of Offer.\n@param capacity the new capacity"
            },
            "functionSelector": "f650ca74",
            "id": 714,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 681,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 680,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2377,
                  "src": "7035:13:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7035:13:2"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 683,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "7069:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 684,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "7069:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 685,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 682,
                  "name": "whitelistedProvider",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1909,
                  "src": "7049:19:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7049:31:2"
              }
            ],
            "name": "setTotalCapacity",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 679,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 678,
                  "mutability": "mutable",
                  "name": "capacity",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 714,
                  "src": "7011:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 677,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "7011:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "7010:17:2"
            },
            "returnParameters": {
              "id": 686,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7081:0:2"
            },
            "scope": 1910,
            "src": "6985:341:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 749,
              "nodeType": "Block",
              "src": "7693:243:2",
              "statements": [
                {
                  "assignments": [
                    723
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 723,
                      "mutability": "mutable",
                      "name": "offer",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 749,
                      "src": "7703:19:2",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                        "typeString": "struct StorageManager.Offer"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 722,
                        "name": "Offer",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 481,
                        "src": "7703:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 728,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 724,
                      "name": "offerRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 496,
                      "src": "7725:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Offer_$481_storage_$",
                        "typeString": "mapping(address => struct StorageManager.Offer storage ref)"
                      }
                    },
                    "id": 727,
                    "indexExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 725,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "7739:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 726,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "7739:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "7725:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Offer_$481_storage",
                      "typeString": "struct StorageManager.Offer storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "7703:47:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 733,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 730,
                            "name": "offer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 723,
                            "src": "7768:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                              "typeString": "struct StorageManager.Offer storage pointer"
                            }
                          },
                          "id": 731,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "totalCapacity",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 470,
                          "src": "7768:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 732,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "7791:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "7768:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a204f6666657220666f7220746869732050726f766964657220646f65736e2774206578697374",
                        "id": 734,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7794:55:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3c502fb1d82437c8bfddcb97abb863a9c97e226d04eb0a8a2472c7a1366559ff",
                          "typeString": "literal_string \"StorageManager: Offer for this Provider doesn't exist\""
                        },
                        "value": "StorageManager: Offer for this Provider doesn't exist"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3c502fb1d82437c8bfddcb97abb863a9c97e226d04eb0a8a2472c7a1366559ff",
                          "typeString": "literal_string \"StorageManager: Offer for this Provider doesn't exist\""
                        }
                      ],
                      "id": 729,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "7760:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 735,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7760:90:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 736,
                  "nodeType": "ExpressionStatement",
                  "src": "7760:90:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 741,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 737,
                        "name": "offer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 723,
                        "src": "7860:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer storage pointer"
                        }
                      },
                      "id": 739,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "totalCapacity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 470,
                      "src": "7860:19:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 740,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "7882:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "7860:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 742,
                  "nodeType": "ExpressionStatement",
                  "src": "7860:23:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 744,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "7915:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 745,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "7915:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "30",
                        "id": 746,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "number",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "7927:1:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        },
                        "value": "0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_rational_0_by_1",
                          "typeString": "int_const 0"
                        }
                      ],
                      "id": 743,
                      "name": "TotalCapacitySet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 510,
                      "src": "7898:16:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_uint64_$returns$__$",
                        "typeString": "function (address,uint64)"
                      }
                    },
                    "id": 747,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "7898:31:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 748,
                  "nodeType": "EmitStatement",
                  "src": "7893:36:2"
                }
              ]
            },
            "documentation": {
              "id": 715,
              "nodeType": "StructuredDocumentation",
              "src": "7332:291:2",
              "text": ">> FOR PROVIDER\n@notice stops the Offer. It sets the totalCapacity to 0 which indicates terminated Offer.\n@dev no new Agreement can be created and no existing Agreement can be prolonged. All existing Agreement are still valid for the amount of periods still deposited."
            },
            "functionSelector": "b5859693",
            "id": 750,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 718,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "7681:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 719,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "7681:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 720,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 717,
                  "name": "whitelistedProvider",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1909,
                  "src": "7661:19:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "7661:31:2"
              }
            ],
            "name": "terminateOffer",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 716,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7651:2:2"
            },
            "returnParameters": {
              "id": 721,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "7693:0:2"
            },
            "scope": 1910,
            "src": "7628:308:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 793,
              "nodeType": "Block",
              "src": "9339:254:2",
              "statements": [
                {
                  "assignments": [
                    772
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 772,
                      "mutability": "mutable",
                      "name": "offer",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 793,
                      "src": "9349:19:2",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                        "typeString": "struct StorageManager.Offer"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 771,
                        "name": "Offer",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 481,
                        "src": "9349:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 777,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 773,
                      "name": "offerRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 496,
                      "src": "9371:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Offer_$481_storage_$",
                        "typeString": "mapping(address => struct StorageManager.Offer storage ref)"
                      }
                    },
                    "id": 776,
                    "indexExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 774,
                        "name": "msg",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": -15,
                        "src": "9385:3:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_magic_message",
                          "typeString": "msg"
                        }
                      },
                      "id": 775,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "sender",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "9385:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "9371:25:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Offer_$481_storage",
                      "typeString": "struct StorageManager.Offer storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "9349:47:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 782,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 779,
                            "name": "offer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 772,
                            "src": "9414:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                              "typeString": "struct StorageManager.Offer storage pointer"
                            }
                          },
                          "id": 780,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "totalCapacity",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 470,
                          "src": "9414:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 781,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "9437:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "9414:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a204f6666657220666f7220746869732050726f766964657220646f65736e2774206578697374",
                        "id": 783,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "9440:55:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3c502fb1d82437c8bfddcb97abb863a9c97e226d04eb0a8a2472c7a1366559ff",
                          "typeString": "literal_string \"StorageManager: Offer for this Provider doesn't exist\""
                        },
                        "value": "StorageManager: Offer for this Provider doesn't exist"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3c502fb1d82437c8bfddcb97abb863a9c97e226d04eb0a8a2472c7a1366559ff",
                          "typeString": "literal_string \"StorageManager: Offer for this Provider doesn't exist\""
                        }
                      ],
                      "id": 778,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "9406:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 784,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9406:90:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 785,
                  "nodeType": "ExpressionStatement",
                  "src": "9406:90:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 787,
                        "name": "offer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 772,
                        "src": "9541:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer storage pointer"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 788,
                        "name": "billingPeriods",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 755,
                        "src": "9548:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_array$_t_uint64_$dyn_memory_ptr_$dyn_memory_ptr",
                          "typeString": "uint64[] memory[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 789,
                        "name": "billingPrices",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 759,
                        "src": "9564:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_array$_t_uint128_$dyn_memory_ptr_$dyn_memory_ptr",
                          "typeString": "uint128[] memory[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 790,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 762,
                        "src": "9579:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer storage pointer"
                        },
                        {
                          "typeIdentifier": "t_array$_t_array$_t_uint64_$dyn_memory_ptr_$dyn_memory_ptr",
                          "typeString": "uint64[] memory[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_array$_t_uint128_$dyn_memory_ptr_$dyn_memory_ptr",
                          "typeString": "uint128[] memory[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      ],
                      "id": 786,
                      "name": "_setBillingPlansWithMultipleTokens",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1510,
                      "src": "9506:34:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Offer_$481_storage_ptr_$_t_array$_t_array$_t_uint64_$dyn_memory_ptr_$dyn_memory_ptr_$_t_array$_t_array$_t_uint128_$dyn_memory_ptr_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (struct StorageManager.Offer storage pointer,uint64[] memory[] memory,uint128[] memory[] memory,address[] memory)"
                      }
                    },
                    "id": 791,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9506:80:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 792,
                  "nodeType": "ExpressionStatement",
                  "src": "9506:80:2"
                }
              ]
            },
            "documentation": {
              "id": 751,
              "nodeType": "StructuredDocumentation",
              "src": "7942:1191:2",
              "text": ">> FOR PROVIDER\n@notice set the billing plans for an Offer.\n@dev\n- setting the price to 0 means that a particular period is not offered, which can be used to remove a period from the offer.\n- make sure that any period * prices does not cause an overflow, as this can never be accepted and hence is pointless.\n- the length of tokens array must always be one shorter than the length of the boundaries array (otherwise you get an array index out of bounds error)\n- make sure that the length of billingPeriods and billingPrices is of equal length. If billingPeriods is longer than prices => array index out of bounds error. If prices longer than period => the prices in higher indeces won't be considered\n@param billingPeriods the offered periods. Length must be equal to billingPrices. The first index of the multi dem array corresponds with the address in tokens at the same index\n@param billingPrices the prices for the offered periods. Each entry at index corresponds to the same index at periods. 0 means that the particular period is not offered. The first index of the multi dem array corresponds with the address in tokens at the same index"
            },
            "functionSelector": "325b2941",
            "id": 794,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 765,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 764,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2377,
                  "src": "9293:13:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9293:13:2"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "expression": {
                      "argumentTypes": null,
                      "id": 767,
                      "name": "msg",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -15,
                      "src": "9327:3:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_magic_message",
                        "typeString": "msg"
                      }
                    },
                    "id": 768,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "memberName": "sender",
                    "nodeType": "MemberAccess",
                    "referencedDeclaration": null,
                    "src": "9327:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 769,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 766,
                  "name": "whitelistedProvider",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1909,
                  "src": "9307:19:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "9307:31:2"
              }
            ],
            "name": "setBillingPlans",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 763,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 755,
                  "mutability": "mutable",
                  "name": "billingPeriods",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 794,
                  "src": "9172:32:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_array$_t_uint64_$dyn_memory_ptr_$dyn_memory_ptr",
                    "typeString": "uint64[][]"
                  },
                  "typeName": {
                    "baseType": {
                      "baseType": {
                        "id": 752,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "9172:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "id": 753,
                      "length": null,
                      "nodeType": "ArrayTypeName",
                      "src": "9172:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint64_$dyn_storage_ptr",
                        "typeString": "uint64[]"
                      }
                    },
                    "id": 754,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9172:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_array$_t_uint64_$dyn_storage_$dyn_storage_ptr",
                      "typeString": "uint64[][]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 759,
                  "mutability": "mutable",
                  "name": "billingPrices",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 794,
                  "src": "9214:32:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_array$_t_uint128_$dyn_memory_ptr_$dyn_memory_ptr",
                    "typeString": "uint128[][]"
                  },
                  "typeName": {
                    "baseType": {
                      "baseType": {
                        "id": 756,
                        "name": "uint128",
                        "nodeType": "ElementaryTypeName",
                        "src": "9214:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "id": 757,
                      "length": null,
                      "nodeType": "ArrayTypeName",
                      "src": "9214:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                        "typeString": "uint128[]"
                      }
                    },
                    "id": 758,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9214:11:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_array$_t_uint128_$dyn_storage_$dyn_storage_ptr",
                      "typeString": "uint128[][]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 762,
                  "mutability": "mutable",
                  "name": "tokens",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 794,
                  "src": "9256:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 760,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "9256:7:2",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 761,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9256:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9162:123:2"
            },
            "returnParameters": {
              "id": 770,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9339:0:2"
            },
            "scope": 1910,
            "src": "9138:455:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 805,
              "nodeType": "Block",
              "src": "9885:38:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 802,
                        "name": "message",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 798,
                        "src": "9908:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      ],
                      "id": 801,
                      "name": "_emitMessage",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1871,
                      "src": "9895:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (bytes32[] memory)"
                      }
                    },
                    "id": 803,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "9895:21:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 804,
                  "nodeType": "ExpressionStatement",
                  "src": "9895:21:2"
                }
              ]
            },
            "documentation": {
              "id": 795,
              "nodeType": "StructuredDocumentation",
              "src": "9599:227:2",
              "text": ">> FOR PROVIDER\n@param message the Provider may send a message (e.g. his nodeID). Message should be structured such that the first two bits specify the message type, followed with the message). 0x01 == nodeID"
            },
            "functionSelector": "2fd09ef9",
            "id": 806,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "emitMessage",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 799,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 798,
                  "mutability": "mutable",
                  "name": "message",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 806,
                  "src": "9852:24:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 796,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "9852:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 797,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "9852:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "9851:26:2"
            },
            "returnParameters": {
              "id": 800,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "9885:0:2"
            },
            "scope": 1910,
            "src": "9831:92:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1099,
              "nodeType": "Block",
              "src": "12249:3939:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 835,
                          "name": "isWhitelistedProvider",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 504,
                          "src": "12350:21:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                            "typeString": "mapping(address => bool)"
                          }
                        },
                        "id": 837,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 836,
                          "name": "provider",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 812,
                          "src": "12372:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "12350:31:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a2070726f7669646572206973206e6f742077686974656c6973746564",
                        "id": 838,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12383:45:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8747775c39b913702932b58c119cc20359eec226e37c023d68f46f1be83f8e09",
                          "typeString": "literal_string \"StorageManager: provider is not whitelisted\""
                        },
                        "value": "StorageManager: provider is not whitelisted"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8747775c39b913702932b58c119cc20359eec226e37c023d68f46f1be83f8e09",
                          "typeString": "literal_string \"StorageManager: provider is not whitelisted\""
                        }
                      ],
                      "id": 834,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12342:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 839,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12342:87:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 840,
                  "nodeType": "ExpressionStatement",
                  "src": "12342:87:2"
                },
                {
                  "assignments": [
                    842
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 842,
                      "mutability": "mutable",
                      "name": "offer",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1099,
                      "src": "12439:19:2",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                        "typeString": "struct StorageManager.Offer"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 841,
                        "name": "Offer",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 481,
                        "src": "12439:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 846,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 843,
                      "name": "offerRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 496,
                      "src": "12461:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Offer_$481_storage_$",
                        "typeString": "mapping(address => struct StorageManager.Offer storage ref)"
                      }
                    },
                    "id": 845,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 844,
                      "name": "provider",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 812,
                      "src": "12475:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "12461:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Offer_$481_storage",
                      "typeString": "struct StorageManager.Offer storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "12439:45:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 850,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 848,
                          "name": "billingPeriod",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 816,
                          "src": "12502:13:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 849,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12519:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "12502:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a2042696c6c696e6720706572696f64206f662030206e6f7420616c6c6f776564",
                        "id": 851,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12522:49:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_1f72ec1702e3c76dd4a074b7dde969388f9085ee6ba82494b6c2d714c896669f",
                          "typeString": "literal_string \"StorageManager: Billing period of 0 not allowed\""
                        },
                        "value": "StorageManager: Billing period of 0 not allowed"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_1f72ec1702e3c76dd4a074b7dde969388f9085ee6ba82494b6c2d714c896669f",
                          "typeString": "literal_string \"StorageManager: Billing period of 0 not allowed\""
                        }
                      ],
                      "id": 847,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12494:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 852,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12494:78:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 853,
                  "nodeType": "ExpressionStatement",
                  "src": "12494:78:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 857,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 855,
                          "name": "size",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 814,
                          "src": "12590:4:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 856,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12597:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "12590:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a2053697a652068617320746f20626520626967676572207468656e2030",
                        "id": 858,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12600:46:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5fcadf2d098376b9b56e42f962343b15ac84e86ce224f8e6ea01dd542a4a5fd5",
                          "typeString": "literal_string \"StorageManager: Size has to be bigger then 0\""
                        },
                        "value": "StorageManager: Size has to be bigger then 0"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5fcadf2d098376b9b56e42f962343b15ac84e86ce224f8e6ea01dd542a4a5fd5",
                          "typeString": "literal_string \"StorageManager: Size has to be bigger then 0\""
                        }
                      ],
                      "id": 854,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12582:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 859,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12582:65:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 860,
                  "nodeType": "ExpressionStatement",
                  "src": "12582:65:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 865,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 862,
                            "name": "offer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 842,
                            "src": "12665:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                              "typeString": "struct StorageManager.Offer storage pointer"
                            }
                          },
                          "id": 863,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "totalCapacity",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 470,
                          "src": "12665:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 864,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "12688:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "12665:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a204f6666657220666f7220746869732050726f766964657220646f65736e2774206578697374",
                        "id": 866,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12691:55:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3c502fb1d82437c8bfddcb97abb863a9c97e226d04eb0a8a2472c7a1366559ff",
                          "typeString": "literal_string \"StorageManager: Offer for this Provider doesn't exist\""
                        },
                        "value": "StorageManager: Offer for this Provider doesn't exist"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3c502fb1d82437c8bfddcb97abb863a9c97e226d04eb0a8a2472c7a1366559ff",
                          "typeString": "literal_string \"StorageManager: Offer for this Provider doesn't exist\""
                        }
                      ],
                      "id": 861,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12657:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 867,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12657:90:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 868,
                  "nodeType": "ExpressionStatement",
                  "src": "12657:90:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 870,
                          "name": "isWhitelistedToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 500,
                          "src": "12765:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                            "typeString": "mapping(address => bool)"
                          }
                        },
                        "id": 872,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 871,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 818,
                          "src": "12784:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "12765:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a206e6f7420706f737369626c6520746f20696e746572616374207769746874207468697320746f6b656e",
                        "id": 873,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "12792:59:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_33cebd11de566f39d81df7d15f9ef87ba8d21f3175e038d100e9d4d5591eac97",
                          "typeString": "literal_string \"StorageManager: not possible to interact witht this token\""
                        },
                        "value": "StorageManager: not possible to interact witht this token"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_33cebd11de566f39d81df7d15f9ef87ba8d21f3175e038d100e9d4d5591eac97",
                          "typeString": "literal_string \"StorageManager: not possible to interact witht this token\""
                        }
                      ],
                      "id": 869,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "12757:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 874,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "12757:95:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 875,
                  "nodeType": "ExpressionStatement",
                  "src": "12757:95:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 879,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 876,
                        "name": "dataReferencesOfAgreementToPayOut",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 824,
                        "src": "13041:33:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory[] memory"
                        }
                      },
                      "id": 877,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "13041:40:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 878,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "13084:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "13041:44:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 891,
                  "nodeType": "IfStatement",
                  "src": "13037:275:2",
                  "trueBody": {
                    "id": 890,
                    "nodeType": "Block",
                    "src": "13087:225:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 881,
                              "name": "dataReferencesOfAgreementToPayOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 824,
                              "src": "13131:33:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory[] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 882,
                              "name": "creatorsOfAgreementToPayOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 827,
                              "src": "13182:27:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 883,
                              "name": "tokenOfAgreementsToPayOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 829,
                              "src": "13227:25:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 886,
                                  "name": "provider",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 812,
                                  "src": "13278:8:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 885,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "13270:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_payable_$",
                                  "typeString": "type(address payable)"
                                },
                                "typeName": {
                                  "id": 884,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "13270:8:2",
                                  "stateMutability": "payable",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 887,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "13270:17:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory[] memory"
                              },
                              {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 880,
                            "name": "_payoutFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1711,
                            "src": "13101:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_address_$_t_address_payable_$returns$__$",
                              "typeString": "function (bytes32[] memory[] memory,address[] memory,address,address payable)"
                            }
                          },
                          "id": 888,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "13101:200:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 889,
                        "nodeType": "ExpressionStatement",
                        "src": "13101:200:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    893
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 893,
                      "mutability": "mutable",
                      "name": "agreementReference",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1099,
                      "src": "13701:26:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 892,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "13701:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 900,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 895,
                        "name": "dataReference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 810,
                        "src": "13752:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 896,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "13767:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 897,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "13767:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 898,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 818,
                        "src": "13779:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 894,
                      "name": "getAgreementReference",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1758,
                      "src": "13730:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_address_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (bytes32[] memory,address,address) pure returns (bytes32)"
                      }
                    },
                    "id": 899,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "13730:55:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "13701:84:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    },
                    "id": 907,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 901,
                            "name": "offer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 842,
                            "src": "14023:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                              "typeString": "struct StorageManager.Offer storage pointer"
                            }
                          },
                          "id": 902,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "agreementRegistry",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 480,
                          "src": "14023:23:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Agreement_$492_storage_$",
                            "typeString": "mapping(bytes32 => struct StorageManager.Agreement storage ref)"
                          }
                        },
                        "id": 904,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 903,
                          "name": "agreementReference",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 893,
                          "src": "14047:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "14023:43:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Agreement_$492_storage",
                          "typeString": "struct StorageManager.Agreement storage ref"
                        }
                      },
                      "id": 905,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "lastPayoutDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 491,
                      "src": "14023:58:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "!=",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 906,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "14085:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "14023:63:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 956,
                  "nodeType": "IfStatement",
                  "src": "14019:423:2",
                  "trueBody": {
                    "id": 955,
                    "nodeType": "Block",
                    "src": "14088:354:2",
                    "statements": [
                      {
                        "assignments": [
                          913
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 913,
                            "mutability": "mutable",
                            "name": "dataReferenceOfAgreementToPayout",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 955,
                            "src": "14102:51:2",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr",
                              "typeString": "bytes32[][]"
                            },
                            "typeName": {
                              "baseType": {
                                "baseType": {
                                  "id": 910,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "14102:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "id": 911,
                                "length": null,
                                "nodeType": "ArrayTypeName",
                                "src": "14102:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                                  "typeString": "bytes32[]"
                                }
                              },
                              "id": 912,
                              "length": null,
                              "nodeType": "ArrayTypeName",
                              "src": "14102:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_storage_$dyn_storage_ptr",
                                "typeString": "bytes32[][]"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 920,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 918,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14172:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              }
                            ],
                            "id": 917,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "14156:15:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (bytes32[] memory[] memory)"
                            },
                            "typeName": {
                              "baseType": {
                                "baseType": {
                                  "id": 914,
                                  "name": "bytes32",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "14160:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bytes32",
                                    "typeString": "bytes32"
                                  }
                                },
                                "id": 915,
                                "length": null,
                                "nodeType": "ArrayTypeName",
                                "src": "14160:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                                  "typeString": "bytes32[]"
                                }
                              },
                              "id": 916,
                              "length": null,
                              "nodeType": "ArrayTypeName",
                              "src": "14160:11:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_storage_$dyn_storage_ptr",
                                "typeString": "bytes32[][]"
                              }
                            }
                          },
                          "id": 919,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14156:18:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr",
                            "typeString": "bytes32[] memory[] memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "14102:72:2"
                      },
                      {
                        "assignments": [
                          925
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 925,
                            "mutability": "mutable",
                            "name": "creators",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 955,
                            "src": "14188:25:2",
                            "stateVariable": false,
                            "storageLocation": "memory",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[]"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 923,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "14188:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 924,
                              "length": null,
                              "nodeType": "ArrayTypeName",
                              "src": "14188:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                "typeString": "address[]"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 931,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "hexValue": "31",
                              "id": 929,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14230:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              },
                              "value": "1"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_rational_1_by_1",
                                "typeString": "int_const 1"
                              }
                            ],
                            "id": 928,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "lValueRequested": false,
                            "nodeType": "NewExpression",
                            "src": "14216:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$",
                              "typeString": "function (uint256) pure returns (address[] memory)"
                            },
                            "typeName": {
                              "baseType": {
                                "id": 926,
                                "name": "address",
                                "nodeType": "ElementaryTypeName",
                                "src": "14220:7:2",
                                "stateMutability": "nonpayable",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_address",
                                  "typeString": "address"
                                }
                              },
                              "id": 927,
                              "length": null,
                              "nodeType": "ArrayTypeName",
                              "src": "14220:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                                "typeString": "address[]"
                              }
                            }
                          },
                          "id": 930,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14216:16:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                            "typeString": "address[] memory"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "14188:44:2"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 936,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 932,
                              "name": "dataReferenceOfAgreementToPayout",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 913,
                              "src": "14246:32:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory[] memory"
                              }
                            },
                            "id": 934,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 933,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14279:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "14246:35:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                              "typeString": "bytes32[] memory"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "id": 935,
                            "name": "dataReference",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 810,
                            "src": "14284:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                              "typeString": "bytes32[] memory"
                            }
                          },
                          "src": "14246:51:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                            "typeString": "bytes32[] memory"
                          }
                        },
                        "id": 937,
                        "nodeType": "ExpressionStatement",
                        "src": "14246:51:2"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 943,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 938,
                              "name": "creators",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 925,
                              "src": "14311:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            "id": 940,
                            "indexExpression": {
                              "argumentTypes": null,
                              "hexValue": "30",
                              "id": 939,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "number",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "14320:1:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_rational_0_by_1",
                                "typeString": "int_const 0"
                              },
                              "value": "0"
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "nodeType": "IndexAccess",
                            "src": "14311:11:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 941,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "14325:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 942,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sender",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "14325:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address_payable",
                              "typeString": "address payable"
                            }
                          },
                          "src": "14311:24:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "id": 944,
                        "nodeType": "ExpressionStatement",
                        "src": "14311:24:2"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 946,
                              "name": "dataReferenceOfAgreementToPayout",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 913,
                              "src": "14362:32:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory[] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 947,
                              "name": "creators",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 925,
                              "src": "14396:8:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 948,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 818,
                              "src": "14406:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 951,
                                  "name": "provider",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 812,
                                  "src": "14421:8:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 950,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "14413:8:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_payable_$",
                                  "typeString": "type(address payable)"
                                },
                                "typeName": {
                                  "id": 949,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "14413:8:2",
                                  "stateMutability": "payable",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 952,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "14413:17:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory[] memory"
                              },
                              {
                                "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                "typeString": "address[] memory"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            ],
                            "id": 945,
                            "name": "_payoutFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1711,
                            "src": "14349:12:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_address_$_t_address_payable_$returns$__$",
                              "typeString": "function (bytes32[] memory[] memory,address[] memory,address,address payable)"
                            }
                          },
                          "id": 953,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "14349:82:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 954,
                        "nodeType": "ExpressionStatement",
                        "src": "14349:82:2"
                      }
                    ]
                  }
                },
                {
                  "assignments": [
                    958
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 958,
                      "mutability": "mutable",
                      "name": "billingPrice",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1099,
                      "src": "14451:20:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      },
                      "typeName": {
                        "id": 957,
                        "name": "uint128",
                        "nodeType": "ElementaryTypeName",
                        "src": "14451:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 965,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 959,
                          "name": "offer",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 842,
                          "src": "14474:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                            "typeString": "struct StorageManager.Offer storage pointer"
                          }
                        },
                        "id": 960,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "billingPlansForToken",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 476,
                        "src": "14474:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint64_$_t_uint128_$_$",
                          "typeString": "mapping(address => mapping(uint64 => uint128))"
                        }
                      },
                      "id": 962,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 961,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 818,
                        "src": "14501:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "14474:33:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_uint64_$_t_uint128_$",
                        "typeString": "mapping(uint64 => uint128)"
                      }
                    },
                    "id": 964,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 963,
                      "name": "billingPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 816,
                      "src": "14508:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "14474:48:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14451:71:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "id": 969,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 967,
                          "name": "billingPrice",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 958,
                          "src": "14540:12:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 968,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "14556:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "14540:17:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a2042696c6c696e6720707269636520646f65736e277420657869737420666f72204f66666572",
                        "id": 970,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "14559:55:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_dd794f9e815216ed7348ed336491bbc87cafa64e4894c5ec8a0e28ab51ff88d2",
                          "typeString": "literal_string \"StorageManager: Billing price doesn't exist for Offer\""
                        },
                        "value": "StorageManager: Billing price doesn't exist for Offer"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_dd794f9e815216ed7348ed336491bbc87cafa64e4894c5ec8a0e28ab51ff88d2",
                          "typeString": "literal_string \"StorageManager: Billing price doesn't exist for Offer\""
                        }
                      ],
                      "id": 966,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "14532:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 971,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14532:83:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 972,
                  "nodeType": "ExpressionStatement",
                  "src": "14532:83:2"
                },
                {
                  "assignments": [
                    974
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 974,
                      "mutability": "mutable",
                      "name": "agreement",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1099,
                      "src": "14705:27:2",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                        "typeString": "struct StorageManager.Agreement"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 973,
                        "name": "Agreement",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 492,
                        "src": "14705:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                          "typeString": "struct StorageManager.Agreement"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 979,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 975,
                        "name": "offer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 842,
                        "src": "14735:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer storage pointer"
                        }
                      },
                      "id": 976,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "agreementRegistry",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 480,
                      "src": "14735:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Agreement_$492_storage_$",
                        "typeString": "mapping(bytes32 => struct StorageManager.Agreement storage ref)"
                      }
                    },
                    "id": 978,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 977,
                      "name": "agreementReference",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 893,
                      "src": "14759:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "14735:43:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Agreement_$492_storage",
                      "typeString": "struct StorageManager.Agreement storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "14705:73:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 981,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 818,
                        "src": "14982:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 980,
                      "name": "_isNativeToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1896,
                      "src": "14967:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) pure returns (bool)"
                      }
                    },
                    "id": 982,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "14967:21:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 989,
                  "nodeType": "IfStatement",
                  "src": "14963:70:2",
                  "trueBody": {
                    "id": 988,
                    "nodeType": "Block",
                    "src": "14990:43:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 986,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 983,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 820,
                            "src": "15004:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 984,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "15013:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 985,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "15013:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "15004:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 987,
                        "nodeType": "ExpressionStatement",
                        "src": "15004:18:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 998,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 990,
                        "name": "agreement",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 974,
                        "src": "15043:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                          "typeString": "struct StorageManager.Agreement storage pointer"
                        }
                      },
                      "id": 992,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "availableFunds",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 487,
                      "src": "15043:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 996,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 820,
                          "src": "15099:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 993,
                            "name": "agreement",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 974,
                            "src": "15070:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                              "typeString": "struct StorageManager.Agreement storage pointer"
                            }
                          },
                          "id": 994,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "availableFunds",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 487,
                          "src": "15070:24:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 995,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2585,
                        "src": "15070:28:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 997,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15070:36:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "15043:63:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 999,
                  "nodeType": "ExpressionStatement",
                  "src": "15043:63:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1007,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1001,
                            "name": "agreement",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 974,
                            "src": "15137:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                              "typeString": "struct StorageManager.Agreement storage pointer"
                            }
                          },
                          "id": 1002,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "availableFunds",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 487,
                          "src": "15137:24:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1005,
                              "name": "billingPrice",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 958,
                              "src": "15174:12:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "id": 1003,
                              "name": "size",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 814,
                              "src": "15165:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "id": 1004,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2665,
                            "src": "15165:8:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 1006,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15165:22:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "15137:50:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a2046756e6473206465706f73697465642068617320746f20626520666f72206174206c65617374206f6e652062696c6c696e6720706572696f64",
                        "id": 1008,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15201:75:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5a0cee75bc4864fe7316a0b2ac0bcb738d3818abcce198eb65b1af4318e6e93c",
                          "typeString": "literal_string \"StorageManager: Funds deposited has to be for at least one billing period\""
                        },
                        "value": "StorageManager: Funds deposited has to be for at least one billing period"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5a0cee75bc4864fe7316a0b2ac0bcb738d3818abcce198eb65b1af4318e6e93c",
                          "typeString": "literal_string \"StorageManager: Funds deposited has to be for at least one billing period\""
                        }
                      ],
                      "id": 1000,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "15116:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1009,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15116:170:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1010,
                  "nodeType": "ExpressionStatement",
                  "src": "15116:170:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1015,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1011,
                        "name": "agreement",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 974,
                        "src": "15296:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                          "typeString": "struct StorageManager.Agreement storage pointer"
                        }
                      },
                      "id": 1013,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "size",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 489,
                      "src": "15296:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1014,
                      "name": "size",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 814,
                      "src": "15313:4:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "15296:21:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1016,
                  "nodeType": "ExpressionStatement",
                  "src": "15296:21:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1021,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1017,
                        "name": "agreement",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 974,
                        "src": "15327:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                          "typeString": "struct StorageManager.Agreement storage pointer"
                        }
                      },
                      "id": 1019,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "billingPrice",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 483,
                      "src": "15327:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1020,
                      "name": "billingPrice",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 958,
                      "src": "15352:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "src": "15327:37:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "id": 1022,
                  "nodeType": "ExpressionStatement",
                  "src": "15327:37:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1027,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1023,
                        "name": "agreement",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 974,
                        "src": "15374:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                          "typeString": "struct StorageManager.Agreement storage pointer"
                        }
                      },
                      "id": 1025,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "billingPeriod",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 485,
                      "src": "15374:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1026,
                      "name": "billingPeriod",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 816,
                      "src": "15400:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "15374:39:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1028,
                  "nodeType": "ExpressionStatement",
                  "src": "15374:39:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1037,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1029,
                        "name": "agreement",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 974,
                        "src": "15543:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                          "typeString": "struct StorageManager.Agreement storage pointer"
                        }
                      },
                      "id": 1031,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "lastPayoutDate",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 491,
                      "src": "15543:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [],
                          "expression": {
                            "argumentTypes": [],
                            "id": 1034,
                            "name": "_time",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1880,
                            "src": "15578:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                              "typeString": "function () view returns (uint256)"
                            }
                          },
                          "id": 1035,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15578:7:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1033,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "15570:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint128_$",
                          "typeString": "type(uint128)"
                        },
                        "typeName": {
                          "id": 1032,
                          "name": "uint128",
                          "nodeType": "ElementaryTypeName",
                          "src": "15570:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 1036,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15570:16:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "src": "15543:43:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "id": 1038,
                  "nodeType": "ExpressionStatement",
                  "src": "15543:43:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1043,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "id": 1039,
                      "name": "offer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 842,
                      "src": "15596:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                        "typeString": "struct StorageManager.Offer storage pointer"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "id": 1040,
                        "name": "offerRegistry",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 496,
                        "src": "15604:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Offer_$481_storage_$",
                          "typeString": "mapping(address => struct StorageManager.Offer storage ref)"
                        }
                      },
                      "id": 1042,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1041,
                        "name": "provider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 812,
                        "src": "15618:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "IndexAccess",
                      "src": "15604:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Offer_$481_storage",
                        "typeString": "struct StorageManager.Offer storage ref"
                      }
                    },
                    "src": "15596:31:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                      "typeString": "struct StorageManager.Offer storage pointer"
                    }
                  },
                  "id": 1044,
                  "nodeType": "ExpressionStatement",
                  "src": "15596:31:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1056,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1045,
                        "name": "offer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 842,
                        "src": "15637:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer storage pointer"
                        }
                      },
                      "id": 1047,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "utilizedCapacity",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 468,
                      "src": "15637:22:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1053,
                              "name": "size",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 814,
                              "src": "15696:4:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1050,
                                "name": "offer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 842,
                                "src": "15669:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                                  "typeString": "struct StorageManager.Offer storage pointer"
                                }
                              },
                              "id": 1051,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "utilizedCapacity",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 468,
                              "src": "15669:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            },
                            "id": 1052,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "add",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2585,
                            "src": "15669:26:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 1054,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15669:32:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "id": 1049,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "15662:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_uint64_$",
                          "typeString": "type(uint64)"
                        },
                        "typeName": {
                          "id": 1048,
                          "name": "uint64",
                          "nodeType": "ElementaryTypeName",
                          "src": "15662:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 1055,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15662:40:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint64",
                        "typeString": "uint64"
                      }
                    },
                    "src": "15637:65:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "id": 1057,
                  "nodeType": "ExpressionStatement",
                  "src": "15637:65:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 1063,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1059,
                            "name": "offer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 842,
                            "src": "15720:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                              "typeString": "struct StorageManager.Offer storage pointer"
                            }
                          },
                          "id": 1060,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "utilizedCapacity",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 468,
                          "src": "15720:22:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1061,
                            "name": "offer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 842,
                            "src": "15746:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                              "typeString": "struct StorageManager.Offer storage pointer"
                            }
                          },
                          "id": 1062,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "totalCapacity",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 470,
                          "src": "15746:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "15720:45:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a20496e73756666696369656e74204f666665722773206361706163697479",
                        "id": 1064,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "15767:47:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_5e326e89aeedaab0f296f59c382da7a4553b08e7714cc3245eab6243af90761e",
                          "typeString": "literal_string \"StorageManager: Insufficient Offer's capacity\""
                        },
                        "value": "StorageManager: Insufficient Offer's capacity"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_5e326e89aeedaab0f296f59c382da7a4553b08e7714cc3245eab6243af90761e",
                          "typeString": "literal_string \"StorageManager: Insufficient Offer's capacity\""
                        }
                      ],
                      "id": 1058,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "15712:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1065,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15712:103:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1066,
                  "nodeType": "ExpressionStatement",
                  "src": "15712:103:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 1070,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "15830:22:2",
                    "subExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1068,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 818,
                          "src": "15846:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        ],
                        "id": 1067,
                        "name": "_isNativeToken",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1896,
                        "src": "15831:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bool_$",
                          "typeString": "function (address) pure returns (bool)"
                        }
                      },
                      "id": 1069,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "15831:21:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1085,
                  "nodeType": "IfStatement",
                  "src": "15826:118:2",
                  "trueBody": {
                    "id": 1084,
                    "nodeType": "Block",
                    "src": "15854:90:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1075,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "15899:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 1076,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "15899:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1079,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "15919:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_StorageManager_$1910",
                                    "typeString": "contract StorageManager"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_StorageManager_$1910",
                                    "typeString": "contract StorageManager"
                                  }
                                ],
                                "id": 1078,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "15911:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 1077,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "15911:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 1080,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15911:13:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1081,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 820,
                              "src": "15926:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1072,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 818,
                                  "src": "15875:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 1071,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3333,
                                "src": "15868:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$3333_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 1073,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "15868:13:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$3333",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 1074,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3392,
                            "src": "15868:30:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$3333_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$3333_$",
                              "typeString": "function (contract IERC20,address,address,uint256)"
                            }
                          },
                          "id": 1082,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "15868:65:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1083,
                        "nodeType": "ExpressionStatement",
                        "src": "15868:65:2"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1087,
                        "name": "dataReference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 810,
                        "src": "15984:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1088,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "16011:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1089,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "16011:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1090,
                        "name": "provider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 812,
                        "src": "16035:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1091,
                        "name": "size",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 814,
                        "src": "16057:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1092,
                        "name": "billingPeriod",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 816,
                        "src": "16075:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1093,
                        "name": "billingPrice",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 958,
                        "src": "16102:12:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1094,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 818,
                        "src": "16128:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1095,
                          "name": "agreement",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 974,
                          "src": "16147:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                            "typeString": "struct StorageManager.Agreement storage pointer"
                          }
                        },
                        "id": 1096,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "availableFunds",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 487,
                        "src": "16147:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "id": 1086,
                      "name": "NewAgreement",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 546,
                      "src": "15958:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_address_$_t_address_$_t_uint64_$_t_uint64_$_t_uint128_$_t_address_$_t_uint256_$returns$__$",
                        "typeString": "function (bytes32[] memory,address,address,uint64,uint64,uint128,address,uint256)"
                      }
                    },
                    "id": 1097,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "15958:223:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1098,
                  "nodeType": "EmitStatement",
                  "src": "15953:228:2"
                }
              ]
            },
            "documentation": {
              "id": 807,
              "nodeType": "StructuredDocumentation",
              "src": "9929:1935:2",
              "text": ">> FOR CONSUMER\n@notice new Agreement for given Offer\n@dev\n- The to-be-pinned data reference's size in MB (rounded up) must be equal in size to param size.\n- Provider can reject to pin data reference when it exceeds specified size.\n- The ownership of Agreement is enforced with agreementReference structure which is calculated as: hash(msg.sender, dataReference)\n- if the token is not the native currency, then the contract must be first be given allowance to transfer tokens in it's posession.\nContains execution of the transferFrom on external token contract before all the stage changes are performed.\nAs a result if a token will perform a callback to the StorageManager,\nit may lead to a reentrancy attack. Hence additional attention should be paid while reviewing this method of a token before whitelisting.\n@param dataReference the reference to an Data Source, can be several things.\n@param provider the provider from which is proposed to take a Offer.\n@param size the size of the to-be-pinned file in MB (rounded up).\n@param billingPeriod the chosen period for billing.\n@param token the token in which you want to make the agreement. By convention: address(0) is the native currency\n@param amount if token is set, this is the amount of tokens that is transfered\n@param dataReferencesOfAgreementToPayOut the data references of agreements which must be payed out. Pass this when there is no capacity. Order should equal order of creatorsOfAgreementToPayOut and tokensOfAgreementToPayOut\n@param creatorsOfAgreementToPayOut the creators of agreements which must be payed out. Pass this when there is no capacity. The order should match the order of dataReferenceOfAgreementToPayOut and tokensOfAgreementToPayOut\n@param tokenOfAgreementsToPayOut the token address of agreements which must be payed out. Pass this when there is no capacity."
            },
            "functionSelector": "d245599e",
            "id": 1100,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 832,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 831,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2377,
                  "src": "12235:13:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "12235:13:2"
              }
            ],
            "name": "newAgreement",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 830,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 810,
                  "mutability": "mutable",
                  "name": "dataReference",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1100,
                  "src": "11900:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 808,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "11900:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 809,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "11900:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 812,
                  "mutability": "mutable",
                  "name": "provider",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1100,
                  "src": "11940:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 811,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "11940:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 814,
                  "mutability": "mutable",
                  "name": "size",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1100,
                  "src": "11966:11:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 813,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "11966:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 816,
                  "mutability": "mutable",
                  "name": "billingPeriod",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1100,
                  "src": "11987:20:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 815,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "11987:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 818,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1100,
                  "src": "12017:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 817,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12017:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 820,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1100,
                  "src": "12040:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 819,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "12040:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 824,
                  "mutability": "mutable",
                  "name": "dataReferencesOfAgreementToPayOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1100,
                  "src": "12064:52:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr",
                    "typeString": "bytes32[][]"
                  },
                  "typeName": {
                    "baseType": {
                      "baseType": {
                        "id": 821,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "12064:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "id": 822,
                      "length": null,
                      "nodeType": "ArrayTypeName",
                      "src": "12064:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                        "typeString": "bytes32[]"
                      }
                    },
                    "id": 823,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "12064:11:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_storage_$dyn_storage_ptr",
                      "typeString": "bytes32[][]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 827,
                  "mutability": "mutable",
                  "name": "creatorsOfAgreementToPayOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1100,
                  "src": "12126:44:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 825,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "12126:7:2",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 826,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "12126:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 829,
                  "mutability": "mutable",
                  "name": "tokenOfAgreementsToPayOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1100,
                  "src": "12180:33:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 828,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "12180:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "11890:329:2"
            },
            "returnParameters": {
              "id": 833,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "12249:0:2"
            },
            "scope": 1910,
            "src": "11869:4319:2",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1250,
              "nodeType": "Block",
              "src": "17049:1449:2",
              "statements": [
                {
                  "assignments": [
                    1119
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1119,
                      "mutability": "mutable",
                      "name": "agreementReference",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1250,
                      "src": "17059:26:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      },
                      "typeName": {
                        "id": 1118,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "17059:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1126,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1121,
                        "name": "dataReference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1108,
                        "src": "17110:13:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1122,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "17125:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1123,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "17125:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1124,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1103,
                        "src": "17137:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1120,
                      "name": "getAgreementReference",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1758,
                      "src": "17088:21:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_address_$_t_address_$returns$_t_bytes32_$",
                        "typeString": "function (bytes32[] memory,address,address) pure returns (bytes32)"
                      }
                    },
                    "id": 1125,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17088:55:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17059:84:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1128,
                          "name": "isWhitelistedToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 500,
                          "src": "17161:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                            "typeString": "mapping(address => bool)"
                          }
                        },
                        "id": 1130,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1129,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1103,
                          "src": "17180:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "17161:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a20546f6b656e206973206e6f742077686974656c6973746564",
                        "id": 1131,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17188:42:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8011f029399467d66b62133d39698ec480910caa5162e1b7ce7de81af790e263",
                          "typeString": "literal_string \"StorageManager: Token is not whitelisted\""
                        },
                        "value": "StorageManager: Token is not whitelisted"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8011f029399467d66b62133d39698ec480910caa5162e1b7ce7de81af790e263",
                          "typeString": "literal_string \"StorageManager: Token is not whitelisted\""
                        }
                      ],
                      "id": 1127,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "17153:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1132,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17153:78:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1133,
                  "nodeType": "ExpressionStatement",
                  "src": "17153:78:2"
                },
                {
                  "assignments": [
                    1135
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1135,
                      "mutability": "mutable",
                      "name": "offer",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1250,
                      "src": "17241:19:2",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                        "typeString": "struct StorageManager.Offer"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1134,
                        "name": "Offer",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 481,
                        "src": "17241:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1139,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1136,
                      "name": "offerRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 496,
                      "src": "17263:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Offer_$481_storage_$",
                        "typeString": "mapping(address => struct StorageManager.Offer storage ref)"
                      }
                    },
                    "id": 1138,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1137,
                      "name": "provider",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1110,
                      "src": "17277:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "17263:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Offer_$481_storage",
                      "typeString": "struct StorageManager.Offer storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17241:45:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 1144,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1141,
                            "name": "offer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1135,
                            "src": "17304:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                              "typeString": "struct StorageManager.Offer storage pointer"
                            }
                          },
                          "id": 1142,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "totalCapacity",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 470,
                          "src": "17304:19:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1143,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "17327:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "17304:24:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a204f6666657220666f7220746869732050726f766964657220646f65736e2774206578697374",
                        "id": 1145,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17330:55:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3c502fb1d82437c8bfddcb97abb863a9c97e226d04eb0a8a2472c7a1366559ff",
                          "typeString": "literal_string \"StorageManager: Offer for this Provider doesn't exist\""
                        },
                        "value": "StorageManager: Offer for this Provider doesn't exist"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3c502fb1d82437c8bfddcb97abb863a9c97e226d04eb0a8a2472c7a1366559ff",
                          "typeString": "literal_string \"StorageManager: Offer for this Provider doesn't exist\""
                        }
                      ],
                      "id": 1140,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "17296:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1146,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17296:90:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1147,
                  "nodeType": "ExpressionStatement",
                  "src": "17296:90:2"
                },
                {
                  "assignments": [
                    1149
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1149,
                      "mutability": "mutable",
                      "name": "agreement",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1250,
                      "src": "17396:27:2",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                        "typeString": "struct StorageManager.Agreement"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1148,
                        "name": "Agreement",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 492,
                        "src": "17396:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                          "typeString": "struct StorageManager.Agreement"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1154,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1150,
                        "name": "offer",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1135,
                        "src": "17426:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer storage pointer"
                        }
                      },
                      "id": 1151,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "agreementRegistry",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 480,
                      "src": "17426:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Agreement_$492_storage_$",
                        "typeString": "mapping(bytes32 => struct StorageManager.Agreement storage ref)"
                      }
                    },
                    "id": 1153,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1152,
                      "name": "agreementReference",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1119,
                      "src": "17450:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "17426:43:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Agreement_$492_storage",
                      "typeString": "struct StorageManager.Agreement storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "17396:73:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 1159,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1156,
                            "name": "agreement",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1149,
                            "src": "17487:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                              "typeString": "struct StorageManager.Agreement storage pointer"
                            }
                          },
                          "id": 1157,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "size",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 489,
                          "src": "17487:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1158,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "17505:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "17487:19:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a2041677265656d656e7420666f722074686973204f6666657220646f65736e2774206578697374",
                        "id": 1160,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17508:56:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_6bf3f2ae50002ca5ffb935b8b90fd744cabdf923ffa93b9d388c87a1c4b05a3c",
                          "typeString": "literal_string \"StorageManager: Agreement for this Offer doesn't exist\""
                        },
                        "value": "StorageManager: Agreement for this Offer doesn't exist"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_6bf3f2ae50002ca5ffb935b8b90fd744cabdf923ffa93b9d388c87a1c4b05a3c",
                          "typeString": "literal_string \"StorageManager: Agreement for this Offer doesn't exist\""
                        }
                      ],
                      "id": 1155,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "17479:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1161,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17479:86:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1162,
                  "nodeType": "ExpressionStatement",
                  "src": "17479:86:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "id": 1167,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1164,
                            "name": "agreement",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1149,
                            "src": "17583:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                              "typeString": "struct StorageManager.Agreement storage pointer"
                            }
                          },
                          "id": 1165,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "lastPayoutDate",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 491,
                          "src": "17583:24:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1166,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "17611:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "17583:29:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a2041677265656d656e74206e6f7420616374697665",
                        "id": 1168,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17614:38:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_894ddb02d2e34ea78cc1474c66a1c2a568248f91c2efa3552ced2862a39c0e40",
                          "typeString": "literal_string \"StorageManager: Agreement not active\""
                        },
                        "value": "StorageManager: Agreement not active"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_894ddb02d2e34ea78cc1474c66a1c2a568248f91c2efa3552ced2862a39c0e40",
                          "typeString": "literal_string \"StorageManager: Agreement not active\""
                        }
                      ],
                      "id": 1163,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "17575:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1169,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17575:78:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1170,
                  "nodeType": "ExpressionStatement",
                  "src": "17575:78:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        },
                        "id": 1181,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1172,
                                "name": "offer",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1135,
                                "src": "17684:5:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                                  "typeString": "struct StorageManager.Offer storage pointer"
                                }
                              },
                              "id": 1173,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "billingPlansForToken",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 476,
                              "src": "17684:26:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint64_$_t_uint128_$_$",
                                "typeString": "mapping(address => mapping(uint64 => uint128))"
                              }
                            },
                            "id": 1175,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1174,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1103,
                              "src": "17711:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "17684:33:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_uint64_$_t_uint128_$",
                              "typeString": "mapping(uint64 => uint128)"
                            }
                          },
                          "id": 1178,
                          "indexExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1176,
                              "name": "agreement",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1149,
                              "src": "17718:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                "typeString": "struct StorageManager.Agreement storage pointer"
                              }
                            },
                            "id": 1177,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "billingPeriod",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 485,
                            "src": "17718:23:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint64",
                              "typeString": "uint64"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "17684:58:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "==",
                        "rightExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1179,
                            "name": "agreement",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1149,
                            "src": "17746:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                              "typeString": "struct StorageManager.Agreement storage pointer"
                            }
                          },
                          "id": 1180,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "billingPrice",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 483,
                          "src": "17746:22:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          }
                        },
                        "src": "17684:84:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a205072696365206e6f7420617661696c61626c6520616e796d6f7265",
                        "id": 1182,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17782:45:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_66941b9c8753029e6554aca6a3f953838951d2c8d202259010b2adbf81d4d354",
                          "typeString": "literal_string \"StorageManager: Price not available anymore\""
                        },
                        "value": "StorageManager: Price not available anymore"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_66941b9c8753029e6554aca6a3f953838951d2c8d202259010b2adbf81d4d354",
                          "typeString": "literal_string \"StorageManager: Price not available anymore\""
                        }
                      ],
                      "id": 1171,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "17663:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1183,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17663:174:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1184,
                  "nodeType": "ExpressionStatement",
                  "src": "17663:174:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "id": 1199,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1190,
                                  "name": "agreement",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1149,
                                  "src": "17918:9:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                    "typeString": "struct StorageManager.Agreement storage pointer"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                    "typeString": "struct StorageManager.Agreement storage pointer"
                                  }
                                ],
                                "id": 1189,
                                "name": "_calculateSpentFunds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1814,
                                "src": "17897:20:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_function_internal_view$_t_struct$_Agreement_$492_memory_ptr_$returns$_t_uint256_$",
                                  "typeString": "function (struct StorageManager.Agreement memory) view returns (uint256)"
                                }
                              },
                              "id": 1191,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "functionCall",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "17897:31:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1186,
                                "name": "agreement",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1149,
                                "src": "17868:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                  "typeString": "struct StorageManager.Agreement storage pointer"
                                }
                              },
                              "id": 1187,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "availableFunds",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 487,
                              "src": "17868:24:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "id": 1188,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "sub",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2602,
                            "src": "17868:28:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 1192,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17868:61:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": ">=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1196,
                                "name": "agreement",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1149,
                                "src": "17960:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                  "typeString": "struct StorageManager.Agreement storage pointer"
                                }
                              },
                              "id": 1197,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "size",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 489,
                              "src": "17960:14:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1193,
                                "name": "agreement",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1149,
                                "src": "17933:9:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                  "typeString": "struct StorageManager.Agreement storage pointer"
                                }
                              },
                              "id": 1194,
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "billingPrice",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 483,
                              "src": "17933:22:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              }
                            },
                            "id": 1195,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "mul",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 2665,
                            "src": "17933:26:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                              "typeString": "function (uint256,uint256) pure returns (uint256)"
                            }
                          },
                          "id": 1198,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "17933:42:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "src": "17868:107:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a2041677265656d656e7420616c72656164792072616e206f7574206f662066756e6473",
                        "id": 1200,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "17989:52:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_418b6ab8cb48c6e394e1ce074445daed4d88d776052f0bccba4e46f08c7e5ed0",
                          "typeString": "literal_string \"StorageManager: Agreement already ran out of funds\""
                        },
                        "value": "StorageManager: Agreement already ran out of funds"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_418b6ab8cb48c6e394e1ce074445daed4d88d776052f0bccba4e46f08c7e5ed0",
                          "typeString": "literal_string \"StorageManager: Agreement already ran out of funds\""
                        }
                      ],
                      "id": 1185,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "17847:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1201,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "17847:204:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1202,
                  "nodeType": "ExpressionStatement",
                  "src": "17847:204:2"
                },
                {
                  "assignments": [
                    1204
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1204,
                      "mutability": "mutable",
                      "name": "isNativeToken",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1250,
                      "src": "18061:18:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      },
                      "typeName": {
                        "id": 1203,
                        "name": "bool",
                        "nodeType": "ElementaryTypeName",
                        "src": "18061:4:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1208,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1206,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1103,
                        "src": "18097:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1205,
                      "name": "_isNativeToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1896,
                      "src": "18082:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bool_$",
                        "typeString": "function (address) pure returns (bool)"
                      }
                    },
                    "id": 1207,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18082:21:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "18061:42:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 1209,
                    "name": "isNativeToken",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1204,
                    "src": "18117:13:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1216,
                  "nodeType": "IfStatement",
                  "src": "18113:62:2",
                  "trueBody": {
                    "id": 1215,
                    "nodeType": "Block",
                    "src": "18132:43:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1213,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1210,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1105,
                            "src": "18146:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1211,
                              "name": "msg",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": -15,
                              "src": "18155:3:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_magic_message",
                                "typeString": "msg"
                              }
                            },
                            "id": 1212,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "value",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "18155:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "18146:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1214,
                        "nodeType": "ExpressionStatement",
                        "src": "18146:18:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1225,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1217,
                        "name": "agreement",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1149,
                        "src": "18184:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                          "typeString": "struct StorageManager.Agreement storage pointer"
                        }
                      },
                      "id": 1219,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "memberName": "availableFunds",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 487,
                      "src": "18184:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "id": 1223,
                          "name": "amount",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1105,
                          "src": "18240:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        ],
                        "expression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1220,
                            "name": "agreement",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1149,
                            "src": "18211:9:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                              "typeString": "struct StorageManager.Agreement storage pointer"
                            }
                          },
                          "id": 1221,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "availableFunds",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 487,
                          "src": "18211:24:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1222,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "add",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 2585,
                        "src": "18211:28:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                        }
                      },
                      "id": 1224,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "kind": "functionCall",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "18211:36:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "18184:63:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "id": 1226,
                  "nodeType": "ExpressionStatement",
                  "src": "18184:63:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "id": 1228,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "UnaryOperation",
                    "operator": "!",
                    "prefix": true,
                    "src": "18261:14:2",
                    "subExpression": {
                      "argumentTypes": null,
                      "id": 1227,
                      "name": "isNativeToken",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1204,
                      "src": "18262:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bool",
                        "typeString": "bool"
                      }
                    },
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1243,
                  "nodeType": "IfStatement",
                  "src": "18257:162:2",
                  "trueBody": {
                    "id": 1242,
                    "nodeType": "Block",
                    "src": "18277:142:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1233,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "18374:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 1234,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "18374:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1237,
                                  "name": "this",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": -28,
                                  "src": "18394:4:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_contract$_StorageManager_$1910",
                                    "typeString": "contract StorageManager"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_contract$_StorageManager_$1910",
                                    "typeString": "contract StorageManager"
                                  }
                                ],
                                "id": 1236,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "lValueRequested": false,
                                "nodeType": "ElementaryTypeNameExpression",
                                "src": "18386:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_address_$",
                                  "typeString": "type(address)"
                                },
                                "typeName": {
                                  "id": 1235,
                                  "name": "address",
                                  "nodeType": "ElementaryTypeName",
                                  "src": "18386:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": null,
                                    "typeString": null
                                  }
                                }
                              },
                              "id": 1238,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "18386:13:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1239,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1105,
                              "src": "18401:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            ],
                            "expression": {
                              "argumentTypes": null,
                              "arguments": [
                                {
                                  "argumentTypes": null,
                                  "id": 1230,
                                  "name": "token",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1103,
                                  "src": "18350:5:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                }
                              ],
                              "expression": {
                                "argumentTypes": [
                                  {
                                    "typeIdentifier": "t_address",
                                    "typeString": "address"
                                  }
                                ],
                                "id": 1229,
                                "name": "IERC20",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 3333,
                                "src": "18343:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_type$_t_contract$_IERC20_$3333_$",
                                  "typeString": "type(contract IERC20)"
                                }
                              },
                              "id": 1231,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "kind": "typeConversion",
                              "lValueRequested": false,
                              "names": [],
                              "nodeType": "FunctionCall",
                              "src": "18343:13:2",
                              "tryCall": false,
                              "typeDescriptions": {
                                "typeIdentifier": "t_contract$_IERC20_$3333",
                                "typeString": "contract IERC20"
                              }
                            },
                            "id": 1232,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "safeTransferFrom",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 3392,
                            "src": "18343:30:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$3333_$_t_address_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$3333_$",
                              "typeString": "function (contract IERC20,address,address,uint256)"
                            }
                          },
                          "id": 1240,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "18343:65:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1241,
                        "nodeType": "ExpressionStatement",
                        "src": "18343:65:2"
                      }
                    ]
                  }
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1245,
                        "name": "agreementReference",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1119,
                        "src": "18457:18:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1246,
                        "name": "amount",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1105,
                        "src": "18477:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1247,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1103,
                        "src": "18485:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        },
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      ],
                      "id": 1244,
                      "name": "AgreementFundsDeposited",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 554,
                      "src": "18433:23:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_address_$returns$__$",
                        "typeString": "function (bytes32,uint256,address)"
                      }
                    },
                    "id": 1248,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "18433:58:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1249,
                  "nodeType": "EmitStatement",
                  "src": "18428:63:2"
                }
              ]
            },
            "documentation": {
              "id": 1101,
              "nodeType": "StructuredDocumentation",
              "src": "16194:650:2",
              "text": ">> FOR CONSUMER\n@notice deposits new funds to the Agreement.\n@dev\n- depositing funds to Agreement that is linked to terminated Offer is not possible\n- depositing funds to Agreement that already is expired (eq. ran out of funds at some point) is not possible.\nCall NewAgreement instead. The data needs to be re-provided though.\n- if the token is not the native currency, then the contract must be first be given allowance to transfer tokens in it's posession.\n@param dataReference data reference where should be deposited funds.\n@param provider the address of the provider of the Offer."
            },
            "functionSelector": "2691c085",
            "id": 1251,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1113,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1112,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2377,
                  "src": "17005:13:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17005:13:2"
              },
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1115,
                    "name": "provider",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1110,
                    "src": "17039:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  }
                ],
                "id": 1116,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1114,
                  "name": "whitelistedProvider",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1909,
                  "src": "17019:19:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "17019:29:2"
              }
            ],
            "name": "depositFunds",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1111,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1103,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1251,
                  "src": "16880:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1102,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16880:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1105,
                  "mutability": "mutable",
                  "name": "amount",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1251,
                  "src": "16903:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1104,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "16903:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1108,
                  "mutability": "mutable",
                  "name": "dataReference",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1251,
                  "src": "16927:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1106,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "16927:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 1107,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "16927:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1110,
                  "mutability": "mutable",
                  "name": "provider",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1251,
                  "src": "16967:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1109,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "16967:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "16870:119:2"
            },
            "returnParameters": {
              "id": 1117,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "17049:0:2"
            },
            "scope": 1910,
            "src": "16849:1649:2",
            "stateMutability": "payable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1422,
              "nodeType": "Block",
              "src": "19452:1762:2",
              "statements": [
                {
                  "assignments": [
                    1267
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1267,
                      "mutability": "mutable",
                      "name": "offer",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1422,
                      "src": "19462:19:2",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                        "typeString": "struct StorageManager.Offer"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1266,
                        "name": "Offer",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 481,
                        "src": "19462:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1271,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1268,
                      "name": "offerRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 496,
                      "src": "19484:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Offer_$481_storage_$",
                        "typeString": "mapping(address => struct StorageManager.Offer storage ref)"
                      }
                    },
                    "id": 1270,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1269,
                      "name": "provider",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1257,
                      "src": "19498:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "19484:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Offer_$481_storage",
                      "typeString": "struct StorageManager.Offer storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "19462:45:2"
                },
                {
                  "body": {
                    "id": 1420,
                    "nodeType": "Block",
                    "src": "19557:1651:2",
                    "statements": [
                      {
                        "assignments": [
                          1283
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1283,
                            "mutability": "mutable",
                            "name": "amount",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1420,
                            "src": "19571:14:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1282,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "19571:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1287,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1284,
                            "name": "amounts",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1263,
                            "src": "19588:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                              "typeString": "uint256[] memory"
                            }
                          },
                          "id": 1286,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1285,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1273,
                            "src": "19596:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "19588:10:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "19571:27:2"
                      },
                      {
                        "assignments": [
                          1289
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1289,
                            "mutability": "mutable",
                            "name": "token",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1420,
                            "src": "19612:13:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            "typeName": {
                              "id": 1288,
                              "name": "address",
                              "nodeType": "ElementaryTypeName",
                              "src": "19612:7:2",
                              "stateMutability": "nonpayable",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1293,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "id": 1290,
                            "name": "tokens",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1260,
                            "src": "19628:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                              "typeString": "address[] memory"
                            }
                          },
                          "id": 1292,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1291,
                            "name": "i",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1273,
                            "src": "19635:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "19628:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "19612:25:2"
                      },
                      {
                        "assignments": [
                          1295
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1295,
                            "mutability": "mutable",
                            "name": "agreementReference",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1420,
                            "src": "19651:26:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 1294,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "19651:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1302,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1297,
                              "name": "dataReference",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1255,
                              "src": "19702:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "expression": {
                                "argumentTypes": null,
                                "id": 1298,
                                "name": "msg",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": -15,
                                "src": "19717:3:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_magic_message",
                                  "typeString": "msg"
                                }
                              },
                              "id": 1299,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sender",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": null,
                              "src": "19717:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1300,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1289,
                              "src": "19729:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              },
                              {
                                "typeIdentifier": "t_address_payable",
                                "typeString": "address payable"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1296,
                            "name": "getAgreementReference",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1758,
                            "src": "19680:21:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_address_$_t_address_$returns$_t_bytes32_$",
                              "typeString": "function (bytes32[] memory,address,address) pure returns (bytes32)"
                            }
                          },
                          "id": 1301,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19680:55:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "19651:84:2"
                      },
                      {
                        "assignments": [
                          1304
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1304,
                            "mutability": "mutable",
                            "name": "agreement",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1420,
                            "src": "19749:27:2",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                              "typeString": "struct StorageManager.Agreement"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 1303,
                              "name": "Agreement",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 492,
                              "src": "19749:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                "typeString": "struct StorageManager.Agreement"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1309,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1305,
                              "name": "offer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1267,
                              "src": "19779:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                                "typeString": "struct StorageManager.Offer storage pointer"
                              }
                            },
                            "id": 1306,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "agreementRegistry",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 480,
                            "src": "19779:23:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Agreement_$492_storage_$",
                              "typeString": "mapping(bytes32 => struct StorageManager.Agreement storage ref)"
                            }
                          },
                          "id": 1308,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1307,
                            "name": "agreementReference",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1295,
                            "src": "19803:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "19779:43:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Agreement_$492_storage",
                            "typeString": "struct StorageManager.Agreement storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "19749:73:2"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              },
                              "id": 1314,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1311,
                                  "name": "agreement",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1304,
                                  "src": "19844:9:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                    "typeString": "struct StorageManager.Agreement storage pointer"
                                  }
                                },
                                "id": 1312,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "size",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 489,
                                "src": "19844:14:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1313,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "19862:1:2",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "19844:19:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "53746f726167654d616e616765723a2041677265656d656e7420666f722074686973204f6666657220646f65736e2774206578697374",
                              "id": 1315,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "19865:56:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_6bf3f2ae50002ca5ffb935b8b90fd744cabdf923ffa93b9d388c87a1c4b05a3c",
                                "typeString": "literal_string \"StorageManager: Agreement for this Offer doesn't exist\""
                              },
                              "value": "StorageManager: Agreement for this Offer doesn't exist"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_6bf3f2ae50002ca5ffb935b8b90fd744cabdf923ffa93b9d388c87a1c4b05a3c",
                                "typeString": "literal_string \"StorageManager: Agreement for this Offer doesn't exist\""
                              }
                            ],
                            "id": 1310,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "19836:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1316,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "19836:86:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1317,
                        "nodeType": "ExpressionStatement",
                        "src": "19836:86:2"
                      },
                      {
                        "assignments": [
                          1319
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1319,
                            "mutability": "mutable",
                            "name": "maxWithdrawableFunds",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1420,
                            "src": "19936:28:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1318,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "19936:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1320,
                        "initialValue": null,
                        "nodeType": "VariableDeclarationStatement",
                        "src": "19936:28:2"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint128",
                            "typeString": "uint128"
                          },
                          "id": 1324,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1321,
                              "name": "agreement",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1304,
                              "src": "19982:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                "typeString": "struct StorageManager.Agreement storage pointer"
                              }
                            },
                            "id": 1322,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "lastPayoutDate",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 491,
                            "src": "19982:24:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1323,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "20010:1:2",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "19982:29:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 1349,
                          "nodeType": "Block",
                          "src": "20173:350:2",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 1347,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 1331,
                                  "name": "maxWithdrawableFunds",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1319,
                                  "src": "20339:20:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "components": [
                                        {
                                          "argumentTypes": null,
                                          "commonType": {
                                            "typeIdentifier": "t_uint128",
                                            "typeString": "uint128"
                                          },
                                          "id": 1344,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "leftExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 1340,
                                              "name": "agreement",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1304,
                                              "src": "20450:9:2",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                                "typeString": "struct StorageManager.Agreement storage pointer"
                                              }
                                            },
                                            "id": 1341,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "billingPrice",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 483,
                                            "src": "20450:22:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint128",
                                              "typeString": "uint128"
                                            }
                                          },
                                          "nodeType": "BinaryOperation",
                                          "operator": "*",
                                          "rightExpression": {
                                            "argumentTypes": null,
                                            "expression": {
                                              "argumentTypes": null,
                                              "id": 1342,
                                              "name": "agreement",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1304,
                                              "src": "20475:9:2",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                                "typeString": "struct StorageManager.Agreement storage pointer"
                                              }
                                            },
                                            "id": 1343,
                                            "isConstant": false,
                                            "isLValue": true,
                                            "isPure": false,
                                            "lValueRequested": false,
                                            "memberName": "size",
                                            "nodeType": "MemberAccess",
                                            "referencedDeclaration": 489,
                                            "src": "20475:14:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint64",
                                              "typeString": "uint64"
                                            }
                                          },
                                          "src": "20450:39:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint128",
                                            "typeString": "uint128"
                                          }
                                        }
                                      ],
                                      "id": 1345,
                                      "isConstant": false,
                                      "isInlineArray": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "TupleExpression",
                                      "src": "20449:41:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "arguments": [
                                            {
                                              "argumentTypes": null,
                                              "id": 1336,
                                              "name": "agreement",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1304,
                                              "src": "20412:9:2",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                                "typeString": "struct StorageManager.Agreement storage pointer"
                                              }
                                            }
                                          ],
                                          "expression": {
                                            "argumentTypes": [
                                              {
                                                "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                                "typeString": "struct StorageManager.Agreement storage pointer"
                                              }
                                            ],
                                            "id": 1335,
                                            "name": "_calculateSpentFunds",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1814,
                                            "src": "20391:20:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_function_internal_view$_t_struct$_Agreement_$492_memory_ptr_$returns$_t_uint256_$",
                                              "typeString": "function (struct StorageManager.Agreement memory) view returns (uint256)"
                                            }
                                          },
                                          "id": 1337,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": false,
                                          "kind": "functionCall",
                                          "lValueRequested": false,
                                          "names": [],
                                          "nodeType": "FunctionCall",
                                          "src": "20391:31:2",
                                          "tryCall": false,
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": null,
                                          "expression": {
                                            "argumentTypes": null,
                                            "id": 1332,
                                            "name": "agreement",
                                            "nodeType": "Identifier",
                                            "overloadedDeclarations": [],
                                            "referencedDeclaration": 1304,
                                            "src": "20362:9:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                              "typeString": "struct StorageManager.Agreement storage pointer"
                                            }
                                          },
                                          "id": 1333,
                                          "isConstant": false,
                                          "isLValue": true,
                                          "isPure": false,
                                          "lValueRequested": false,
                                          "memberName": "availableFunds",
                                          "nodeType": "MemberAccess",
                                          "referencedDeclaration": 487,
                                          "src": "20362:24:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_uint256",
                                            "typeString": "uint256"
                                          }
                                        },
                                        "id": 1334,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "lValueRequested": false,
                                        "memberName": "sub",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 2602,
                                        "src": "20362:28:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                          "typeString": "function (uint256,uint256) pure returns (uint256)"
                                        }
                                      },
                                      "id": 1338,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "20362:61:2",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1339,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sub",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2602,
                                    "src": "20362:65:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 1346,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "20362:146:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "20339:169:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1348,
                              "nodeType": "ExpressionStatement",
                              "src": "20339:169:2"
                            }
                          ]
                        },
                        "id": 1350,
                        "nodeType": "IfStatement",
                        "src": "19978:545:2",
                        "trueBody": {
                          "id": 1330,
                          "nodeType": "Block",
                          "src": "20013:154:2",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 1328,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 1325,
                                  "name": "maxWithdrawableFunds",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1319,
                                  "src": "20105:20:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1326,
                                    "name": "agreement",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1304,
                                    "src": "20128:9:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                      "typeString": "struct StorageManager.Agreement storage pointer"
                                    }
                                  },
                                  "id": 1327,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "availableFunds",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 487,
                                  "src": "20128:24:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "20105:47:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1329,
                              "nodeType": "ExpressionStatement",
                              "src": "20105:47:2"
                            }
                          ]
                        }
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1353,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1351,
                            "name": "amount",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1283,
                            "src": "20541:6:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "==",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1352,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "20551:1:2",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "20541:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 1359,
                        "nodeType": "IfStatement",
                        "src": "20537:79:2",
                        "trueBody": {
                          "id": 1358,
                          "nodeType": "Block",
                          "src": "20554:62:2",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 1356,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 1354,
                                  "name": "amount",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1283,
                                  "src": "20572:6:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "id": 1355,
                                  "name": "maxWithdrawableFunds",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1319,
                                  "src": "20581:20:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "20572:29:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1357,
                              "nodeType": "ExpressionStatement",
                              "src": "20572:29:2"
                            }
                          ]
                        }
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1363,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1361,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1283,
                                "src": "20637:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "<=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "id": 1362,
                                "name": "maxWithdrawableFunds",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1319,
                                "src": "20647:20:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "src": "20637:30:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "53746f726167654d616e616765723a20416d6f756e7420697320746f6f20626967",
                              "id": 1364,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "20669:35:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_4f642de681ff0889189e748ccaf9781df8e5dbf3aef4bceeb06d3e57ab49724c",
                                "typeString": "literal_string \"StorageManager: Amount is too big\""
                              },
                              "value": "StorageManager: Amount is too big"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_4f642de681ff0889189e748ccaf9781df8e5dbf3aef4bceeb06d3e57ab49724c",
                                "typeString": "literal_string \"StorageManager: Amount is too big\""
                              }
                            ],
                            "id": 1360,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "20629:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1365,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20629:76:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1366,
                        "nodeType": "ExpressionStatement",
                        "src": "20629:76:2"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1375,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1367,
                              "name": "agreement",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1304,
                              "src": "20719:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                "typeString": "struct StorageManager.Agreement storage pointer"
                              }
                            },
                            "id": 1369,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": true,
                            "memberName": "availableFunds",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 487,
                            "src": "20719:24:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1373,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1283,
                                "src": "20775:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1370,
                                  "name": "agreement",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1304,
                                  "src": "20746:9:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                    "typeString": "struct StorageManager.Agreement storage pointer"
                                  }
                                },
                                "id": 1371,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "availableFunds",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 487,
                                "src": "20746:24:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1372,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "sub",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2602,
                              "src": "20746:28:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1374,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "20746:36:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "20719:63:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1376,
                        "nodeType": "ExpressionStatement",
                        "src": "20719:63:2"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "id": 1380,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "id": 1378,
                                "name": "amount",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1283,
                                "src": "20804:6:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": ">",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1379,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "20813:1:2",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "20804:10:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "53746f726167654d616e616765723a204e6f7468696e6720746f207769746864726177",
                              "id": 1381,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "20816:37:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_56b727eea145827f1a7ef3a18cb5d4e4caa2253254b9905ab3c2f23a54cf16f8",
                                "typeString": "literal_string \"StorageManager: Nothing to withdraw\""
                              },
                              "value": "StorageManager: Nothing to withdraw"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_56b727eea145827f1a7ef3a18cb5d4e4caa2253254b9905ab3c2f23a54cf16f8",
                                "typeString": "literal_string \"StorageManager: Nothing to withdraw\""
                              }
                            ],
                            "id": 1377,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "20796:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1382,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20796:58:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1383,
                        "nodeType": "ExpressionStatement",
                        "src": "20796:58:2"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1385,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1289,
                              "src": "20888:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1384,
                            "name": "_isNativeToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1896,
                            "src": "20873:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) pure returns (bool)"
                            }
                          },
                          "id": 1386,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "20873:21:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 1412,
                          "nodeType": "Block",
                          "src": "21042:79:2",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1407,
                                      "name": "msg",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": -15,
                                      "src": "21087:3:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_magic_message",
                                        "typeString": "msg"
                                      }
                                    },
                                    "id": 1408,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sender",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "21087:10:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1409,
                                    "name": "amount",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1283,
                                    "src": "21099:6:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 1404,
                                        "name": "token",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1289,
                                        "src": "21067:5:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 1403,
                                      "name": "IERC20",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3333,
                                      "src": "21060:6:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IERC20_$3333_$",
                                        "typeString": "type(contract IERC20)"
                                      }
                                    },
                                    "id": 1405,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "21060:13:2",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC20_$3333",
                                      "typeString": "contract IERC20"
                                    }
                                  },
                                  "id": 1406,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "safeTransfer",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3367,
                                  "src": "21060:26:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$3333_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$3333_$",
                                    "typeString": "function (contract IERC20,address,uint256)"
                                  }
                                },
                                "id": 1410,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "21060:46:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1411,
                              "nodeType": "ExpressionStatement",
                              "src": "21060:46:2"
                            }
                          ]
                        },
                        "id": 1413,
                        "nodeType": "IfStatement",
                        "src": "20869:252:2",
                        "trueBody": {
                          "id": 1402,
                          "nodeType": "Block",
                          "src": "20896:140:2",
                          "statements": [
                            {
                              "assignments": [
                                1388,
                                null
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1388,
                                  "mutability": "mutable",
                                  "name": "success",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 1402,
                                  "src": "20915:12:2",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "typeName": {
                                    "id": 1387,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "20915:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                },
                                null
                              ],
                              "id": 1396,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "",
                                    "id": 1394,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "20964:2:2",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                      "typeString": "literal_string \"\""
                                    },
                                    "value": ""
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                      "typeString": "literal_string \"\""
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                        "typeString": "literal_string \"\""
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 1389,
                                        "name": "msg",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": -15,
                                        "src": "20933:3:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_magic_message",
                                          "typeString": "msg"
                                        }
                                      },
                                      "id": 1390,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "sender",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": null,
                                      "src": "20933:10:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    },
                                    "id": 1391,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "call",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "20933:15:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                      "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                    }
                                  },
                                  "id": 1393,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "names": [
                                    "value"
                                  ],
                                  "nodeType": "FunctionCallOptions",
                                  "options": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1392,
                                      "name": "amount",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1283,
                                      "src": "20956:6:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "src": "20933:30:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                                    "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                  }
                                },
                                "id": 1395,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "20933:34:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                  "typeString": "tuple(bool,bytes memory)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "20914:53:2"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1398,
                                    "name": "success",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1388,
                                    "src": "20993:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "5472616e73666572206661696c65642e",
                                    "id": 1399,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "21002:18:2",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_c81948f77ae7b56f1759fc612b6b373d090eebe7124f74c528fff8e0a139fe69",
                                      "typeString": "literal_string \"Transfer failed.\""
                                    },
                                    "value": "Transfer failed."
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_c81948f77ae7b56f1759fc612b6b373d090eebe7124f74c528fff8e0a139fe69",
                                      "typeString": "literal_string \"Transfer failed.\""
                                    }
                                  ],
                                  "id": 1397,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "20985:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 1400,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "20985:36:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1401,
                              "nodeType": "ExpressionStatement",
                              "src": "20985:36:2"
                            }
                          ]
                        }
                      },
                      {
                        "eventCall": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1415,
                              "name": "agreementReference",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1295,
                              "src": "21163:18:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1416,
                              "name": "amount",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1283,
                              "src": "21183:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1417,
                              "name": "token",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1289,
                              "src": "21191:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              },
                              {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1414,
                            "name": "AgreementFundsWithdrawn",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 562,
                            "src": "21139:23:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_address_$returns$__$",
                              "typeString": "function (bytes32,uint256,address)"
                            }
                          },
                          "id": 1418,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "21139:58:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1419,
                        "nodeType": "EmitStatement",
                        "src": "21134:63:2"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1278,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1275,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1273,
                      "src": "19533:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1276,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1260,
                        "src": "19537:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 1277,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "19537:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "19533:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1421,
                  "initializationExpression": {
                    "assignments": [
                      1273
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1273,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1421,
                        "src": "19522:9:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1272,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "19522:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 1274,
                    "initialValue": null,
                    "nodeType": "VariableDeclarationStatement",
                    "src": "19522:9:2"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1280,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "19552:3:2",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 1279,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1273,
                        "src": "19552:1:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1281,
                    "nodeType": "ExpressionStatement",
                    "src": "19552:3:2"
                  },
                  "nodeType": "ForStatement",
                  "src": "19517:1691:2"
                }
              ]
            },
            "documentation": {
              "id": 1252,
              "nodeType": "StructuredDocumentation",
              "src": "18504:774:2",
              "text": ">> FOR CONSUMER\n@notice withdraw funds from Agreement.\n@dev\n- if amount is zero then all withdrawable funds are transferred (eq. all available funds minus funds for still non-payed out periods and current period)\n- if Agreement is terminated Consumer can withdraw all remaining funds\n- if the token is not the native currency, then the contract must be first be given allowance to transfer tokens in it's posession.\n@param dataReference the data reference of agreement to be funds withdrawn from\n@param provider the address of the provider of the Offer.\n@param tokens the tokens in which to withdraw. By convention, address(0) is the native currency.\n@param amounts the value you want to withdraw for each token"
            },
            "functionSelector": "1f3477a5",
            "id": 1423,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "withdrawFunds",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1264,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1255,
                  "mutability": "mutable",
                  "name": "dataReference",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1423,
                  "src": "19315:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1253,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "19315:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 1254,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "19315:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1257,
                  "mutability": "mutable",
                  "name": "provider",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1423,
                  "src": "19355:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1256,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "19355:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1260,
                  "mutability": "mutable",
                  "name": "tokens",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1423,
                  "src": "19381:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1258,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "19381:7:2",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 1259,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "19381:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1263,
                  "mutability": "mutable",
                  "name": "amounts",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1423,
                  "src": "19414:24:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_uint256_$dyn_memory_ptr",
                    "typeString": "uint256[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1261,
                      "name": "uint256",
                      "nodeType": "ElementaryTypeName",
                      "src": "19414:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1262,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "19414:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_uint256_$dyn_storage_ptr",
                      "typeString": "uint256[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "19305:139:2"
            },
            "returnParameters": {
              "id": 1265,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "19452:0:2"
            },
            "scope": 1910,
            "src": "19283:1931:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1448,
              "nodeType": "Block",
              "src": "22173:189:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1442,
                        "name": "dataReferencesOfAgreementToPayOut",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1428,
                        "src": "22209:33:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1443,
                        "name": "creatorsOfAgreementToPayOut",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1431,
                        "src": "22256:27:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1444,
                        "name": "tokensOfAgreementsToPayOut",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1433,
                        "src": "22297:26:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1445,
                        "name": "provider",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1435,
                        "src": "22337:8:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory[] memory"
                        },
                        {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      ],
                      "id": 1441,
                      "name": "_payoutFunds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1711,
                      "src": "22183:12:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$_t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr_$_t_array$_t_address_$dyn_memory_ptr_$_t_address_$_t_address_payable_$returns$__$",
                        "typeString": "function (bytes32[] memory[] memory,address[] memory,address,address payable)"
                      }
                    },
                    "id": 1446,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "22183:172:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1447,
                  "nodeType": "ExpressionStatement",
                  "src": "22183:172:2"
                }
              ]
            },
            "documentation": {
              "id": 1424,
              "nodeType": "StructuredDocumentation",
              "src": "21220:689:2",
              "text": ">> FOR PROVIDER\n@notice payout already earned funds of one or more Agreement\n@dev\n- Provider must call an expired agreement themselves as soon as the agreement is expired, to add back the capacity to their Offer.\n- Payout can be triggered by other events as well. Like in newAgreement call with either existing agreement or when other\nAgreements are passed to the agreementsReferencesToBePayedOut array.\n@param dataReferencesOfAgreementToPayOut the data references of the agreement to pay\n@param creatorsOfAgreementToPayOut the creators that made the agreement to pay\n@param tokensOfAgreementsToPayOut the tokens of the agreement to pay out"
            },
            "functionSelector": "dc4aac9e",
            "id": 1449,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": [
                  {
                    "argumentTypes": null,
                    "id": 1438,
                    "name": "provider",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1435,
                    "src": "22163:8:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  }
                ],
                "id": 1439,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1437,
                  "name": "whitelistedProvider",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 1909,
                  "src": "22143:19:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$_t_address_$",
                    "typeString": "modifier (address)"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "22143:29:2"
              }
            ],
            "name": "payoutFunds",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1436,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1428,
                  "mutability": "mutable",
                  "name": "dataReferencesOfAgreementToPayOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1449,
                  "src": "21945:52:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr",
                    "typeString": "bytes32[][]"
                  },
                  "typeName": {
                    "baseType": {
                      "baseType": {
                        "id": 1425,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "21945:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "id": 1426,
                      "length": null,
                      "nodeType": "ArrayTypeName",
                      "src": "21945:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                        "typeString": "bytes32[]"
                      }
                    },
                    "id": 1427,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "21945:11:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_storage_$dyn_storage_ptr",
                      "typeString": "bytes32[][]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1431,
                  "mutability": "mutable",
                  "name": "creatorsOfAgreementToPayOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1449,
                  "src": "22007:44:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1429,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "22007:7:2",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 1430,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "22007:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1433,
                  "mutability": "mutable",
                  "name": "tokensOfAgreementsToPayOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1449,
                  "src": "22061:34:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1432,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22061:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1435,
                  "mutability": "mutable",
                  "name": "provider",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1449,
                  "src": "22105:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 1434,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "22105:15:2",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "21935:200:2"
            },
            "returnParameters": {
              "id": 1440,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "22173:0:2"
            },
            "scope": 1910,
            "src": "21915:447:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1509,
              "nodeType": "Block",
              "src": "23772:346:2",
              "statements": [
                {
                  "body": {
                    "id": 1507,
                    "nodeType": "Block",
                    "src": "23861:251:2",
                    "statements": [
                      {
                        "body": {
                          "id": 1505,
                          "nodeType": "Block",
                          "src": "23985:117:2",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1489,
                                    "name": "offer",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1452,
                                    "src": "24027:5:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                                      "typeString": "struct StorageManager.Offer storage pointer"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "id": 1490,
                                      "name": "tokens",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1463,
                                      "src": "24034:6:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                        "typeString": "address[] memory"
                                      }
                                    },
                                    "id": 1492,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 1491,
                                      "name": "i",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1467,
                                      "src": "24041:1:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "24034:9:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 1493,
                                        "name": "billingPeriods",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1456,
                                        "src": "24045:14:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_array$_t_uint64_$dyn_memory_ptr_$dyn_memory_ptr",
                                          "typeString": "uint64[] memory[] memory"
                                        }
                                      },
                                      "id": 1495,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 1494,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1467,
                                        "src": "24060:1:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "24045:17:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint64_$dyn_memory_ptr",
                                        "typeString": "uint64[] memory"
                                      }
                                    },
                                    "id": 1497,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 1496,
                                      "name": "j",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1477,
                                      "src": "24063:1:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "24045:20:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint64",
                                      "typeString": "uint64"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "baseExpression": {
                                      "argumentTypes": null,
                                      "baseExpression": {
                                        "argumentTypes": null,
                                        "id": 1498,
                                        "name": "billingPrices",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1460,
                                        "src": "24067:13:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_array$_t_array$_t_uint128_$dyn_memory_ptr_$dyn_memory_ptr",
                                          "typeString": "uint128[] memory[] memory"
                                        }
                                      },
                                      "id": 1500,
                                      "indexExpression": {
                                        "argumentTypes": null,
                                        "id": 1499,
                                        "name": "i",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1467,
                                        "src": "24081:1:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint256",
                                          "typeString": "uint256"
                                        }
                                      },
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "nodeType": "IndexAccess",
                                      "src": "24067:16:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_array$_t_uint128_$dyn_memory_ptr",
                                        "typeString": "uint128[] memory"
                                      }
                                    },
                                    "id": 1502,
                                    "indexExpression": {
                                      "argumentTypes": null,
                                      "id": 1501,
                                      "name": "j",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1477,
                                      "src": "24084:1:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "nodeType": "IndexAccess",
                                    "src": "24067:19:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                                      "typeString": "struct StorageManager.Offer storage pointer"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    },
                                    {
                                      "typeIdentifier": "t_uint64",
                                      "typeString": "uint64"
                                    },
                                    {
                                      "typeIdentifier": "t_uint128",
                                      "typeString": "uint128"
                                    }
                                  ],
                                  "id": 1488,
                                  "name": "_setBillingPlanForToken",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1858,
                                  "src": "24003:23:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_struct$_Offer_$481_storage_ptr_$_t_address_$_t_uint64_$_t_uint128_$returns$__$",
                                    "typeString": "function (struct StorageManager.Offer storage pointer,address,uint64,uint128)"
                                  }
                                },
                                "id": 1503,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "24003:84:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1504,
                              "nodeType": "ExpressionStatement",
                              "src": "24003:84:2"
                            }
                          ]
                        },
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1484,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1479,
                            "name": "j",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1477,
                            "src": "23950:1:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": "<",
                          "rightExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1480,
                                "name": "billingPeriods",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1456,
                                "src": "23954:14:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_array$_t_uint64_$dyn_memory_ptr_$dyn_memory_ptr",
                                  "typeString": "uint64[] memory[] memory"
                                }
                              },
                              "id": 1482,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1481,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1467,
                                "src": "23969:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "23954:17:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_uint64_$dyn_memory_ptr",
                                "typeString": "uint64[] memory"
                              }
                            },
                            "id": 1483,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "length",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": null,
                            "src": "23954:24:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "23950:28:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "id": 1506,
                        "initializationExpression": {
                          "assignments": [
                            1477
                          ],
                          "declarations": [
                            {
                              "constant": false,
                              "id": 1477,
                              "mutability": "mutable",
                              "name": "j",
                              "nodeType": "VariableDeclaration",
                              "overrides": null,
                              "scope": 1506,
                              "src": "23939:9:2",
                              "stateVariable": false,
                              "storageLocation": "default",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              },
                              "typeName": {
                                "id": 1476,
                                "name": "uint256",
                                "nodeType": "ElementaryTypeName",
                                "src": "23939:7:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "value": null,
                              "visibility": "internal"
                            }
                          ],
                          "id": 1478,
                          "initialValue": null,
                          "nodeType": "VariableDeclarationStatement",
                          "src": "23939:9:2"
                        },
                        "loopExpression": {
                          "expression": {
                            "argumentTypes": null,
                            "id": 1486,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "UnaryOperation",
                            "operator": "++",
                            "prefix": false,
                            "src": "23980:3:2",
                            "subExpression": {
                              "argumentTypes": null,
                              "id": 1485,
                              "name": "j",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1477,
                              "src": "23980:1:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1487,
                          "nodeType": "ExpressionStatement",
                          "src": "23980:3:2"
                        },
                        "nodeType": "ForStatement",
                        "src": "23934:168:2"
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1472,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1469,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1467,
                      "src": "23837:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1470,
                        "name": "tokens",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1463,
                        "src": "23841:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                          "typeString": "address[] memory"
                        }
                      },
                      "id": 1471,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "23841:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "23837:17:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1508,
                  "initializationExpression": {
                    "assignments": [
                      1467
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1467,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1508,
                        "src": "23826:9:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        },
                        "typeName": {
                          "id": 1466,
                          "name": "uint256",
                          "nodeType": "ElementaryTypeName",
                          "src": "23826:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 1468,
                    "initialValue": null,
                    "nodeType": "VariableDeclarationStatement",
                    "src": "23826:9:2"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1474,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "23856:3:2",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 1473,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1467,
                        "src": "23856:1:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "id": 1475,
                    "nodeType": "ExpressionStatement",
                    "src": "23856:3:2"
                  },
                  "nodeType": "ForStatement",
                  "src": "23821:291:2"
                }
              ]
            },
            "documentation": {
              "id": 1450,
              "nodeType": "StructuredDocumentation",
              "src": "22368:1194:2",
              "text": "@notice sets the billing plans for multiple tokens.\n@dev\n- the billingPeriods and billingPrices hold the period/price pair for all tokens.\n- the length of tokens array must always be one shorter than the length of the boundaries array (otherwise you get an array index out of bounds error)\n- make sure that the length of billingPeriods and billingPrices is of equal length. If billingPeriods is longer than prices => array index out of bounds error. If prices longer than period => the prices in higher indeces won't be considered\n@param offer the offer for which the billingPlan is set\n@param billingPeriods the offered periods. Length must be equal to the length of billingPrices. The first index of the multi dem array corresponds with the address in tokens at the same index\n@param billingPrices the prices for the offered periods. Each entry at index corresponds to the same index at periods. 0 means that the particular period is not offered. The first index of the multi dem array corresponds with the address in tokens at the same index\n@param tokens the tokens for which an offer is made. By convention, address(0) is the native currency."
            },
            "id": 1510,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setBillingPlansWithMultipleTokens",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1464,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1452,
                  "mutability": "mutable",
                  "name": "offer",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1510,
                  "src": "23620:19:2",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                    "typeString": "struct StorageManager.Offer"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1451,
                    "name": "Offer",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 481,
                    "src": "23620:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                      "typeString": "struct StorageManager.Offer"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1456,
                  "mutability": "mutable",
                  "name": "billingPeriods",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1510,
                  "src": "23649:32:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_array$_t_uint64_$dyn_memory_ptr_$dyn_memory_ptr",
                    "typeString": "uint64[][]"
                  },
                  "typeName": {
                    "baseType": {
                      "baseType": {
                        "id": 1453,
                        "name": "uint64",
                        "nodeType": "ElementaryTypeName",
                        "src": "23649:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "id": 1454,
                      "length": null,
                      "nodeType": "ArrayTypeName",
                      "src": "23649:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint64_$dyn_storage_ptr",
                        "typeString": "uint64[]"
                      }
                    },
                    "id": 1455,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "23649:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_array$_t_uint64_$dyn_storage_$dyn_storage_ptr",
                      "typeString": "uint64[][]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1460,
                  "mutability": "mutable",
                  "name": "billingPrices",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1510,
                  "src": "23691:32:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_array$_t_uint128_$dyn_memory_ptr_$dyn_memory_ptr",
                    "typeString": "uint128[][]"
                  },
                  "typeName": {
                    "baseType": {
                      "baseType": {
                        "id": 1457,
                        "name": "uint128",
                        "nodeType": "ElementaryTypeName",
                        "src": "23691:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      },
                      "id": 1458,
                      "length": null,
                      "nodeType": "ArrayTypeName",
                      "src": "23691:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_uint128_$dyn_storage_ptr",
                        "typeString": "uint128[]"
                      }
                    },
                    "id": 1459,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "23691:11:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_array$_t_uint128_$dyn_storage_$dyn_storage_ptr",
                      "typeString": "uint128[][]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1463,
                  "mutability": "mutable",
                  "name": "tokens",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1510,
                  "src": "23733:23:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1461,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "23733:7:2",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 1462,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "23733:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "23610:152:2"
            },
            "returnParameters": {
              "id": 1465,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "23772:0:2"
            },
            "scope": 1910,
            "src": "23567:551:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1525,
              "nodeType": "Block",
              "src": "24196:69:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "components": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 1522,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "baseExpression": {
                              "argumentTypes": null,
                              "id": 1517,
                              "name": "offerRegistry",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 496,
                              "src": "24214:13:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Offer_$481_storage_$",
                                "typeString": "mapping(address => struct StorageManager.Offer storage ref)"
                              }
                            },
                            "id": 1519,
                            "indexExpression": {
                              "argumentTypes": null,
                              "id": 1518,
                              "name": "storer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1512,
                              "src": "24228:6:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "nodeType": "IndexAccess",
                            "src": "24214:21:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Offer_$481_storage",
                              "typeString": "struct StorageManager.Offer storage ref"
                            }
                          },
                          "id": 1520,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "utilizedCapacity",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 468,
                          "src": "24214:38:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "!=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1521,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "24256:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        },
                        "src": "24214:43:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      }
                    ],
                    "id": 1523,
                    "isConstant": false,
                    "isInlineArray": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "TupleExpression",
                    "src": "24213:45:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1516,
                  "id": 1524,
                  "nodeType": "Return",
                  "src": "24206:52:2"
                }
              ]
            },
            "documentation": null,
            "functionSelector": "ec5cdf99",
            "id": 1526,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "hasUtilizedCapacity",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1513,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1512,
                  "mutability": "mutable",
                  "name": "storer",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1526,
                  "src": "24153:14:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1511,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "24153:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24152:16:2"
            },
            "returnParameters": {
              "id": 1516,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1515,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1526,
                  "src": "24190:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1514,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "24190:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24189:6:2"
            },
            "scope": 1910,
            "src": "24124:141:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1710,
              "nodeType": "Block",
              "src": "24545:2164:2",
              "statements": [
                {
                  "assignments": [
                    1541
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1541,
                      "mutability": "mutable",
                      "name": "offer",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1710,
                      "src": "24555:19:2",
                      "stateVariable": false,
                      "storageLocation": "storage",
                      "typeDescriptions": {
                        "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                        "typeString": "struct StorageManager.Offer"
                      },
                      "typeName": {
                        "contractScope": null,
                        "id": 1540,
                        "name": "Offer",
                        "nodeType": "UserDefinedTypeName",
                        "referencedDeclaration": 481,
                        "src": "24555:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                          "typeString": "struct StorageManager.Offer"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1545,
                  "initialValue": {
                    "argumentTypes": null,
                    "baseExpression": {
                      "argumentTypes": null,
                      "id": 1542,
                      "name": "offerRegistry",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 496,
                      "src": "24577:13:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_mapping$_t_address_$_t_struct$_Offer_$481_storage_$",
                        "typeString": "mapping(address => struct StorageManager.Offer storage ref)"
                      }
                    },
                    "id": 1544,
                    "indexExpression": {
                      "argumentTypes": null,
                      "id": 1543,
                      "name": "provider",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1537,
                      "src": "24591:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "isConstant": false,
                    "isLValue": true,
                    "isPure": false,
                    "lValueRequested": false,
                    "nodeType": "IndexAccess",
                    "src": "24577:23:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Offer_$481_storage",
                      "typeString": "struct StorageManager.Offer storage ref"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24555:45:2"
                },
                {
                  "assignments": [
                    1547
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1547,
                      "mutability": "mutable",
                      "name": "toTransfer",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1710,
                      "src": "24610:18:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1546,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "24610:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1548,
                  "initialValue": null,
                  "nodeType": "VariableDeclarationStatement",
                  "src": "24610:18:2"
                },
                {
                  "body": {
                    "id": 1675,
                    "nodeType": "Block",
                    "src": "24707:1630:2",
                    "statements": [
                      {
                        "assignments": [
                          1561
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1561,
                            "mutability": "mutable",
                            "name": "agreementReference",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1675,
                            "src": "24721:26:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            },
                            "typeName": {
                              "id": 1560,
                              "name": "bytes32",
                              "nodeType": "ElementaryTypeName",
                              "src": "24721:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bytes32",
                                "typeString": "bytes32"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1571,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1563,
                                "name": "dataReferenceOfAgreementToPayOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1530,
                                "src": "24809:32:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr",
                                  "typeString": "bytes32[] memory[] memory"
                                }
                              },
                              "id": 1565,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1564,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1550,
                                "src": "24842:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "24809:35:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "baseExpression": {
                                "argumentTypes": null,
                                "id": 1566,
                                "name": "creatorsOfAgreementToPayOut",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1533,
                                "src": "24866:27:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                                  "typeString": "address[] memory"
                                }
                              },
                              "id": 1568,
                              "indexExpression": {
                                "argumentTypes": null,
                                "id": 1567,
                                "name": "i",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1550,
                                "src": "24894:1:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint8",
                                  "typeString": "uint8"
                                }
                              },
                              "isConstant": false,
                              "isLValue": true,
                              "isPure": false,
                              "lValueRequested": false,
                              "nodeType": "IndexAccess",
                              "src": "24866:30:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "id": 1569,
                              "name": "tokenOfAgreementsToPayOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1535,
                              "src": "24918:25:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                                "typeString": "bytes32[] memory"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              },
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1562,
                            "name": "getAgreementReference",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1758,
                            "src": "24766:21:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_array$_t_bytes32_$dyn_memory_ptr_$_t_address_$_t_address_$returns$_t_bytes32_$",
                              "typeString": "function (bytes32[] memory,address,address) pure returns (bytes32)"
                            }
                          },
                          "id": 1570,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "24766:195:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bytes32",
                            "typeString": "bytes32"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "24721:240:2"
                      },
                      {
                        "assignments": [
                          1573
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1573,
                            "mutability": "mutable",
                            "name": "agreement",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1675,
                            "src": "24975:27:2",
                            "stateVariable": false,
                            "storageLocation": "storage",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                              "typeString": "struct StorageManager.Agreement"
                            },
                            "typeName": {
                              "contractScope": null,
                              "id": 1572,
                              "name": "Agreement",
                              "nodeType": "UserDefinedTypeName",
                              "referencedDeclaration": 492,
                              "src": "24975:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                "typeString": "struct StorageManager.Agreement"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1578,
                        "initialValue": {
                          "argumentTypes": null,
                          "baseExpression": {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1574,
                              "name": "offer",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1541,
                              "src": "25005:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                                "typeString": "struct StorageManager.Offer storage pointer"
                              }
                            },
                            "id": 1575,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "agreementRegistry",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 480,
                            "src": "25005:23:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_mapping$_t_bytes32_$_t_struct$_Agreement_$492_storage_$",
                              "typeString": "mapping(bytes32 => struct StorageManager.Agreement storage ref)"
                            }
                          },
                          "id": 1577,
                          "indexExpression": {
                            "argumentTypes": null,
                            "id": 1576,
                            "name": "agreementReference",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1561,
                            "src": "25029:18:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_bytes32",
                              "typeString": "bytes32"
                            }
                          },
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "nodeType": "IndexAccess",
                          "src": "25005:43:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Agreement_$492_storage",
                            "typeString": "struct StorageManager.Agreement storage ref"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "24975:73:2"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint64",
                                "typeString": "uint64"
                              },
                              "id": 1583,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1580,
                                  "name": "agreement",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1573,
                                  "src": "25070:9:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                    "typeString": "struct StorageManager.Agreement storage pointer"
                                  }
                                },
                                "id": 1581,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "size",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 489,
                                "src": "25070:14:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint64",
                                  "typeString": "uint64"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1582,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "25088:1:2",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "25070:19:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "53746f726167654d616e616765723a2041677265656d656e7420666f722074686973204f6666657220646f65736e2774206578697374",
                              "id": 1584,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "25091:56:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_6bf3f2ae50002ca5ffb935b8b90fd744cabdf923ffa93b9d388c87a1c4b05a3c",
                                "typeString": "literal_string \"StorageManager: Agreement for this Offer doesn't exist\""
                              },
                              "value": "StorageManager: Agreement for this Offer doesn't exist"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_6bf3f2ae50002ca5ffb935b8b90fd744cabdf923ffa93b9d388c87a1c4b05a3c",
                                "typeString": "literal_string \"StorageManager: Agreement for this Offer doesn't exist\""
                              }
                            ],
                            "id": 1579,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "25062:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1585,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25062:86:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1586,
                        "nodeType": "ExpressionStatement",
                        "src": "25062:86:2"
                      },
                      {
                        "expression": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "commonType": {
                                "typeIdentifier": "t_uint128",
                                "typeString": "uint128"
                              },
                              "id": 1591,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "leftExpression": {
                                "argumentTypes": null,
                                "expression": {
                                  "argumentTypes": null,
                                  "id": 1588,
                                  "name": "agreement",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1573,
                                  "src": "25222:9:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                    "typeString": "struct StorageManager.Agreement storage pointer"
                                  }
                                },
                                "id": 1589,
                                "isConstant": false,
                                "isLValue": true,
                                "isPure": false,
                                "lValueRequested": false,
                                "memberName": "lastPayoutDate",
                                "nodeType": "MemberAccess",
                                "referencedDeclaration": 491,
                                "src": "25222:24:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint128",
                                  "typeString": "uint128"
                                }
                              },
                              "nodeType": "BinaryOperation",
                              "operator": "!=",
                              "rightExpression": {
                                "argumentTypes": null,
                                "hexValue": "30",
                                "id": 1590,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": true,
                                "kind": "number",
                                "lValueRequested": false,
                                "nodeType": "Literal",
                                "src": "25250:1:2",
                                "subdenomination": null,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_rational_0_by_1",
                                  "typeString": "int_const 0"
                                },
                                "value": "0"
                              },
                              "src": "25222:29:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              }
                            },
                            {
                              "argumentTypes": null,
                              "hexValue": "53746f726167654d616e616765723a2041677265656d656e7420697320696e616374697665",
                              "id": 1592,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": true,
                              "kind": "string",
                              "lValueRequested": false,
                              "nodeType": "Literal",
                              "src": "25253:39:2",
                              "subdenomination": null,
                              "typeDescriptions": {
                                "typeIdentifier": "t_stringliteral_a3e653735a522f05a1940e8d4cbac3d3281e9374aea7982e328fec00480ac0c9",
                                "typeString": "literal_string \"StorageManager: Agreement is inactive\""
                              },
                              "value": "StorageManager: Agreement is inactive"
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_bool",
                                "typeString": "bool"
                              },
                              {
                                "typeIdentifier": "t_stringliteral_a3e653735a522f05a1940e8d4cbac3d3281e9374aea7982e328fec00480ac0c9",
                                "typeString": "literal_string \"StorageManager: Agreement is inactive\""
                              }
                            ],
                            "id": 1587,
                            "name": "require",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [
                              -18,
                              -18
                            ],
                            "referencedDeclaration": -18,
                            "src": "25214:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                              "typeString": "function (bool,string memory) pure"
                            }
                          },
                          "id": 1593,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25214:79:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_tuple$__$",
                            "typeString": "tuple()"
                          }
                        },
                        "id": 1594,
                        "nodeType": "ExpressionStatement",
                        "src": "25214:79:2"
                      },
                      {
                        "assignments": [
                          1596
                        ],
                        "declarations": [
                          {
                            "constant": false,
                            "id": 1596,
                            "mutability": "mutable",
                            "name": "spentFunds",
                            "nodeType": "VariableDeclaration",
                            "overrides": null,
                            "scope": 1675,
                            "src": "25308:18:2",
                            "stateVariable": false,
                            "storageLocation": "default",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            },
                            "typeName": {
                              "id": 1595,
                              "name": "uint256",
                              "nodeType": "ElementaryTypeName",
                              "src": "25308:7:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_uint256",
                                "typeString": "uint256"
                              }
                            },
                            "value": null,
                            "visibility": "internal"
                          }
                        ],
                        "id": 1600,
                        "initialValue": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1598,
                              "name": "agreement",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1573,
                              "src": "25350:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                "typeString": "struct StorageManager.Agreement storage pointer"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                "typeString": "struct StorageManager.Agreement storage pointer"
                              }
                            ],
                            "id": 1597,
                            "name": "_calculateSpentFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1814,
                            "src": "25329:20:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_view$_t_struct$_Agreement_$492_memory_ptr_$returns$_t_uint256_$",
                              "typeString": "function (struct StorageManager.Agreement memory) view returns (uint256)"
                            }
                          },
                          "id": 1599,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "25329:31:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "nodeType": "VariableDeclarationStatement",
                        "src": "25308:52:2"
                      },
                      {
                        "condition": {
                          "argumentTypes": null,
                          "commonType": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          },
                          "id": 1603,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftExpression": {
                            "argumentTypes": null,
                            "id": 1601,
                            "name": "spentFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1596,
                            "src": "25378:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "BinaryOperation",
                          "operator": ">",
                          "rightExpression": {
                            "argumentTypes": null,
                            "hexValue": "30",
                            "id": 1602,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": true,
                            "kind": "number",
                            "lValueRequested": false,
                            "nodeType": "Literal",
                            "src": "25391:1:2",
                            "subdenomination": null,
                            "typeDescriptions": {
                              "typeIdentifier": "t_rational_0_by_1",
                              "typeString": "int_const 0"
                            },
                            "value": "0"
                          },
                          "src": "25378:14:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": null,
                        "id": 1674,
                        "nodeType": "IfStatement",
                        "src": "25374:953:2",
                        "trueBody": {
                          "id": 1673,
                          "nodeType": "Block",
                          "src": "25394:933:2",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 1612,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1604,
                                    "name": "agreement",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1573,
                                    "src": "25412:9:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                      "typeString": "struct StorageManager.Agreement storage pointer"
                                    }
                                  },
                                  "id": 1606,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": true,
                                  "memberName": "availableFunds",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 487,
                                  "src": "25412:24:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1610,
                                      "name": "spentFunds",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1596,
                                      "src": "25468:10:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 1607,
                                        "name": "agreement",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1573,
                                        "src": "25439:9:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                          "typeString": "struct StorageManager.Agreement storage pointer"
                                        }
                                      },
                                      "id": 1608,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "availableFunds",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 487,
                                      "src": "25439:24:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1609,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "sub",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2602,
                                    "src": "25439:28:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 1611,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "25439:40:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "25412:67:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1613,
                              "nodeType": "ExpressionStatement",
                              "src": "25412:67:2"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "id": 1619,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftHandSide": {
                                  "argumentTypes": null,
                                  "id": 1614,
                                  "name": "toTransfer",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 1547,
                                  "src": "25497:10:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "Assignment",
                                "operator": "=",
                                "rightHandSide": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1617,
                                      "name": "spentFunds",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1596,
                                      "src": "25525:10:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1615,
                                      "name": "toTransfer",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1547,
                                      "src": "25510:10:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    },
                                    "id": 1616,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "add",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2585,
                                    "src": "25510:14:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 1618,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "25510:26:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "25497:39:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1620,
                              "nodeType": "ExpressionStatement",
                              "src": "25497:39:2"
                            },
                            {
                              "condition": {
                                "argumentTypes": null,
                                "commonType": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                },
                                "id": 1629,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "lValueRequested": false,
                                "leftExpression": {
                                  "argumentTypes": null,
                                  "expression": {
                                    "argumentTypes": null,
                                    "id": 1621,
                                    "name": "agreement",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1573,
                                    "src": "25631:9:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                      "typeString": "struct StorageManager.Agreement storage pointer"
                                    }
                                  },
                                  "id": 1622,
                                  "isConstant": false,
                                  "isLValue": true,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "availableFunds",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 487,
                                  "src": "25631:24:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "nodeType": "BinaryOperation",
                                "operator": "<",
                                "rightExpression": {
                                  "argumentTypes": null,
                                  "arguments": [
                                    {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 1626,
                                        "name": "agreement",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1573,
                                        "src": "25685:9:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                          "typeString": "struct StorageManager.Agreement storage pointer"
                                        }
                                      },
                                      "id": 1627,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "size",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 489,
                                      "src": "25685:14:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint64",
                                        "typeString": "uint64"
                                      }
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_uint64",
                                        "typeString": "uint64"
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "expression": {
                                        "argumentTypes": null,
                                        "id": 1623,
                                        "name": "agreement",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1573,
                                        "src": "25658:9:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                          "typeString": "struct StorageManager.Agreement storage pointer"
                                        }
                                      },
                                      "id": 1624,
                                      "isConstant": false,
                                      "isLValue": true,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "memberName": "billingPrice",
                                      "nodeType": "MemberAccess",
                                      "referencedDeclaration": 483,
                                      "src": "25658:22:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    },
                                    "id": 1625,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "mul",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 2665,
                                    "src": "25658:26:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                      "typeString": "function (uint256,uint256) pure returns (uint256)"
                                    }
                                  },
                                  "id": 1628,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "kind": "functionCall",
                                  "lValueRequested": false,
                                  "names": [],
                                  "nodeType": "FunctionCall",
                                  "src": "25658:42:2",
                                  "tryCall": false,
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_uint256",
                                    "typeString": "uint256"
                                  }
                                },
                                "src": "25631:69:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_bool",
                                  "typeString": "bool"
                                }
                              },
                              "falseBody": {
                                "id": 1665,
                                "nodeType": "Block",
                                "src": "26029:181:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1663,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1655,
                                          "name": "agreement",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1573,
                                          "src": "26148:9:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                            "typeString": "struct StorageManager.Agreement storage pointer"
                                          }
                                        },
                                        "id": 1657,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "memberName": "lastPayoutDate",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 491,
                                        "src": "26148:24:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "arguments": [],
                                            "expression": {
                                              "argumentTypes": [],
                                              "id": 1660,
                                              "name": "_time",
                                              "nodeType": "Identifier",
                                              "overloadedDeclarations": [],
                                              "referencedDeclaration": 1880,
                                              "src": "26183:5:2",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                                "typeString": "function () view returns (uint256)"
                                              }
                                            },
                                            "id": 1661,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "26183:7:2",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 1659,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "26175:7:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_uint128_$",
                                            "typeString": "type(uint128)"
                                          },
                                          "typeName": {
                                            "id": 1658,
                                            "name": "uint128",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "26175:7:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": null,
                                              "typeString": null
                                            }
                                          }
                                        },
                                        "id": 1662,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "26175:16:2",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      },
                                      "src": "26148:43:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    },
                                    "id": 1664,
                                    "nodeType": "ExpressionStatement",
                                    "src": "26148:43:2"
                                  }
                                ]
                              },
                              "id": 1666,
                              "nodeType": "IfStatement",
                              "src": "25627:583:2",
                              "trueBody": {
                                "id": 1654,
                                "nodeType": "Block",
                                "src": "25702:321:2",
                                "statements": [
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1634,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1630,
                                          "name": "agreement",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1573,
                                          "src": "25774:9:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                            "typeString": "struct StorageManager.Agreement storage pointer"
                                          }
                                        },
                                        "id": 1632,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "memberName": "lastPayoutDate",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 491,
                                        "src": "25774:24:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint128",
                                          "typeString": "uint128"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "hexValue": "30",
                                        "id": 1633,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": true,
                                        "kind": "number",
                                        "lValueRequested": false,
                                        "nodeType": "Literal",
                                        "src": "25801:1:2",
                                        "subdenomination": null,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_rational_0_by_1",
                                          "typeString": "int_const 0"
                                        },
                                        "value": "0"
                                      },
                                      "src": "25774:28:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint128",
                                        "typeString": "uint128"
                                      }
                                    },
                                    "id": 1635,
                                    "nodeType": "ExpressionStatement",
                                    "src": "25774:28:2"
                                  },
                                  {
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1648,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "lValueRequested": false,
                                      "leftHandSide": {
                                        "argumentTypes": null,
                                        "expression": {
                                          "argumentTypes": null,
                                          "id": 1636,
                                          "name": "offer",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1541,
                                          "src": "25866:5:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                                            "typeString": "struct StorageManager.Offer storage pointer"
                                          }
                                        },
                                        "id": 1638,
                                        "isConstant": false,
                                        "isLValue": true,
                                        "isPure": false,
                                        "lValueRequested": true,
                                        "memberName": "utilizedCapacity",
                                        "nodeType": "MemberAccess",
                                        "referencedDeclaration": 468,
                                        "src": "25866:22:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint64",
                                          "typeString": "uint64"
                                        }
                                      },
                                      "nodeType": "Assignment",
                                      "operator": "=",
                                      "rightHandSide": {
                                        "argumentTypes": null,
                                        "arguments": [
                                          {
                                            "argumentTypes": null,
                                            "arguments": [
                                              {
                                                "argumentTypes": null,
                                                "expression": {
                                                  "argumentTypes": null,
                                                  "id": 1644,
                                                  "name": "agreement",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 1573,
                                                  "src": "25925:9:2",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                                                    "typeString": "struct StorageManager.Agreement storage pointer"
                                                  }
                                                },
                                                "id": 1645,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "size",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 489,
                                                "src": "25925:14:2",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint64",
                                                  "typeString": "uint64"
                                                }
                                              }
                                            ],
                                            "expression": {
                                              "argumentTypes": [
                                                {
                                                  "typeIdentifier": "t_uint64",
                                                  "typeString": "uint64"
                                                }
                                              ],
                                              "expression": {
                                                "argumentTypes": null,
                                                "expression": {
                                                  "argumentTypes": null,
                                                  "id": 1641,
                                                  "name": "offer",
                                                  "nodeType": "Identifier",
                                                  "overloadedDeclarations": [],
                                                  "referencedDeclaration": 1541,
                                                  "src": "25898:5:2",
                                                  "typeDescriptions": {
                                                    "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                                                    "typeString": "struct StorageManager.Offer storage pointer"
                                                  }
                                                },
                                                "id": 1642,
                                                "isConstant": false,
                                                "isLValue": true,
                                                "isPure": false,
                                                "lValueRequested": false,
                                                "memberName": "utilizedCapacity",
                                                "nodeType": "MemberAccess",
                                                "referencedDeclaration": 468,
                                                "src": "25898:22:2",
                                                "typeDescriptions": {
                                                  "typeIdentifier": "t_uint64",
                                                  "typeString": "uint64"
                                                }
                                              },
                                              "id": 1643,
                                              "isConstant": false,
                                              "isLValue": false,
                                              "isPure": false,
                                              "lValueRequested": false,
                                              "memberName": "sub",
                                              "nodeType": "MemberAccess",
                                              "referencedDeclaration": 2602,
                                              "src": "25898:26:2",
                                              "typeDescriptions": {
                                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                                              }
                                            },
                                            "id": 1646,
                                            "isConstant": false,
                                            "isLValue": false,
                                            "isPure": false,
                                            "kind": "functionCall",
                                            "lValueRequested": false,
                                            "names": [],
                                            "nodeType": "FunctionCall",
                                            "src": "25898:42:2",
                                            "tryCall": false,
                                            "typeDescriptions": {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          }
                                        ],
                                        "expression": {
                                          "argumentTypes": [
                                            {
                                              "typeIdentifier": "t_uint256",
                                              "typeString": "uint256"
                                            }
                                          ],
                                          "id": 1640,
                                          "isConstant": false,
                                          "isLValue": false,
                                          "isPure": true,
                                          "lValueRequested": false,
                                          "nodeType": "ElementaryTypeNameExpression",
                                          "src": "25891:6:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_type$_t_uint64_$",
                                            "typeString": "type(uint64)"
                                          },
                                          "typeName": {
                                            "id": 1639,
                                            "name": "uint64",
                                            "nodeType": "ElementaryTypeName",
                                            "src": "25891:6:2",
                                            "typeDescriptions": {
                                              "typeIdentifier": null,
                                              "typeString": null
                                            }
                                          }
                                        },
                                        "id": 1647,
                                        "isConstant": false,
                                        "isLValue": false,
                                        "isPure": false,
                                        "kind": "typeConversion",
                                        "lValueRequested": false,
                                        "names": [],
                                        "nodeType": "FunctionCall",
                                        "src": "25891:50:2",
                                        "tryCall": false,
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_uint64",
                                          "typeString": "uint64"
                                        }
                                      },
                                      "src": "25866:75:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint64",
                                        "typeString": "uint64"
                                      }
                                    },
                                    "id": 1649,
                                    "nodeType": "ExpressionStatement",
                                    "src": "25866:75:2"
                                  },
                                  {
                                    "eventCall": {
                                      "argumentTypes": null,
                                      "arguments": [
                                        {
                                          "argumentTypes": null,
                                          "id": 1651,
                                          "name": "agreementReference",
                                          "nodeType": "Identifier",
                                          "overloadedDeclarations": [],
                                          "referencedDeclaration": 1561,
                                          "src": "25985:18:2",
                                          "typeDescriptions": {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        }
                                      ],
                                      "expression": {
                                        "argumentTypes": [
                                          {
                                            "typeIdentifier": "t_bytes32",
                                            "typeString": "bytes32"
                                          }
                                        ],
                                        "id": 1650,
                                        "name": "AgreementStopped",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 574,
                                        "src": "25968:16:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$returns$__$",
                                          "typeString": "function (bytes32)"
                                        }
                                      },
                                      "id": 1652,
                                      "isConstant": false,
                                      "isLValue": false,
                                      "isPure": false,
                                      "kind": "functionCall",
                                      "lValueRequested": false,
                                      "names": [],
                                      "nodeType": "FunctionCall",
                                      "src": "25968:36:2",
                                      "tryCall": false,
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_tuple$__$",
                                        "typeString": "tuple()"
                                      }
                                    },
                                    "id": 1653,
                                    "nodeType": "EmitStatement",
                                    "src": "25963:41:2"
                                  }
                                ]
                              }
                            },
                            {
                              "eventCall": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1668,
                                    "name": "agreementReference",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1561,
                                    "src": "26254:18:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1669,
                                    "name": "spentFunds",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1596,
                                    "src": "26274:10:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1670,
                                    "name": "tokenOfAgreementsToPayOut",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1535,
                                    "src": "26286:25:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bytes32",
                                      "typeString": "bytes32"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    },
                                    {
                                      "typeIdentifier": "t_address",
                                      "typeString": "address"
                                    }
                                  ],
                                  "id": 1667,
                                  "name": "AgreementFundsPayout",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [],
                                  "referencedDeclaration": 570,
                                  "src": "26233:20:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_event_nonpayable$_t_bytes32_$_t_uint256_$_t_address_$returns$__$",
                                    "typeString": "function (bytes32,uint256,address)"
                                  }
                                },
                                "id": 1671,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "26233:79:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1672,
                              "nodeType": "EmitStatement",
                              "src": "26228:84:2"
                            }
                          ]
                        }
                      }
                    ]
                  },
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1556,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1553,
                      "name": "i",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1550,
                      "src": "24657:1:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "<",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1554,
                        "name": "dataReferenceOfAgreementToPayOut",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1530,
                        "src": "24661:32:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory[] memory"
                        }
                      },
                      "id": 1555,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "length",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": null,
                      "src": "24661:39:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "24657:43:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "id": 1676,
                  "initializationExpression": {
                    "assignments": [
                      1550
                    ],
                    "declarations": [
                      {
                        "constant": false,
                        "id": 1550,
                        "mutability": "mutable",
                        "name": "i",
                        "nodeType": "VariableDeclaration",
                        "overrides": null,
                        "scope": 1676,
                        "src": "24644:7:2",
                        "stateVariable": false,
                        "storageLocation": "default",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        },
                        "typeName": {
                          "id": 1549,
                          "name": "uint8",
                          "nodeType": "ElementaryTypeName",
                          "src": "24644:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint8",
                            "typeString": "uint8"
                          }
                        },
                        "value": null,
                        "visibility": "internal"
                      }
                    ],
                    "id": 1552,
                    "initialValue": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1551,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "24654:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "nodeType": "VariableDeclarationStatement",
                    "src": "24644:11:2"
                  },
                  "loopExpression": {
                    "expression": {
                      "argumentTypes": null,
                      "id": 1558,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "nodeType": "UnaryOperation",
                      "operator": "++",
                      "prefix": false,
                      "src": "24702:3:2",
                      "subExpression": {
                        "argumentTypes": null,
                        "id": 1557,
                        "name": "i",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1550,
                        "src": "24702:1:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint8",
                          "typeString": "uint8"
                        }
                      },
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint8",
                        "typeString": "uint8"
                      }
                    },
                    "id": 1559,
                    "nodeType": "ExpressionStatement",
                    "src": "24702:3:2"
                  },
                  "nodeType": "ForStatement",
                  "src": "24639:1698:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1679,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1677,
                      "name": "toTransfer",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1547,
                      "src": "26351:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "hexValue": "30",
                      "id": 1678,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "number",
                      "lValueRequested": false,
                      "nodeType": "Literal",
                      "src": "26364:1:2",
                      "subdenomination": null,
                      "typeDescriptions": {
                        "typeIdentifier": "t_rational_0_by_1",
                        "typeString": "int_const 0"
                      },
                      "value": "0"
                    },
                    "src": "26351:14:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1709,
                  "nodeType": "IfStatement",
                  "src": "26347:356:2",
                  "trueBody": {
                    "id": 1708,
                    "nodeType": "Block",
                    "src": "26367:336:2",
                    "statements": [
                      {
                        "condition": {
                          "argumentTypes": null,
                          "arguments": [
                            {
                              "argumentTypes": null,
                              "id": 1681,
                              "name": "tokenOfAgreementsToPayOut",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1535,
                              "src": "26400:25:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            }
                          ],
                          "expression": {
                            "argumentTypes": [
                              {
                                "typeIdentifier": "t_address",
                                "typeString": "address"
                              }
                            ],
                            "id": 1680,
                            "name": "_isNativeToken",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1896,
                            "src": "26385:14:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_function_internal_pure$_t_address_$returns$_t_bool_$",
                              "typeString": "function (address) pure returns (bool)"
                            }
                          },
                          "id": 1682,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "kind": "functionCall",
                          "lValueRequested": false,
                          "names": [],
                          "nodeType": "FunctionCall",
                          "src": "26385:41:2",
                          "tryCall": false,
                          "typeDescriptions": {
                            "typeIdentifier": "t_bool",
                            "typeString": "bool"
                          }
                        },
                        "falseBody": {
                          "id": 1706,
                          "nodeType": "Block",
                          "src": "26592:101:2",
                          "statements": [
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1702,
                                    "name": "provider",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1537,
                                    "src": "26657:8:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "id": 1703,
                                    "name": "toTransfer",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1547,
                                    "src": "26667:10:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_address_payable",
                                      "typeString": "address payable"
                                    },
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "arguments": [
                                      {
                                        "argumentTypes": null,
                                        "id": 1699,
                                        "name": "tokenOfAgreementsToPayOut",
                                        "nodeType": "Identifier",
                                        "overloadedDeclarations": [],
                                        "referencedDeclaration": 1535,
                                        "src": "26617:25:2",
                                        "typeDescriptions": {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": [
                                        {
                                          "typeIdentifier": "t_address",
                                          "typeString": "address"
                                        }
                                      ],
                                      "id": 1698,
                                      "name": "IERC20",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 3333,
                                      "src": "26610:6:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_type$_t_contract$_IERC20_$3333_$",
                                        "typeString": "type(contract IERC20)"
                                      }
                                    },
                                    "id": 1700,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "kind": "typeConversion",
                                    "lValueRequested": false,
                                    "names": [],
                                    "nodeType": "FunctionCall",
                                    "src": "26610:33:2",
                                    "tryCall": false,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_contract$_IERC20_$3333",
                                      "typeString": "contract IERC20"
                                    }
                                  },
                                  "id": 1701,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "safeTransfer",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 3367,
                                  "src": "26610:46:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_nonpayable$_t_contract$_IERC20_$3333_$_t_address_$_t_uint256_$returns$__$bound_to$_t_contract$_IERC20_$3333_$",
                                    "typeString": "function (contract IERC20,address,uint256)"
                                  }
                                },
                                "id": 1704,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "26610:68:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1705,
                              "nodeType": "ExpressionStatement",
                              "src": "26610:68:2"
                            }
                          ]
                        },
                        "id": 1707,
                        "nodeType": "IfStatement",
                        "src": "26381:312:2",
                        "trueBody": {
                          "id": 1697,
                          "nodeType": "Block",
                          "src": "26428:158:2",
                          "statements": [
                            {
                              "assignments": [
                                1684,
                                null
                              ],
                              "declarations": [
                                {
                                  "constant": false,
                                  "id": 1684,
                                  "mutability": "mutable",
                                  "name": "success",
                                  "nodeType": "VariableDeclaration",
                                  "overrides": null,
                                  "scope": 1697,
                                  "src": "26447:12:2",
                                  "stateVariable": false,
                                  "storageLocation": "default",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_bool",
                                    "typeString": "bool"
                                  },
                                  "typeName": {
                                    "id": 1683,
                                    "name": "bool",
                                    "nodeType": "ElementaryTypeName",
                                    "src": "26447:4:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  "value": null,
                                  "visibility": "internal"
                                },
                                null
                              ],
                              "id": 1691,
                              "initialValue": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "",
                                    "id": 1689,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "26498:2:2",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                      "typeString": "literal_string \"\""
                                    },
                                    "value": ""
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                      "typeString": "literal_string \"\""
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": [
                                      {
                                        "typeIdentifier": "t_stringliteral_c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470",
                                        "typeString": "literal_string \"\""
                                      }
                                    ],
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1685,
                                      "name": "provider",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1537,
                                      "src": "26465:8:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_address_payable",
                                        "typeString": "address payable"
                                      }
                                    },
                                    "id": 1686,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "call",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": null,
                                    "src": "26465:13:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$",
                                      "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                    }
                                  },
                                  "id": 1688,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "names": [
                                    "value"
                                  ],
                                  "nodeType": "FunctionCallOptions",
                                  "options": [
                                    {
                                      "argumentTypes": null,
                                      "id": 1687,
                                      "name": "toTransfer",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1547,
                                      "src": "26486:10:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_uint256",
                                        "typeString": "uint256"
                                      }
                                    }
                                  ],
                                  "src": "26465:32:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_barecall_payable$_t_bytes_memory_ptr_$returns$_t_bool_$_t_bytes_memory_ptr_$value",
                                    "typeString": "function (bytes memory) payable returns (bool,bytes memory)"
                                  }
                                },
                                "id": 1690,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "26465:36:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$_t_bool_$_t_bytes_memory_ptr_$",
                                  "typeString": "tuple(bool,bytes memory)"
                                }
                              },
                              "nodeType": "VariableDeclarationStatement",
                              "src": "26446:55:2"
                            },
                            {
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1693,
                                    "name": "success",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1684,
                                    "src": "26527:7:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    }
                                  },
                                  {
                                    "argumentTypes": null,
                                    "hexValue": "53746f726167654d616e616765723a205472616e73666572206661696c65642e",
                                    "id": 1694,
                                    "isConstant": false,
                                    "isLValue": false,
                                    "isPure": true,
                                    "kind": "string",
                                    "lValueRequested": false,
                                    "nodeType": "Literal",
                                    "src": "26536:34:2",
                                    "subdenomination": null,
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_stringliteral_f3ee78c3f3fb9fb1a0406b609f535da00fd8410e20c5225128de7c3d6d2fe069",
                                      "typeString": "literal_string \"StorageManager: Transfer failed.\""
                                    },
                                    "value": "StorageManager: Transfer failed."
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_bool",
                                      "typeString": "bool"
                                    },
                                    {
                                      "typeIdentifier": "t_stringliteral_f3ee78c3f3fb9fb1a0406b609f535da00fd8410e20c5225128de7c3d6d2fe069",
                                      "typeString": "literal_string \"StorageManager: Transfer failed.\""
                                    }
                                  ],
                                  "id": 1692,
                                  "name": "require",
                                  "nodeType": "Identifier",
                                  "overloadedDeclarations": [
                                    -18,
                                    -18
                                  ],
                                  "referencedDeclaration": -18,
                                  "src": "26519:7:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                                    "typeString": "function (bool,string memory) pure"
                                  }
                                },
                                "id": 1695,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "26519:52:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_tuple$__$",
                                  "typeString": "tuple()"
                                }
                              },
                              "id": 1696,
                              "nodeType": "ExpressionStatement",
                              "src": "26519:52:2"
                            }
                          ]
                        }
                      }
                    ]
                  }
                }
              ]
            },
            "documentation": null,
            "id": 1711,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_payoutFunds",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1538,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1530,
                  "mutability": "mutable",
                  "name": "dataReferenceOfAgreementToPayOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1711,
                  "src": "24347:51:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_memory_ptr_$dyn_memory_ptr",
                    "typeString": "bytes32[][]"
                  },
                  "typeName": {
                    "baseType": {
                      "baseType": {
                        "id": 1527,
                        "name": "bytes32",
                        "nodeType": "ElementaryTypeName",
                        "src": "24347:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes32",
                          "typeString": "bytes32"
                        }
                      },
                      "id": 1528,
                      "length": null,
                      "nodeType": "ArrayTypeName",
                      "src": "24347:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                        "typeString": "bytes32[]"
                      }
                    },
                    "id": 1529,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "24347:11:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_array$_t_bytes32_$dyn_storage_$dyn_storage_ptr",
                      "typeString": "bytes32[][]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1533,
                  "mutability": "mutable",
                  "name": "creatorsOfAgreementToPayOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1711,
                  "src": "24408:44:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_address_$dyn_memory_ptr",
                    "typeString": "address[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1531,
                      "name": "address",
                      "nodeType": "ElementaryTypeName",
                      "src": "24408:7:2",
                      "stateMutability": "nonpayable",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "id": 1532,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "24408:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_address_$dyn_storage_ptr",
                      "typeString": "address[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1535,
                  "mutability": "mutable",
                  "name": "tokenOfAgreementsToPayOut",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1711,
                  "src": "24462:33:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1534,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "24462:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1537,
                  "mutability": "mutable",
                  "name": "provider",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1711,
                  "src": "24505:24:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address_payable",
                    "typeString": "address payable"
                  },
                  "typeName": {
                    "id": 1536,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "24505:15:2",
                    "stateMutability": "payable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address_payable",
                      "typeString": "address payable"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "24337:198:2"
            },
            "returnParameters": {
              "id": 1539,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "24545:0:2"
            },
            "scope": 1910,
            "src": "24316:2393:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1722,
              "nodeType": "Block",
              "src": "26844:25:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 1719,
                      "name": "_pause",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2403,
                      "src": "26854:6:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 1720,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "26854:8:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1721,
                  "nodeType": "ExpressionStatement",
                  "src": "26854:8:2"
                }
              ]
            },
            "documentation": {
              "id": 1712,
              "nodeType": "StructuredDocumentation",
              "src": "26715:76:2",
              "text": " @dev Called by a pauser to pause, triggers stopped state."
            },
            "functionSelector": "8456cb59",
            "id": 1723,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1715,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1714,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2258,
                  "src": "26820:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "26820:9:2"
              },
              {
                "arguments": null,
                "id": 1717,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1716,
                  "name": "whenNotPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2377,
                  "src": "26830:13:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "26830:13:2"
              }
            ],
            "name": "pause",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1713,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26810:2:2"
            },
            "returnParameters": {
              "id": 1718,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26844:0:2"
            },
            "scope": 1910,
            "src": "26796:73:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1734,
              "nodeType": "Block",
              "src": "27006:27:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [],
                    "expression": {
                      "argumentTypes": [],
                      "id": 1731,
                      "name": "_unpause",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 2419,
                      "src": "27016:8:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$",
                        "typeString": "function ()"
                      }
                    },
                    "id": 1732,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27016:10:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1733,
                  "nodeType": "ExpressionStatement",
                  "src": "27016:10:2"
                }
              ]
            },
            "documentation": {
              "id": 1724,
              "nodeType": "StructuredDocumentation",
              "src": "26875:79:2",
              "text": " @dev Called by a pauser to unpause, returns to normal state."
            },
            "functionSelector": "3f4ba83a",
            "id": 1735,
            "implemented": true,
            "kind": "function",
            "modifiers": [
              {
                "arguments": null,
                "id": 1727,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1726,
                  "name": "onlyOwner",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2258,
                  "src": "26985:9:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "26985:9:2"
              },
              {
                "arguments": null,
                "id": 1729,
                "modifierName": {
                  "argumentTypes": null,
                  "id": 1728,
                  "name": "whenPaused",
                  "nodeType": "Identifier",
                  "overloadedDeclarations": [],
                  "referencedDeclaration": 2387,
                  "src": "26995:10:2",
                  "typeDescriptions": {
                    "typeIdentifier": "t_modifier$__$",
                    "typeString": "modifier ()"
                  }
                },
                "nodeType": "ModifierInvocation",
                "src": "26995:10:2"
              }
            ],
            "name": "unpause",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1725,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "26975:2:2"
            },
            "returnParameters": {
              "id": 1730,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "27006:0:2"
            },
            "scope": 1910,
            "src": "26959:74:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1757,
              "nodeType": "Block",
              "src": "27795:82:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "id": 1751,
                            "name": "creator",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1741,
                            "src": "27839:7:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1752,
                            "name": "dataReference",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1739,
                            "src": "27848:13:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                              "typeString": "bytes32[] memory"
                            }
                          },
                          {
                            "argumentTypes": null,
                            "id": 1753,
                            "name": "token",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1743,
                            "src": "27863:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            },
                            {
                              "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                              "typeString": "bytes32[] memory"
                            },
                            {
                              "typeIdentifier": "t_address",
                              "typeString": "address"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "id": 1749,
                            "name": "abi",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": -1,
                            "src": "27822:3:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_magic_abi",
                              "typeString": "abi"
                            }
                          },
                          "id": 1750,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "lValueRequested": false,
                          "memberName": "encodePacked",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": null,
                          "src": "27822:16:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$",
                            "typeString": "function () pure returns (bytes memory)"
                          }
                        },
                        "id": 1754,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "27822:47:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bytes_memory_ptr",
                          "typeString": "bytes memory"
                        }
                      ],
                      "id": 1748,
                      "name": "keccak256",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": -8,
                      "src": "27812:9:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$",
                        "typeString": "function (bytes memory) pure returns (bytes32)"
                      }
                    },
                    "id": 1755,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "27812:58:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "functionReturnParameters": 1747,
                  "id": 1756,
                  "nodeType": "Return",
                  "src": "27805:65:2"
                }
              ]
            },
            "documentation": {
              "id": 1736,
              "nodeType": "StructuredDocumentation",
              "src": "27039:596:2",
              "text": "@notice get the agreementReference.\nthe agreementReference consists of the hash of the dataReference, msg.sender and the tokenAdddress, to allow:\n- multiple people to register an agreement for the same file\n- one person to register multiple agreements for the same file, but with different tokens\n- link the token to the agreement, such that we do the accounting properly\n@param dataReference the dataReference of the agreement\n@param creator the creator of the agreement\n@param token the token, which is used as a means of payment for the agreement."
            },
            "functionSelector": "bf317abb",
            "id": 1758,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "getAgreementReference",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1744,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1739,
                  "mutability": "mutable",
                  "name": "dataReference",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1758,
                  "src": "27680:30:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1737,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "27680:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 1738,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "27680:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1741,
                  "mutability": "mutable",
                  "name": "creator",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1758,
                  "src": "27720:15:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1740,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "27720:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1743,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1758,
                  "src": "27745:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1742,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "27745:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27670:94:2"
            },
            "returnParameters": {
              "id": 1747,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1746,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1758,
                  "src": "27786:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bytes32",
                    "typeString": "bytes32"
                  },
                  "typeName": {
                    "id": 1745,
                    "name": "bytes32",
                    "nodeType": "ElementaryTypeName",
                    "src": "27786:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bytes32",
                      "typeString": "bytes32"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27785:9:2"
            },
            "scope": 1910,
            "src": "27640:237:2",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "public"
          },
          {
            "body": {
              "id": 1813,
              "nodeType": "Block",
              "src": "27973:572:2",
              "statements": [
                {
                  "assignments": [
                    1766
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1766,
                      "mutability": "mutable",
                      "name": "totalPeriodPrice",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1813,
                      "src": "28042:24:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1765,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "28042:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1773,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1770,
                          "name": "agreement",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1760,
                          "src": "28088:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Agreement_$492_memory_ptr",
                            "typeString": "struct StorageManager.Agreement memory"
                          }
                        },
                        "id": 1771,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "billingPrice",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 483,
                        "src": "28088:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1767,
                          "name": "agreement",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1760,
                          "src": "28069:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Agreement_$492_memory_ptr",
                            "typeString": "struct StorageManager.Agreement memory"
                          }
                        },
                        "id": 1768,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "size",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 489,
                        "src": "28069:14:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "id": 1769,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2665,
                      "src": "28069:18:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1772,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28069:42:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28042:69:2"
                },
                {
                  "assignments": [
                    1775
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1775,
                      "mutability": "mutable",
                      "name": "periodsSinceLastPayout",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1813,
                      "src": "28121:30:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1774,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "28121:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1786,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1783,
                          "name": "agreement",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1760,
                          "src": "28196:9:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_struct$_Agreement_$492_memory_ptr",
                            "typeString": "struct StorageManager.Agreement memory"
                          }
                        },
                        "id": 1784,
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "billingPeriod",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": 485,
                        "src": "28196:23:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "arguments": [
                          {
                            "argumentTypes": null,
                            "expression": {
                              "argumentTypes": null,
                              "id": 1779,
                              "name": "agreement",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1760,
                              "src": "28166:9:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_struct$_Agreement_$492_memory_ptr",
                                "typeString": "struct StorageManager.Agreement memory"
                              }
                            },
                            "id": 1780,
                            "isConstant": false,
                            "isLValue": true,
                            "isPure": false,
                            "lValueRequested": false,
                            "memberName": "lastPayoutDate",
                            "nodeType": "MemberAccess",
                            "referencedDeclaration": 491,
                            "src": "28166:24:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          }
                        ],
                        "expression": {
                          "argumentTypes": [
                            {
                              "typeIdentifier": "t_uint128",
                              "typeString": "uint128"
                            }
                          ],
                          "expression": {
                            "argumentTypes": null,
                            "arguments": [],
                            "expression": {
                              "argumentTypes": [],
                              "id": 1776,
                              "name": "_time",
                              "nodeType": "Identifier",
                              "overloadedDeclarations": [],
                              "referencedDeclaration": 1880,
                              "src": "28154:5:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_view$__$returns$_t_uint256_$",
                                "typeString": "function () view returns (uint256)"
                              }
                            },
                            "id": 1777,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "28154:7:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "id": 1778,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "sub",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 2602,
                          "src": "28154:11:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                            "typeString": "function (uint256,uint256) pure returns (uint256)"
                          }
                        },
                        "id": 1781,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "kind": "functionCall",
                        "lValueRequested": false,
                        "names": [],
                        "nodeType": "FunctionCall",
                        "src": "28154:37:2",
                        "tryCall": false,
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1782,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "div",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2682,
                      "src": "28154:41:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1785,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28154:66:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28121:99:2"
                },
                {
                  "assignments": [
                    1788
                  ],
                  "declarations": [
                    {
                      "constant": false,
                      "id": 1788,
                      "mutability": "mutable",
                      "name": "spentFunds",
                      "nodeType": "VariableDeclaration",
                      "overrides": null,
                      "scope": 1813,
                      "src": "28230:18:2",
                      "stateVariable": false,
                      "storageLocation": "default",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      },
                      "typeName": {
                        "id": 1787,
                        "name": "uint256",
                        "nodeType": "ElementaryTypeName",
                        "src": "28230:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "value": null,
                      "visibility": "internal"
                    }
                  ],
                  "id": 1793,
                  "initialValue": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "id": 1791,
                        "name": "totalPeriodPrice",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1766,
                        "src": "28278:16:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      ],
                      "expression": {
                        "argumentTypes": null,
                        "id": 1789,
                        "name": "periodsSinceLastPayout",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1775,
                        "src": "28251:22:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint256",
                          "typeString": "uint256"
                        }
                      },
                      "id": 1790,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "mul",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 2665,
                      "src": "28251:26:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                        "typeString": "function (uint256,uint256) pure returns (uint256)"
                      }
                    },
                    "id": 1792,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28251:44:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "nodeType": "VariableDeclarationStatement",
                  "src": "28230:65:2"
                },
                {
                  "condition": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    },
                    "id": 1797,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1794,
                      "name": "spentFunds",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1788,
                      "src": "28366:10:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": ">",
                    "rightExpression": {
                      "argumentTypes": null,
                      "expression": {
                        "argumentTypes": null,
                        "id": 1795,
                        "name": "agreement",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1760,
                        "src": "28379:9:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_struct$_Agreement_$492_memory_ptr",
                          "typeString": "struct StorageManager.Agreement memory"
                        }
                      },
                      "id": 1796,
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": false,
                      "memberName": "availableFunds",
                      "nodeType": "MemberAccess",
                      "referencedDeclaration": 487,
                      "src": "28379:24:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint256",
                        "typeString": "uint256"
                      }
                    },
                    "src": "28366:37:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "falseBody": null,
                  "id": 1810,
                  "nodeType": "IfStatement",
                  "src": "28362:149:2",
                  "trueBody": {
                    "id": 1809,
                    "nodeType": "Block",
                    "src": "28405:106:2",
                    "statements": [
                      {
                        "expression": {
                          "argumentTypes": null,
                          "id": 1807,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": false,
                          "lValueRequested": false,
                          "leftHandSide": {
                            "argumentTypes": null,
                            "id": 1798,
                            "name": "spentFunds",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1788,
                            "src": "28419:10:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "nodeType": "Assignment",
                          "operator": "=",
                          "rightHandSide": {
                            "argumentTypes": null,
                            "arguments": [
                              {
                                "argumentTypes": null,
                                "id": 1805,
                                "name": "totalPeriodPrice",
                                "nodeType": "Identifier",
                                "overloadedDeclarations": [],
                                "referencedDeclaration": 1766,
                                "src": "28483:16:2",
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              }
                            ],
                            "expression": {
                              "argumentTypes": [
                                {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              ],
                              "expression": {
                                "argumentTypes": null,
                                "arguments": [
                                  {
                                    "argumentTypes": null,
                                    "id": 1802,
                                    "name": "totalPeriodPrice",
                                    "nodeType": "Identifier",
                                    "overloadedDeclarations": [],
                                    "referencedDeclaration": 1766,
                                    "src": "28461:16:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  }
                                ],
                                "expression": {
                                  "argumentTypes": [
                                    {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  ],
                                  "expression": {
                                    "argumentTypes": null,
                                    "expression": {
                                      "argumentTypes": null,
                                      "id": 1799,
                                      "name": "agreement",
                                      "nodeType": "Identifier",
                                      "overloadedDeclarations": [],
                                      "referencedDeclaration": 1760,
                                      "src": "28432:9:2",
                                      "typeDescriptions": {
                                        "typeIdentifier": "t_struct$_Agreement_$492_memory_ptr",
                                        "typeString": "struct StorageManager.Agreement memory"
                                      }
                                    },
                                    "id": 1800,
                                    "isConstant": false,
                                    "isLValue": true,
                                    "isPure": false,
                                    "lValueRequested": false,
                                    "memberName": "availableFunds",
                                    "nodeType": "MemberAccess",
                                    "referencedDeclaration": 487,
                                    "src": "28432:24:2",
                                    "typeDescriptions": {
                                      "typeIdentifier": "t_uint256",
                                      "typeString": "uint256"
                                    }
                                  },
                                  "id": 1801,
                                  "isConstant": false,
                                  "isLValue": false,
                                  "isPure": false,
                                  "lValueRequested": false,
                                  "memberName": "div",
                                  "nodeType": "MemberAccess",
                                  "referencedDeclaration": 2682,
                                  "src": "28432:28:2",
                                  "typeDescriptions": {
                                    "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                    "typeString": "function (uint256,uint256) pure returns (uint256)"
                                  }
                                },
                                "id": 1803,
                                "isConstant": false,
                                "isLValue": false,
                                "isPure": false,
                                "kind": "functionCall",
                                "lValueRequested": false,
                                "names": [],
                                "nodeType": "FunctionCall",
                                "src": "28432:46:2",
                                "tryCall": false,
                                "typeDescriptions": {
                                  "typeIdentifier": "t_uint256",
                                  "typeString": "uint256"
                                }
                              },
                              "id": 1804,
                              "isConstant": false,
                              "isLValue": false,
                              "isPure": false,
                              "lValueRequested": false,
                              "memberName": "mul",
                              "nodeType": "MemberAccess",
                              "referencedDeclaration": 2665,
                              "src": "28432:50:2",
                              "typeDescriptions": {
                                "typeIdentifier": "t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$bound_to$_t_uint256_$",
                                "typeString": "function (uint256,uint256) pure returns (uint256)"
                              }
                            },
                            "id": 1806,
                            "isConstant": false,
                            "isLValue": false,
                            "isPure": false,
                            "kind": "functionCall",
                            "lValueRequested": false,
                            "names": [],
                            "nodeType": "FunctionCall",
                            "src": "28432:68:2",
                            "tryCall": false,
                            "typeDescriptions": {
                              "typeIdentifier": "t_uint256",
                              "typeString": "uint256"
                            }
                          },
                          "src": "28419:81:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint256",
                            "typeString": "uint256"
                          }
                        },
                        "id": 1808,
                        "nodeType": "ExpressionStatement",
                        "src": "28419:81:2"
                      }
                    ]
                  }
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1811,
                    "name": "spentFunds",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": 1788,
                    "src": "28528:10:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1764,
                  "id": 1812,
                  "nodeType": "Return",
                  "src": "28521:17:2"
                }
              ]
            },
            "documentation": null,
            "id": 1814,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_calculateSpentFunds",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1761,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1760,
                  "mutability": "mutable",
                  "name": "agreement",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1814,
                  "src": "27913:26:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Agreement_$492_memory_ptr",
                    "typeString": "struct StorageManager.Agreement"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1759,
                    "name": "Agreement",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 492,
                    "src": "27913:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Agreement_$492_storage_ptr",
                      "typeString": "struct StorageManager.Agreement"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27912:28:2"
            },
            "returnParameters": {
              "id": 1764,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1763,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1814,
                  "src": "27964:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1762,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "27964:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "27963:9:2"
            },
            "scope": 1910,
            "src": "27883:662:2",
            "stateMutability": "view",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1857,
              "nodeType": "Block",
              "src": "28818:317:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "commonType": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        "id": 1828,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "leftExpression": {
                          "argumentTypes": null,
                          "id": 1826,
                          "name": "period",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1820,
                          "src": "28836:6:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "nodeType": "BinaryOperation",
                        "operator": "<=",
                        "rightExpression": {
                          "argumentTypes": null,
                          "id": 1827,
                          "name": "MAX_BILLING_PERIOD",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 466,
                          "src": "28846:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_uint64",
                            "typeString": "uint64"
                          }
                        },
                        "src": "28836:28:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a2042696c6c696e6720706572696f6420657863656564206d61782e206c656e677468",
                        "id": 1829,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "28866:51:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_3a8bdeec08173a5178edb62caedddd3a5be2781c63e03c284cae93b42190a6e8",
                          "typeString": "literal_string \"StorageManager: Billing period exceed max. length\""
                        },
                        "value": "StorageManager: Billing period exceed max. length"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_3a8bdeec08173a5178edb62caedddd3a5be2781c63e03c284cae93b42190a6e8",
                          "typeString": "literal_string \"StorageManager: Billing period exceed max. length\""
                        }
                      ],
                      "id": 1825,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "28828:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1830,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28828:90:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1831,
                  "nodeType": "ExpressionStatement",
                  "src": "28828:90:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1833,
                          "name": "isWhitelistedToken",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 500,
                          "src": "28936:18:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                            "typeString": "mapping(address => bool)"
                          }
                        },
                        "id": 1835,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1834,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1818,
                          "src": "28955:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "28936:25:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a20546f6b656e206973206e6f742077686974656c6973746564",
                        "id": 1836,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "28963:42:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8011f029399467d66b62133d39698ec480910caa5162e1b7ce7de81af790e263",
                          "typeString": "literal_string \"StorageManager: Token is not whitelisted\""
                        },
                        "value": "StorageManager: Token is not whitelisted"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8011f029399467d66b62133d39698ec480910caa5162e1b7ce7de81af790e263",
                          "typeString": "literal_string \"StorageManager: Token is not whitelisted\""
                        }
                      ],
                      "id": 1832,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "28928:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1837,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "28928:78:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1838,
                  "nodeType": "ExpressionStatement",
                  "src": "28928:78:2"
                },
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1847,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftHandSide": {
                      "argumentTypes": null,
                      "baseExpression": {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "expression": {
                            "argumentTypes": null,
                            "id": 1839,
                            "name": "offer",
                            "nodeType": "Identifier",
                            "overloadedDeclarations": [],
                            "referencedDeclaration": 1816,
                            "src": "29016:5:2",
                            "typeDescriptions": {
                              "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                              "typeString": "struct StorageManager.Offer storage pointer"
                            }
                          },
                          "id": 1843,
                          "isConstant": false,
                          "isLValue": true,
                          "isPure": false,
                          "lValueRequested": false,
                          "memberName": "billingPlansForToken",
                          "nodeType": "MemberAccess",
                          "referencedDeclaration": 476,
                          "src": "29016:26:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_mapping$_t_uint64_$_t_uint128_$_$",
                            "typeString": "mapping(address => mapping(uint64 => uint128))"
                          }
                        },
                        "id": 1844,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1841,
                          "name": "token",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1818,
                          "src": "29043:5:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "29016:33:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_mapping$_t_uint64_$_t_uint128_$",
                          "typeString": "mapping(uint64 => uint128)"
                        }
                      },
                      "id": 1845,
                      "indexExpression": {
                        "argumentTypes": null,
                        "id": 1842,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1820,
                        "src": "29050:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      "isConstant": false,
                      "isLValue": true,
                      "isPure": false,
                      "lValueRequested": true,
                      "nodeType": "IndexAccess",
                      "src": "29016:41:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "nodeType": "Assignment",
                    "operator": "=",
                    "rightHandSide": {
                      "argumentTypes": null,
                      "id": 1846,
                      "name": "price",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1822,
                      "src": "29060:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_uint128",
                        "typeString": "uint128"
                      }
                    },
                    "src": "29016:49:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "id": 1848,
                  "nodeType": "ExpressionStatement",
                  "src": "29016:49:2"
                },
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1850,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "29095:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1851,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "29095:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1852,
                        "name": "token",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1818,
                        "src": "29107:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1853,
                        "name": "period",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1820,
                        "src": "29114:6:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1854,
                        "name": "price",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1822,
                        "src": "29122:5:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_address",
                          "typeString": "address"
                        },
                        {
                          "typeIdentifier": "t_uint64",
                          "typeString": "uint64"
                        },
                        {
                          "typeIdentifier": "t_uint128",
                          "typeString": "uint128"
                        }
                      ],
                      "id": 1849,
                      "name": "BillingPlanSet",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 520,
                      "src": "29080:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_address_$_t_uint64_$_t_uint128_$returns$__$",
                        "typeString": "function (address,address,uint64,uint128)"
                      }
                    },
                    "id": 1855,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29080:48:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1856,
                  "nodeType": "EmitStatement",
                  "src": "29075:53:2"
                }
              ]
            },
            "documentation": null,
            "id": 1858,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_setBillingPlanForToken",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1823,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1816,
                  "mutability": "mutable",
                  "name": "offer",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1858,
                  "src": "28714:19:2",
                  "stateVariable": false,
                  "storageLocation": "storage",
                  "typeDescriptions": {
                    "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                    "typeString": "struct StorageManager.Offer"
                  },
                  "typeName": {
                    "contractScope": null,
                    "id": 1815,
                    "name": "Offer",
                    "nodeType": "UserDefinedTypeName",
                    "referencedDeclaration": 481,
                    "src": "28714:5:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_struct$_Offer_$481_storage_ptr",
                      "typeString": "struct StorageManager.Offer"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1818,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1858,
                  "src": "28743:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1817,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "28743:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1820,
                  "mutability": "mutable",
                  "name": "period",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1858,
                  "src": "28766:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint64",
                    "typeString": "uint64"
                  },
                  "typeName": {
                    "id": 1819,
                    "name": "uint64",
                    "nodeType": "ElementaryTypeName",
                    "src": "28766:6:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint64",
                      "typeString": "uint64"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                },
                {
                  "constant": false,
                  "id": 1822,
                  "mutability": "mutable",
                  "name": "price",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1858,
                  "src": "28789:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint128",
                    "typeString": "uint128"
                  },
                  "typeName": {
                    "id": 1821,
                    "name": "uint128",
                    "nodeType": "ElementaryTypeName",
                    "src": "28789:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint128",
                      "typeString": "uint128"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "28704:104:2"
            },
            "returnParameters": {
              "id": 1824,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "28818:0:2"
            },
            "scope": 1910,
            "src": "28672:463:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1870,
              "nodeType": "Block",
              "src": "29198:57:2",
              "statements": [
                {
                  "eventCall": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "expression": {
                          "argumentTypes": null,
                          "id": 1865,
                          "name": "msg",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": -15,
                          "src": "29228:3:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_magic_message",
                            "typeString": "msg"
                          }
                        },
                        "id": 1866,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": false,
                        "lValueRequested": false,
                        "memberName": "sender",
                        "nodeType": "MemberAccess",
                        "referencedDeclaration": null,
                        "src": "29228:10:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "id": 1867,
                        "name": "message",
                        "nodeType": "Identifier",
                        "overloadedDeclarations": [],
                        "referencedDeclaration": 1861,
                        "src": "29240:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_address_payable",
                          "typeString": "address payable"
                        },
                        {
                          "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                          "typeString": "bytes32[] memory"
                        }
                      ],
                      "id": 1864,
                      "name": "MessageEmitted",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 527,
                      "src": "29213:14:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_event_nonpayable$_t_address_$_t_array$_t_bytes32_$dyn_memory_ptr_$returns$__$",
                        "typeString": "function (address,bytes32[] memory)"
                      }
                    },
                    "id": 1868,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29213:35:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1869,
                  "nodeType": "EmitStatement",
                  "src": "29208:40:2"
                }
              ]
            },
            "documentation": null,
            "id": 1871,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_emitMessage",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1862,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1861,
                  "mutability": "mutable",
                  "name": "message",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1871,
                  "src": "29163:24:2",
                  "stateVariable": false,
                  "storageLocation": "memory",
                  "typeDescriptions": {
                    "typeIdentifier": "t_array$_t_bytes32_$dyn_memory_ptr",
                    "typeString": "bytes32[]"
                  },
                  "typeName": {
                    "baseType": {
                      "id": 1859,
                      "name": "bytes32",
                      "nodeType": "ElementaryTypeName",
                      "src": "29163:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_bytes32",
                        "typeString": "bytes32"
                      }
                    },
                    "id": 1860,
                    "length": null,
                    "nodeType": "ArrayTypeName",
                    "src": "29163:9:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_array$_t_bytes32_$dyn_storage_ptr",
                      "typeString": "bytes32[]"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "29162:26:2"
            },
            "returnParameters": {
              "id": 1863,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "29198:0:2"
            },
            "scope": 1910,
            "src": "29141:114:2",
            "stateMutability": "nonpayable",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1879,
              "nodeType": "Block",
              "src": "29408:27:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "id": 1877,
                    "name": "now",
                    "nodeType": "Identifier",
                    "overloadedDeclarations": [],
                    "referencedDeclaration": -17,
                    "src": "29425:3:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "functionReturnParameters": 1876,
                  "id": 1878,
                  "nodeType": "Return",
                  "src": "29418:10:2"
                }
              ]
            },
            "documentation": {
              "id": 1872,
              "nodeType": "StructuredDocumentation",
              "src": "29261:85:2",
              "text": "@dev Helper function for testing timing overloaded in testing contract"
            },
            "id": 1880,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_time",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1873,
              "nodeType": "ParameterList",
              "parameters": [],
              "src": "29365:2:2"
            },
            "returnParameters": {
              "id": 1876,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1875,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1880,
                  "src": "29399:7:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_uint256",
                    "typeString": "uint256"
                  },
                  "typeName": {
                    "id": 1874,
                    "name": "uint256",
                    "nodeType": "ElementaryTypeName",
                    "src": "29399:7:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_uint256",
                      "typeString": "uint256"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "29398:9:2"
            },
            "scope": 1910,
            "src": "29351:84:2",
            "stateMutability": "view",
            "virtual": true,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1895,
              "nodeType": "Block",
              "src": "29559:43:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "commonType": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    },
                    "id": 1893,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "lValueRequested": false,
                    "leftExpression": {
                      "argumentTypes": null,
                      "id": 1888,
                      "name": "token",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [],
                      "referencedDeclaration": 1883,
                      "src": "29576:5:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_address",
                        "typeString": "address"
                      }
                    },
                    "nodeType": "BinaryOperation",
                    "operator": "==",
                    "rightExpression": {
                      "argumentTypes": null,
                      "arguments": [
                        {
                          "argumentTypes": null,
                          "hexValue": "30",
                          "id": 1891,
                          "isConstant": false,
                          "isLValue": false,
                          "isPure": true,
                          "kind": "number",
                          "lValueRequested": false,
                          "nodeType": "Literal",
                          "src": "29593:1:2",
                          "subdenomination": null,
                          "typeDescriptions": {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          },
                          "value": "0"
                        }
                      ],
                      "expression": {
                        "argumentTypes": [
                          {
                            "typeIdentifier": "t_rational_0_by_1",
                            "typeString": "int_const 0"
                          }
                        ],
                        "id": 1890,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "lValueRequested": false,
                        "nodeType": "ElementaryTypeNameExpression",
                        "src": "29585:7:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_type$_t_address_$",
                          "typeString": "type(address)"
                        },
                        "typeName": {
                          "id": 1889,
                          "name": "address",
                          "nodeType": "ElementaryTypeName",
                          "src": "29585:7:2",
                          "typeDescriptions": {
                            "typeIdentifier": null,
                            "typeString": null
                          }
                        }
                      },
                      "id": 1892,
                      "isConstant": false,
                      "isLValue": false,
                      "isPure": true,
                      "kind": "typeConversion",
                      "lValueRequested": false,
                      "names": [],
                      "nodeType": "FunctionCall",
                      "src": "29585:10:2",
                      "tryCall": false,
                      "typeDescriptions": {
                        "typeIdentifier": "t_address_payable",
                        "typeString": "address payable"
                      }
                    },
                    "src": "29576:19:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "functionReturnParameters": 1887,
                  "id": 1894,
                  "nodeType": "Return",
                  "src": "29569:26:2"
                }
              ]
            },
            "documentation": {
              "id": 1881,
              "nodeType": "StructuredDocumentation",
              "src": "29441:45:2",
              "text": "@notice if use a native token"
            },
            "id": 1896,
            "implemented": true,
            "kind": "function",
            "modifiers": [],
            "name": "_isNativeToken",
            "nodeType": "FunctionDefinition",
            "overrides": null,
            "parameters": {
              "id": 1884,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1883,
                  "mutability": "mutable",
                  "name": "token",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1896,
                  "src": "29515:13:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1882,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "29515:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "29514:15:2"
            },
            "returnParameters": {
              "id": 1887,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1886,
                  "mutability": "mutable",
                  "name": "",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1896,
                  "src": "29553:4:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_bool",
                    "typeString": "bool"
                  },
                  "typeName": {
                    "id": 1885,
                    "name": "bool",
                    "nodeType": "ElementaryTypeName",
                    "src": "29553:4:2",
                    "typeDescriptions": {
                      "typeIdentifier": "t_bool",
                      "typeString": "bool"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "29552:6:2"
            },
            "scope": 1910,
            "src": "29491:111:2",
            "stateMutability": "pure",
            "virtual": false,
            "visibility": "internal"
          },
          {
            "body": {
              "id": 1908,
              "nodeType": "Block",
              "src": "29655:115:2",
              "statements": [
                {
                  "expression": {
                    "argumentTypes": null,
                    "arguments": [
                      {
                        "argumentTypes": null,
                        "baseExpression": {
                          "argumentTypes": null,
                          "id": 1901,
                          "name": "isWhitelistedProvider",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 504,
                          "src": "29673:21:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_mapping$_t_address_$_t_bool_$",
                            "typeString": "mapping(address => bool)"
                          }
                        },
                        "id": 1903,
                        "indexExpression": {
                          "argumentTypes": null,
                          "id": 1902,
                          "name": "provider",
                          "nodeType": "Identifier",
                          "overloadedDeclarations": [],
                          "referencedDeclaration": 1898,
                          "src": "29695:8:2",
                          "typeDescriptions": {
                            "typeIdentifier": "t_address",
                            "typeString": "address"
                          }
                        },
                        "isConstant": false,
                        "isLValue": true,
                        "isPure": false,
                        "lValueRequested": false,
                        "nodeType": "IndexAccess",
                        "src": "29673:31:2",
                        "typeDescriptions": {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        }
                      },
                      {
                        "argumentTypes": null,
                        "hexValue": "53746f726167654d616e616765723a2070726f7669646572206973206e6f742077686974656c6973746564",
                        "id": 1904,
                        "isConstant": false,
                        "isLValue": false,
                        "isPure": true,
                        "kind": "string",
                        "lValueRequested": false,
                        "nodeType": "Literal",
                        "src": "29706:45:2",
                        "subdenomination": null,
                        "typeDescriptions": {
                          "typeIdentifier": "t_stringliteral_8747775c39b913702932b58c119cc20359eec226e37c023d68f46f1be83f8e09",
                          "typeString": "literal_string \"StorageManager: provider is not whitelisted\""
                        },
                        "value": "StorageManager: provider is not whitelisted"
                      }
                    ],
                    "expression": {
                      "argumentTypes": [
                        {
                          "typeIdentifier": "t_bool",
                          "typeString": "bool"
                        },
                        {
                          "typeIdentifier": "t_stringliteral_8747775c39b913702932b58c119cc20359eec226e37c023d68f46f1be83f8e09",
                          "typeString": "literal_string \"StorageManager: provider is not whitelisted\""
                        }
                      ],
                      "id": 1900,
                      "name": "require",
                      "nodeType": "Identifier",
                      "overloadedDeclarations": [
                        -18,
                        -18
                      ],
                      "referencedDeclaration": -18,
                      "src": "29665:7:2",
                      "typeDescriptions": {
                        "typeIdentifier": "t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$",
                        "typeString": "function (bool,string memory) pure"
                      }
                    },
                    "id": 1905,
                    "isConstant": false,
                    "isLValue": false,
                    "isPure": false,
                    "kind": "functionCall",
                    "lValueRequested": false,
                    "names": [],
                    "nodeType": "FunctionCall",
                    "src": "29665:87:2",
                    "tryCall": false,
                    "typeDescriptions": {
                      "typeIdentifier": "t_tuple$__$",
                      "typeString": "tuple()"
                    }
                  },
                  "id": 1906,
                  "nodeType": "ExpressionStatement",
                  "src": "29665:87:2"
                },
                {
                  "id": 1907,
                  "nodeType": "PlaceholderStatement",
                  "src": "29762:1:2"
                }
              ]
            },
            "documentation": null,
            "id": 1909,
            "name": "whitelistedProvider",
            "nodeType": "ModifierDefinition",
            "overrides": null,
            "parameters": {
              "id": 1899,
              "nodeType": "ParameterList",
              "parameters": [
                {
                  "constant": false,
                  "id": 1898,
                  "mutability": "mutable",
                  "name": "provider",
                  "nodeType": "VariableDeclaration",
                  "overrides": null,
                  "scope": 1909,
                  "src": "29637:16:2",
                  "stateVariable": false,
                  "storageLocation": "default",
                  "typeDescriptions": {
                    "typeIdentifier": "t_address",
                    "typeString": "address"
                  },
                  "typeName": {
                    "id": 1897,
                    "name": "address",
                    "nodeType": "ElementaryTypeName",
                    "src": "29637:7:2",
                    "stateMutability": "nonpayable",
                    "typeDescriptions": {
                      "typeIdentifier": "t_address",
                      "typeString": "address"
                    }
                  },
                  "value": null,
                  "visibility": "internal"
                }
              ],
              "src": "29636:18:2"
            },
            "src": "29608:162:2",
            "virtual": false,
            "visibility": "internal"
          }
        ],
        "scope": 1911,
        "src": "647:29125:2"
      }
    ],
    "src": "32:29741:2"
  },
  "compiler": {
    "name": "solc",
    "version": "0.6.12+commit.27d51765.Emscripten.clang"
  },
  "networks": {},
  "schemaVersion": "3.3.2",
  "updatedAt": "2021-03-04T12:24:19.828Z",
  "devdoc": {
    "author": "Rinke Hendriksen <rinke@iovlabs.org>Adam Uhlir <adam@iovlabs.org>",
    "kind": "dev",
    "methods": {
      "depositFunds(address,uint256,bytes32[],address)": {
        "details": "- depositing funds to Agreement that is linked to terminated Offer is not possible - depositing funds to Agreement that already is expired (eq. ran out of funds at some point) is not possible. Call NewAgreement instead. The data needs to be re-provided though. - if the token is not the native currency, then the contract must be first be given allowance to transfer tokens in it's posession.",
        "params": {
          "dataReference": "data reference where should be deposited funds.",
          "provider": "the address of the provider of the Offer."
        }
      },
      "emitMessage(bytes32[])": {
        "params": {
          "message": "the Provider may send a message (e.g. his nodeID). Message should be structured such that the first two bits specify the message type, followed with the message). 0x01 == nodeID"
        }
      },
      "getAgreementReference(bytes32[],address,address)": {
        "params": {
          "creator": "the creator of the agreement",
          "dataReference": "the dataReference of the agreement",
          "token": "the token, which is used as a means of payment for the agreement."
        }
      },
      "newAgreement(bytes32[],address,uint64,uint64,address,uint256,bytes32[][],address[],address)": {
        "details": "- The to-be-pinned data reference's size in MB (rounded up) must be equal in size to param size. - Provider can reject to pin data reference when it exceeds specified size. - The ownership of Agreement is enforced with agreementReference structure which is calculated as: hash(msg.sender, dataReference) - if the token is not the native currency, then the contract must be first be given allowance to transfer tokens in it's posession. Contains execution of the transferFrom on external token contract before all the stage changes are performed. As a result if a token will perform a callback to the StorageManager, it may lead to a reentrancy attack. Hence additional attention should be paid while reviewing this method of a token before whitelisting.",
        "params": {
          "amount": "if token is set, this is the amount of tokens that is transfered",
          "billingPeriod": "the chosen period for billing.",
          "creatorsOfAgreementToPayOut": "the creators of agreements which must be payed out. Pass this when there is no capacity. The order should match the order of dataReferenceOfAgreementToPayOut and tokensOfAgreementToPayOut",
          "dataReference": "the reference to an Data Source, can be several things.",
          "dataReferencesOfAgreementToPayOut": "the data references of agreements which must be payed out. Pass this when there is no capacity. Order should equal order of creatorsOfAgreementToPayOut and tokensOfAgreementToPayOut",
          "provider": "the provider from which is proposed to take a Offer.",
          "size": "the size of the to-be-pinned file in MB (rounded up).",
          "token": "the token in which you want to make the agreement. By convention: address(0) is the native currency",
          "tokenOfAgreementsToPayOut": "the token address of agreements which must be payed out. Pass this when there is no capacity."
        }
      },
      "owner()": {
        "details": "Returns the address of the current owner."
      },
      "pause()": {
        "details": "Called by a pauser to pause, triggers stopped state."
      },
      "paused()": {
        "details": "Returns true if the contract is paused, and false otherwise."
      },
      "payoutFunds(bytes32[][],address[],address,address)": {
        "details": "- Provider must call an expired agreement themselves as soon as the agreement is expired, to add back the capacity to their Offer. - Payout can be triggered by other events as well. Like in newAgreement call with either existing agreement or when other Agreements are passed to the agreementsReferencesToBePayedOut array.",
        "params": {
          "creatorsOfAgreementToPayOut": "the creators that made the agreement to pay",
          "dataReferencesOfAgreementToPayOut": "the data references of the agreement to pay",
          "tokensOfAgreementsToPayOut": "the tokens of the agreement to pay out"
        }
      },
      "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."
      },
      "setBillingPlans(uint64[][],uint128[][],address[])": {
        "details": "- setting the price to 0 means that a particular period is not offered, which can be used to remove a period from the offer. - make sure that any period * prices does not cause an overflow, as this can never be accepted and hence is pointless. - the length of tokens array must always be one shorter than the length of the boundaries array (otherwise you get an array index out of bounds error) - make sure that the length of billingPeriods and billingPrices is of equal length. If billingPeriods is longer than prices => array index out of bounds error. If prices longer than period => the prices in higher indeces won't be considered",
        "params": {
          "billingPeriods": "the offered periods. Length must be equal to billingPrices. The first index of the multi dem array corresponds with the address in tokens at the same index",
          "billingPrices": "the prices for the offered periods. Each entry at index corresponds to the same index at periods. 0 means that the particular period is not offered. The first index of the multi dem array corresponds with the address in tokens at the same index"
        }
      },
      "setOffer(uint64,uint64[][],uint128[][],address[],bytes32[])": {
        "details": "- Use this function when initiating an Offer or when the users wants to change more than one parameter at once. - make sure that any period * prices does not cause an overflow, as this can never be accepted (REF_MAX_PRICE) and hence is pointless - only whitelisted tokens are allowed to make an offer for - if there are two tokens, and two billingPrice/periods pairs per token, then boundaries[0] == 1. This makes the first two billingPeriod/prices pairs to apply to the first token ([tokens[0]]) and the second pairs to the second token. - make sure that the length of billingPeriods and billingPrices is of equal length. If billingPeriods is longer than prices => array index out of bounds error. If prices longer than period => the prices in higher indeces won't be considered",
        "params": {
          "billingPeriods": "the offered periods. Length must be equal to the length of billingPrices. The first index of the multi dem array corresponds with the address in tokens at the same index",
          "billingPrices": "the prices for the offered periods. Each entry at index corresponds to the same index at periods. The first index of the multi dem array corresponds with the address in tokens at the same index",
          "capacity": "the amount of MB offered. If already active before and set to 0, existing contracts can't be prolonged / re-started, no new contracts can be started.",
          "message": "the Provider may include a message (e.g. his nodeID).  Message should be structured such that the first two bits specify the message type, followed with the message). 0x01 == nodeID",
          "tokens": "the tokens for which an offer is made. By convention, address(0) is the native currency."
        }
      },
      "setTotalCapacity(uint64)": {
        "params": {
          "capacity": "the new capacity"
        }
      },
      "setWhitelistedProvider(address,bool)": {
        "params": {
          "isWhiteListed": "whether you want to whitelist the provider or put it from the whitelist.",
          "providerAddress": "the providerAddress from whom you want to set the whitelisted"
        }
      },
      "setWhitelistedTokens(address,bool)": {
        "params": {
          "isWhiteListed": "whether you want to whitelist the token or put it from the whitelist.",
          "token": "the token from whom you want to set the whitelisted"
        }
      },
      "terminateOffer()": {
        "details": "no new Agreement can be created and no existing Agreement can be prolonged. All existing Agreement are still valid for the amount of periods still deposited."
      },
      "transferOwnership(address)": {
        "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
      },
      "unpause()": {
        "details": "Called by a pauser to unpause, returns to normal state."
      },
      "withdrawFunds(bytes32[],address,address[],uint256[])": {
        "details": "- if amount is zero then all withdrawable funds are transferred (eq. all available funds minus funds for still non-payed out periods and current period) - if Agreement is terminated Consumer can withdraw all remaining funds - if the token is not the native currency, then the contract must be first be given allowance to transfer tokens in it's posession.",
        "params": {
          "amounts": "the value you want to withdraw for each token",
          "dataReference": "the data reference of agreement to be funds withdrawn from",
          "provider": "the address of the provider of the Offer.",
          "tokens": "the tokens in which to withdraw. By convention, address(0) is the native currency."
        }
      }
    },
    "title": "StorageManager",
    "version": 1
  },
  "userdoc": {
    "kind": "user",
    "methods": {
      "depositFunds(address,uint256,bytes32[],address)": {
        "notice": ">> FOR CONSUMERdeposits new funds to the Agreement."
      },
      "emitMessage(bytes32[])": {
        "notice": ">> FOR PROVIDER"
      },
      "getAgreementReference(bytes32[],address,address)": {
        "notice": "get the agreementReference. the agreementReference consists of the hash of the dataReference, msg.sender and the tokenAdddress, to allow: - multiple people to register an agreement for the same file - one person to register multiple agreements for the same file, but with different tokens - link the token to the agreement, such that we do the accounting properly"
      },
      "newAgreement(bytes32[],address,uint64,uint64,address,uint256,bytes32[][],address[],address)": {
        "notice": ">> FOR CONSUMERnew Agreement for given Offer"
      },
      "payoutFunds(bytes32[][],address[],address,address)": {
        "notice": ">> FOR PROVIDERpayout already earned funds of one or more Agreement"
      },
      "setBillingPlans(uint64[][],uint128[][],address[])": {
        "notice": ">> FOR PROVIDERset the billing plans for an Offer."
      },
      "setOffer(uint64,uint64[][],uint128[][],address[],bytes32[])": {
        "notice": ">> FOR PROVIDERset the totalCapacity and billingPlans of a Offer."
      },
      "setTotalCapacity(uint64)": {
        "notice": ">> FOR PROVIDERsets total capacity of Offer."
      },
      "setWhitelistedProvider(address,bool)": {
        "notice": "whitelist a provider or remove the provider from whitelist"
      },
      "setWhitelistedTokens(address,bool)": {
        "notice": "whitelist a token or remove the token from whitelist"
      },
      "terminateOffer()": {
        "notice": ">> FOR PROVIDERstops the Offer. It sets the totalCapacity to 0 which indicates terminated Offer."
      },
      "withdrawFunds(bytes32[],address,address[],uint256[])": {
        "notice": ">> FOR CONSUMERwithdraw funds from Agreement."
      }
    },
    "notice": "Providers can offer their storage space and list their price and Consumers can take these offers",
    "version": 1
  }
}